DescriptionRun task queue manager work in batches
This patch lets the task queue manager run more than one posted task
per invocation. This helps reduce the overhead of yielding to and from
the main message loop and can speed up cases where tasks are posted
very frequently. One example is indexeddb, where some operations such as
index building can result in 2500 posted tasks/s (Nexus 7).
This patch also adds accounting for the desired run time of the next
pending delayed task. This information is used to break out of a work
batch if a delayed task should be run instead. Doing this avoids adding
extra delay to delayed tasks.
A potential downside of this change is that it can penalize work that
runs on the message loop without going through the task queue manager.
Based on performance tests[1], almost all tasks on the renderer main
thread are already getting executed by the task queue manager, so I
believe this change shouldn't cause a regression.
Note that this version of the patch still uses a batch size of 1 while
we investigate some mac test failures triggered by larger batch sizes.
[1] https://docs.google.com/a/chromium.org/spreadsheets/d/1IJZpBabW1pr4fb2T8BlkleHcOvHYrjvmCx_dLesxfMA/edit#gid=1492760051
BUG=444764, 451593, 453898
Committed: https://crrev.com/a11ff40fc19b20b4b47f6875e81859978be3be84
Cr-Commit-Position: refs/heads/master@{#314364}
Patch Set 1 #Patch Set 2 : Rebased. #
Total comments: 3
Patch Set 3 : Implement yielding for delayed tasks. #Patch Set 4 : Header cleanup. #
Total comments: 9
Patch Set 5 : Rebased. #Patch Set 6 : Review comments. #
Total comments: 2
Patch Set 7 : Added a comment about DoWork(). #Patch Set 8 : Rebased. #Patch Set 9 : Reformatted. #Patch Set 10 : Drop batch size to 1 for now. #Patch Set 11 : Added ubsan blacklist entry. #Patch Set 12 : Fix delayed task starvation bug. #Patch Set 13 : DCHECK tweak. #
Messages
Total messages: 47 (11 generated)
|