Chromium Code Reviews

Issue 922733002: scheduler: Implement task observers (Closed)

Created:
5 years, 10 months ago by Sami
Modified:
5 years, 10 months ago
Reviewers:
jam, rmcilroy, alex clarke (OOO till 29th)
CC:
chromium-reviews, darin-cc_chromium.org, jam, mkwst+moarreviews-renderer_chromium.org, mlamouri+watch-content_chromium.org, scheduler-bugs_chromium.org
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

scheduler: Implement task observers This patch adds a way for scheduler clients to get notified of task execution, much like with base::MessageLoop. This is needed to allow the execution of microtask checkpoints[1] between tasks by Blink while letting the scheduler use a >1 work batch size. This patch also refactors the various WebThreadImpls to reduce code duplication removes the deprecated postTask entrypoints that don't take the posting location as a parameter. BUG=450977, 444764, 458990 [1] https://html.spec.whatwg.org/multipage/webappapis.html#processing-model-9 Committed: https://crrev.com/ab211a0e344b431ca58c74f7815b15b28f7fb01a Cr-Commit-Position: refs/heads/master@{#316450} Committed: https://crrev.com/0da8dc886fad453b0cf4f1c718da8d44e132b618 Cr-Commit-Position: refs/heads/master@{#317852}

Patch Set 1 #

Total comments: 13

Patch Set 2 : Review comments. #

Total comments: 14

Patch Set 3 : Ross's comments. #

Patch Set 4 : Roll in the refactor. #

Total comments: 2

Patch Set 5 : Gtestify #

Total comments: 4

Patch Set 6 : Didn't mean to change the batch size. #

Patch Set 7 : Fix memory leak. #

Patch Set 8 : Rebased. #

Patch Set 9 : Add a nested task observer. #

Total comments: 4

Patch Set 10 : Alex's comments. #

Patch Set 11 : Missed one. #

Total comments: 10

Patch Set 12 : Support nested run loops. #

Patch Set 13 : Fix shutdown crash. #

Total comments: 2

Patch Set 14 : Implemented Ross's simplification idea. #

Total comments: 2

Patch Set 15 : Here in scheduler-land we've got both types of tasks. #

Patch Set 16 : Added comment about callback counts. #

Total comments: 2

Patch Set 17 : Remove previous task member. #

Patch Set 18 : Rebased. #

Patch Set 19 : Build fix. #

Unified diffs Side-by-side diffs Stats (+583 lines, -126 lines)
M content/child/threaded_data_provider.cc View 5 chunks +16 lines, -13 lines 0 comments
M content/child/webthread_impl.h View 3 chunks +40 lines, -31 lines 0 comments
M content/child/webthread_impl.cc View 4 chunks +55 lines, -77 lines 0 comments
M content/content_renderer.gypi View 1 chunk +2 lines, -0 lines 0 comments
M content/content_tests.gypi View 1 chunk +1 line, -0 lines 0 comments
M content/renderer/renderer_blink_platform_impl.h View 3 chunks +3 lines, -0 lines 0 comments
M content/renderer/renderer_blink_platform_impl.cc View 3 chunks +8 lines, -0 lines 0 comments
M content/renderer/scheduler/null_renderer_scheduler.h View 1 chunk +3 lines, -0 lines 0 comments
M content/renderer/scheduler/null_renderer_scheduler.cc View 1 chunk +10 lines, -0 lines 0 comments
M content/renderer/scheduler/renderer_scheduler.h View 1 chunk +8 lines, -0 lines 0 comments
M content/renderer/scheduler/renderer_scheduler_impl.h View 1 chunk +4 lines, -0 lines 0 comments
M content/renderer/scheduler/renderer_scheduler_impl.cc View 2 chunks +19 lines, -0 lines 0 comments
M content/renderer/scheduler/task_queue_manager.h View 4 chunks +14 lines, -3 lines 0 comments
M content/renderer/scheduler/task_queue_manager.cc View 5 chunks +32 lines, -2 lines 0 comments
M content/renderer/scheduler/task_queue_manager_unittest.cc View 2 chunks +74 lines, -0 lines 0 comments
A content/renderer/scheduler/webthread_impl_for_scheduler.h View 1 chunk +41 lines, -0 lines 0 comments
A content/renderer/scheduler/webthread_impl_for_scheduler.cc View 1 chunk +45 lines, -0 lines 0 comments
A content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc View 1 chunk +197 lines, -0 lines 0 comments
M content/test/fake_renderer_scheduler.h View 1 chunk +3 lines, -0 lines 0 comments
M content/test/fake_renderer_scheduler.cc View 1 chunk +8 lines, -0 lines 0 comments

