summaryrefslogtreecommitdiff
path: root/libs/hwui/thread/TaskManager.cpp
AgeCommit message (Collapse)Author
2019-03-18Remove old TaskManager systemJohn Reck
Replace it with a newer, fancier, WorkQueue-inspired one that's just a global common thread pool. Test: hwuiunit passes Change-Id: Ib5d03104a08bbac9a4ec67a1bfc0db2b35d6700f
2019-02-06Fix RenderThread and worker thread names used by toolsStan Iliev
Test: collected systrace and RenderThread hwuiTask1/2 shown Change-Id: I1114ff72a7ed8c9dc86a64ebd15ca783d1b2ff08
2019-02-05Tell JVM to not wait for HWUI worker threads upon shutdownStan Iliev
RenderThread is setup as a daemon thread, which allows JVM to exit without waiting on it. This CL does same setup for HWUI worker threads, which offload work from the RenderThread. This fixes an issue exposed by Vulkan pipeline, which is pushing different loads to the worker threads and causing some java tests to hang on exit. This is not a Vulkan specific issue, because GL also hangs if worker thread is started. Bug: 123374538 Test: Ran DismissDialogsInstrumentation test Change-Id: Ie4ee94737ced975323a0792f57f8426c958e8056
2018-12-03Remove ; from closing namespaces in libs/hwuiChris Blume
When closing a namespace a } is sufficient. It doesn't need to be }; like closing a class or enum. Within frameworks/base/libs/hwui there is a mix between } and }; when closing a namespace. There are even mixes between a .h and the corresponding .cpp files. In a separate CL I was asked to not close with };. That was a good comment. I adopted the style from nearby code. This CL cleans up the nearby code. Test: I made sure the code still built as expected. Change-Id: Ieb314a4f48d6e33752463f3be4361fdc9be97482
2017-11-03Format the world (or just HWUI)John Reck
Test: No code changes, just ran through clang-format Change-Id: Id23aa4ec7eebc0446fe3a30260f33e7fd455bb8c
2016-02-08Revert "Revert "TaskManager bench""Chris Craik
This reverts commit 9640477e3cc075b0f303e817a3ebcc72d7bc878b. Change-Id: I3aa8f2830b43b9c7b211c5792a311d0bc698c51a
2016-02-05Revert "TaskManager bench"Daniel Chapin
This reverts commit 02db03ca0584371504fd29ced77c00d601cb0971. Change-Id: I86bdf5e6774e99f9add59a657bfc50d45ebfda1d
2016-02-04TaskManager benchChris Craik
bug:26964750 Change-Id: Ibda0cd2e5e64331a4367d4985d6acfd6f3baeda1
2015-07-30Replace most usages of utils/Vector.hJohn Reck
Change-Id: I540d1b3523244d6c71fc52d6fb30555271c25644
2015-07-07Restrict number of hwuiTask threadsJohn Reck
Bug: 22324907 Change-Id: I0013557ede15949a5bd6f3f75bc5dd023a9f945b
2015-03-24Shave 10us off of hwuitaskJohn Reck
This prevents an issue where if the signal schedules hwuiTask it will immediately block and go back to sleep due to mLock still being held. This costs 10us in thread scheduling ping-ponging bouncing between hwuiTask and RenderThread Change-Id: I47595c1bf5736576483a6aa7aada0b1be1e04268
2015-02-04Merge "Fix ANR caused by hwuiTask thread"John Reck
2015-01-26kill HAVE_PTHREADS.Yabin Cui
Bug: 19083585 Change-Id: Ib466949bb6cd6d1bbc4680e989f0f9fae62ca564
2015-01-12Fix ANR caused by hwuiTask threadSangkyu Lee
If hwuiTask thread is exited while HWUI renders something, some tasks can remain unfinished forever. This can make ANR problem if RenderThread waits this kind of tasks. According to the current implementation, hwuiTask threads are exited when HWUI receives trimMemory() callback with level >= 20 and some applications such as SystemUI can receive trimMemory() with level >= 20 even though they renders something yet. (For instance, when RecentsActivity in SystemUI is finished, HWUI receives trimMemory() callback with level >= 20 but SystemUI should still render the status bar and navigation bar.) This patch prevents the tasks from remaining unfinished and make the tasks executed immediately if they cannot be added to their TaskProcessors. Change-Id: I5bd26439aa5f183b1a7c1ce466362e27554b4d16
2014-08-15Fix hwuitask & RT prioritiesJohn Reck
Bug: 15993695 Change-Id: Ib6f07237cb834e8d10f3074f8fb206d27f91859a
2014-06-10Tessellate on worker threadsChris Craik
Tessellate and cache (where possible) shadow and round rect tessellation tasks. Change-Id: I2cfda8e11d83d51ea74af871235cf26e8f831d40
2013-08-21Properly account for created paths in the cacheRomain Guy
Change-Id: I47b89b3085cefab6daac9194e7bfd3c140b37fa2
2013-03-20Stop worker threads on memory trim & fix bad pointer accessRomain Guy
Change-Id: I6fe7e31aeb6dd41fa65ab952caed97bc2da510d7
2013-03-12Add TaskManager APIRomain Guy
This API can be used to run arbitrary tasks on a pool of worker threads. The number of threads is calculated based on the number of CPU cores available. The API is made of 3 classes: TaskManager Creates and manages the worker threads. Task Describes the work to be done and the type of the output. A task contains a future used to wait for the worker thread to be done computing the result of the task. TaskProcessor The processor dispatches tasks to the TaskManager and is responsible for performing the computation required by each task. A processor will only be asked to process tasks sent to the manager through the processor. A typical use case: class MyTask: Task<MyType> class MyProcessor: TaskProcessor<MyType> TaskManager m = new TaskManager(); MyProcessor p = new MyProcessor(m); MyTask t = new MyTask(); p.add(t); // Waits until the result is available MyType result = t->getResult(); Change-Id: I1fe845ba4c49bb0e1b0627ab147f9a861c8e0749