Run 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 Review URL: https://codereview.chromium.org/845543004 Cr-Commit-Position: refs/heads/master@{#314364}
Showing
Please register or sign in to comment