Messages

Total messages: 44 (11 generated)
Sami
PTAL. I'm working on another patch on top of this that coalesces some of the ...
5 years, 10 months ago (2015-02-12 16:53:41 UTC) #2
alex clarke (OOO till 29th)
https://codereview.chromium.org/922733002/diff/1/content/child/webthread_impl.cc File content/child/webthread_impl.cc (right): https://codereview.chromium.org/922733002/diff/1/content/child/webthread_impl.cc#newcode61 content/child/webthread_impl.cc:61: base::MessageLoop::current()->AddTaskObserver(observer); Do we need DCHECK(main_thread_checker_.CalledOnValidThread()); https://codereview.chromium.org/922733002/diff/1/content/renderer/scheduler/task_queue_manager.cc File content/renderer/scheduler/task_queue_manager.cc (right): ...
5 years, 10 months ago (2015-02-13 11:02:07 UTC) #3
Sami
Thanks Alex. All comments addressed. https://codereview.chromium.org/922733002/diff/1/content/renderer/scheduler/task_queue_manager.cc File content/renderer/scheduler/task_queue_manager.cc (right): https://codereview.chromium.org/922733002/diff/1/content/renderer/scheduler/task_queue_manager.cc#newcode417 content/renderer/scheduler/task_queue_manager.cc:417: FOR_EACH_OBSERVER(base::MessageLoop::TaskObserver, task_observers_, On 2015/02/13 ...
5 years, 10 months ago (2015-02-13 12:09:09 UTC) #4
rmcilroy
Looks great, a couple of nits and a question. https://codereview.chromium.org/922733002/diff/20001/content/renderer/scheduler/null_renderer_scheduler.cc File content/renderer/scheduler/null_renderer_scheduler.cc (right): https://codereview.chromium.org/922733002/diff/20001/content/renderer/scheduler/null_renderer_scheduler.cc#newcode99 content/renderer/scheduler/null_renderer_scheduler.cc:99: ...
5 years, 10 months ago (2015-02-13 12:53:22 UTC) #5
Sami
Thanks Ross. I've pulled in the refactor I mentioned before. PTAL. https://codereview.chromium.org/922733002/diff/20001/content/renderer/scheduler/null_renderer_scheduler.cc File content/renderer/scheduler/null_renderer_scheduler.cc (right): ...
5 years, 10 months ago (2015-02-13 14:27:27 UTC) #6
alex clarke (OOO till 29th)
https://codereview.chromium.org/922733002/diff/60001/content/renderer/scheduler/task_queue_manager_unittest.cc File content/renderer/scheduler/task_queue_manager_unittest.cc (right): https://codereview.chromium.org/922733002/diff/60001/content/renderer/scheduler/task_queue_manager_unittest.cc#newcode591 content/renderer/scheduler/task_queue_manager_unittest.cc:591: void WillProcessTask(const base::PendingTask& task) override { This is OK ...
5 years, 10 months ago (2015-02-13 14:42:19 UTC) #7
Sami
https://codereview.chromium.org/922733002/diff/60001/content/renderer/scheduler/task_queue_manager_unittest.cc File content/renderer/scheduler/task_queue_manager_unittest.cc (right): https://codereview.chromium.org/922733002/diff/60001/content/renderer/scheduler/task_queue_manager_unittest.cc#newcode591 content/renderer/scheduler/task_queue_manager_unittest.cc:591: void WillProcessTask(const base::PendingTask& task) override { On 2015/02/13 14:42:18, ...
5 years, 10 months ago (2015-02-13 15:54:31 UTC) #8
alex clarke (OOO till 29th)
lgtm
5 years, 10 months ago (2015-02-13 15:58:21 UTC) #9
rmcilroy
Looks great - only real comment is to do the task batching in a different ...
5 years, 10 months ago (2015-02-13 16:14:01 UTC) #10
Sami
Thanks! https://codereview.chromium.org/922733002/diff/80001/content/child/webthread_impl.h File content/child/webthread_impl.h (right): https://codereview.chromium.org/922733002/diff/80001/content/child/webthread_impl.h#newcode83 content/child/webthread_impl.h:83: class WebThreadImplForMessageLoop : public WebThreadBase { On 2015/02/13 ...
5 years, 10 months ago (2015-02-13 16:22:34 UTC) #12
Sami
jam@, could you take a peek at these files: content/child/threaded_data_provider.cc content/child/webthread_impl.cc content/child/webthread_impl.h content/renderer/renderer_blink_platform_impl.cc content/renderer/renderer_blink_platform_impl.h
5 years, 10 months ago (2015-02-13 18:23:09 UTC) #14
jam
rs lgtm
5 years, 10 months ago (2015-02-14 01:20:02 UTC) #15
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/922733002/120001
5 years, 10 months ago (2015-02-16 10:39:26 UTC) #17
commit-bot: I haz the power
Committed patchset #7 (id:120001)
5 years, 10 months ago (2015-02-16 11:37:55 UTC) #18
commit-bot: I haz the power
Patchset 7 (id:??) landed as https://crrev.com/ab211a0e344b431ca58c74f7815b15b28f7fb01a Cr-Commit-Position: refs/heads/master@{#316450}
5 years, 10 months ago (2015-02-16 11:38:29 UTC) #19
Sami
A revert of this CL (patchset #7 id:120001) has been created in https://codereview.chromium.org/930063002/ by skyostil@chromium.org. ...
5 years, 10 months ago (2015-02-16 14:41:28 UTC) #20
Sami
The bug was that we were no longer notifying Blink of top-level tasks in the ...
5 years, 10 months ago (2015-02-18 18:53:12 UTC) #22
alex clarke (OOO till 29th)
lgtm Just nits https://codereview.chromium.org/922733002/diff/160001/content/renderer/scheduler/webthread_impl_for_scheduler.cc File content/renderer/scheduler/webthread_impl_for_scheduler.cc (right): https://codereview.chromium.org/922733002/diff/160001/content/renderer/scheduler/webthread_impl_for_scheduler.cc#newcode49 content/renderer/scheduler/webthread_impl_for_scheduler.cc:49: NestedTaskObserver* self_; nit: it can't be ...
5 years, 10 months ago (2015-02-19 10:35:35 UTC) #23
Sami
https://codereview.chromium.org/922733002/diff/160001/content/renderer/scheduler/webthread_impl_for_scheduler.cc File content/renderer/scheduler/webthread_impl_for_scheduler.cc (right): https://codereview.chromium.org/922733002/diff/160001/content/renderer/scheduler/webthread_impl_for_scheduler.cc#newcode49 content/renderer/scheduler/webthread_impl_for_scheduler.cc:49: NestedTaskObserver* self_; On 2015/02/19 10:35:35, alexclarke1 wrote: > nit: ...
5 years, 10 months ago (2015-02-19 11:28:41 UTC) #25
rmcilroy
One question about nested message loops, but otherwise looks good. https://codereview.chromium.org/922733002/diff/200001/content/child/webthread_impl.h File content/child/webthread_impl.h (right): https://codereview.chromium.org/922733002/diff/200001/content/child/webthread_impl.h#newcode57 ...
5 years, 10 months ago (2015-02-19 11:47:49 UTC) #26
Sami
Thanks Ross. Addressed the nested run loop case. PTAL. https://codereview.chromium.org/922733002/diff/200001/content/child/webthread_impl.h File content/child/webthread_impl.h (right): https://codereview.chromium.org/922733002/diff/200001/content/child/webthread_impl.h#newcode57 content/child/webthread_impl.h:57: ...
5 years, 10 months ago (2015-02-19 16:31:09 UTC) #27
rmcilroy
https://codereview.chromium.org/922733002/diff/240001/content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc File content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc (right): https://codereview.chromium.org/922733002/diff/240001/content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc#newcode181 content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc:181: // loop. I worry that we might see test ...
5 years, 10 months ago (2015-02-20 23:03:07 UTC) #28
Sami
Thanks Ross! https://codereview.chromium.org/922733002/diff/240001/content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc File content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc (right): https://codereview.chromium.org/922733002/diff/240001/content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc#newcode181 content/renderer/scheduler/webthread_impl_for_scheduler_unittest.cc:181: // loop. On 2015/02/20 23:03:06, rmcilroy wrote: ...
5 years, 10 months ago (2015-02-23 15:11:02 UTC) #29
rmcilroy
Looks much simpler without the NestedObserver, thanks! One last comment, otherwise looks good. https://codereview.chromium.org/922733002/diff/260001/content/renderer/scheduler/task_queue_manager_unittest.cc File ...
5 years, 10 months ago (2015-02-23 22:41:44 UTC) #30
Sami
https://codereview.chromium.org/922733002/diff/260001/content/renderer/scheduler/task_queue_manager_unittest.cc File content/renderer/scheduler/task_queue_manager_unittest.cc (right): https://codereview.chromium.org/922733002/diff/260001/content/renderer/scheduler/task_queue_manager_unittest.cc#newcode610 content/renderer/scheduler/task_queue_manager_unittest.cc:610: // notifications are filtered out. On 2015/02/23 22:41:43, rmcilroy ...
5 years, 10 months ago (2015-02-24 14:39:20 UTC) #31
rmcilroy
One last optional comment but otherwise lgtm, thanks! https://codereview.chromium.org/922733002/diff/300001/content/renderer/scheduler/task_queue_manager.cc File content/renderer/scheduler/task_queue_manager.cc (right): https://codereview.chromium.org/922733002/diff/300001/content/renderer/scheduler/task_queue_manager.cc#newcode393 content/renderer/scheduler/task_queue_manager.cc:393: previous_task_.task.Reset(); ...
5 years, 10 months ago (2015-02-24 15:32:00 UTC) #32
Sami
https://codereview.chromium.org/922733002/diff/300001/content/renderer/scheduler/task_queue_manager.cc File content/renderer/scheduler/task_queue_manager.cc (right): https://codereview.chromium.org/922733002/diff/300001/content/renderer/scheduler/task_queue_manager.cc#newcode393 content/renderer/scheduler/task_queue_manager.cc:393: previous_task_.task.Reset(); On 2015/02/24 15:32:00, rmcilroy wrote: > One last ...
5 years, 10 months ago (2015-02-24 17:04:44 UTC) #33
rmcilroy
On 2015/02/24 17:04:44, Sami wrote: > https://codereview.chromium.org/922733002/diff/300001/content/renderer/scheduler/task_queue_manager.cc > File content/renderer/scheduler/task_queue_manager.cc (right): > > https://codereview.chromium.org/922733002/diff/300001/content/renderer/scheduler/task_queue_manager.cc#newcode393 > ...
5 years, 10 months ago (2015-02-24 17:35:36 UTC) #34
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/922733002/340001
5 years, 10 months ago (2015-02-24 17:37:33 UTC) #37
commit-bot: I haz the power
Try jobs failed on following builders: linux_chromium_gn_rel on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_gn_rel/builds/62729)
5 years, 10 months ago (2015-02-24 18:33:16 UTC) #39
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/922733002/360001
5 years, 10 months ago (2015-02-24 18:36:11 UTC) #42
commit-bot: I haz the power
Committed patchset #19 (id:360001)
5 years, 10 months ago (2015-02-24 19:36:15 UTC) #43
commit-bot: I haz the power
5 years, 10 months ago (2015-02-24 19:37:00 UTC) #44
Message was sent while issue was closed.
Patchset 19 (id:??) landed as
https://crrev.com/0da8dc886fad453b0cf4f1c718da8d44e132b618
Cr-Commit-Position: refs/heads/master@{#317852}

Powered by Google App Engine