Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Issue 1441073006: Move throttling of background timers into the renderer scheduler (Closed)

Created:
5 years, 1 month ago by alex clarke (OOO till 29th)
Modified:
5 years ago
CC:
blink-reviews, blink-reviews-api_chromium.org, blink-reviews-dom_chromium.org, blink-worker-reviews_chromium.org, chromium-reviews, dglazkov+blink, eae+blinkwatch, falken, horo+watch_chromium.org, kinuko+worker_chromium.org, rwlbuis, scheduler-bugs_chromium.org, sof
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Move throttling of background timers into the renderer scheduler Not only does this simplify the code, it's more efficent since previously setting the timer alignment resulted in mass cancellation and reposting of timers. BUG=510398, 546953, 560402 Committed: https://crrev.com/ec5adec0a9879a31866e98c65ddc7b506b9f49c3 Cr-Commit-Position: refs/heads/master@{#361971} Committed: https://crrev.com/de233a29aa0ef1b89d35a9045a864c9ad6fa12fe Cr-Commit-Position: refs/heads/master@{#361978}

Patch Set 1 #

Patch Set 2 : Fix timer tests #

Patch Set 3 : Devstudio is being annoying again #

Patch Set 4 : Fix repeating timer anti-drift calculation #

Patch Set 5 : Try again for MSVC #

Total comments: 18

Patch Set 6 : Introduce ManuallyAdvancedTimeDomain to prevent useless wakeups #

Patch Set 7 : Rebase + iterate on the throttling helper #

Patch Set 8 : Fix deps #

Patch Set 9 : Some tweaks #

Patch Set 10 : Fix dcheck and add a test #

Patch Set 11 : Fixed various dchecks #

Total comments: 28

Patch Set 12 : Lot of changes #

Patch Set 13 : Rebased #

Total comments: 8

Patch Set 14 : Removed refcounting from TimeDomain #

Total comments: 6

Patch Set 15 : Fix some tests where the queues outlived the timedomains #

Patch Set 16 : Better fix #

Patch Set 17 : Last few changes Sami requested #

Unified diffs Side-by-side diffs Delta from patch set Stats (+830 lines, -492 lines) Patch
M components/components_tests.gyp View 1 2 3 4 5 6 7 8 9 10 11 12 1 chunk +1 line, -0 lines 0 comments Download
M components/scheduler/BUILD.gn View 1 2 3 4 5 6 1 chunk +1 line, -0 lines 0 comments Download
M components/scheduler/base/real_time_domain.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 2 chunks +1 line, -2 lines 0 comments Download
M components/scheduler/base/real_time_domain.cc View 1 2 3 4 5 6 7 8 9 10 11 1 chunk +1 line, -1 line 0 comments Download
M components/scheduler/base/task_queue.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 4 chunks +6 lines, -8 lines 0 comments Download
M components/scheduler/base/task_queue.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +3 lines, -2 lines 0 comments Download
M components/scheduler/base/task_queue_impl.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 6 chunks +5 lines, -8 lines 0 comments Download
M components/scheduler/base/task_queue_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 8 chunks +22 lines, -27 lines 0 comments Download
M components/scheduler/base/task_queue_manager.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 3 chunks +5 lines, -8 lines 0 comments Download
M components/scheduler/base/task_queue_manager.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 6 chunks +8 lines, -11 lines 0 comments Download
M components/scheduler/base/task_queue_manager_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 10 chunks +38 lines, -73 lines 0 comments Download
M components/scheduler/base/task_queue_selector_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 15 2 chunks +4 lines, -4 lines 0 comments Download
M components/scheduler/base/task_queue_sets_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 3 chunks +5 lines, -5 lines 0 comments Download
M components/scheduler/base/time_domain.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 4 chunks +24 lines, -5 lines 0 comments Download
M components/scheduler/base/time_domain.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 4 chunks +28 lines, -5 lines 0 comments Download
M components/scheduler/base/time_domain_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 5 chunks +50 lines, -10 lines 0 comments Download
M components/scheduler/base/virtual_time_domain.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 2 chunks +3 lines, -3 lines 0 comments Download
M components/scheduler/base/virtual_time_domain.cc View 1 2 3 4 5 6 7 8 9 10 11 2 chunks +5 lines, -2 lines 0 comments Download
M components/scheduler/child/idle_helper.cc View 1 2 3 4 5 6 7 8 9 10 11 1 chunk +1 line, -1 line 0 comments Download
M components/scheduler/child/scheduler_helper.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +3 lines, -1 line 0 comments Download
M components/scheduler/child/scheduler_helper.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +18 lines, -6 lines 0 comments Download
M components/scheduler/child/web_scheduler_impl.h View 1 chunk +0 lines, -5 lines 0 comments Download
M components/scheduler/child/web_scheduler_impl.cc View 1 chunk +0 lines, -14 lines 0 comments Download
M components/scheduler/renderer/renderer_scheduler_impl.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 5 chunks +17 lines, -0 lines 0 comments Download
M components/scheduler/renderer/renderer_scheduler_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 5 chunks +20 lines, -1 line 0 comments Download
A components/scheduler/renderer/throttling_helper.h View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +61 lines, -0 lines 0 comments Download
A components/scheduler/renderer/throttling_helper.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +106 lines, -0 lines 0 comments Download
A components/scheduler/renderer/throttling_helper_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 1 chunk +203 lines, -0 lines 0 comments Download
M components/scheduler/renderer/web_frame_scheduler_impl.h View 1 2 3 4 5 6 7 8 9 10 11 2 chunks +4 lines, -0 lines 0 comments Download
M components/scheduler/renderer/web_frame_scheduler_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 12 13 4 chunks +29 lines, -2 lines 0 comments Download
M components/scheduler/renderer/web_view_scheduler_impl.h View 1 2 3 4 5 6 7 8 3 chunks +5 lines, -2 lines 0 comments Download
M components/scheduler/renderer/web_view_scheduler_impl.cc View 1 2 3 4 5 6 7 8 9 10 11 3 chunks +22 lines, -7 lines 0 comments Download
M components/scheduler/renderer/web_view_scheduler_impl_unittest.cc View 1 2 3 4 5 6 7 8 9 10 3 chunks +99 lines, -6 lines 0 comments Download
M components/scheduler/renderer/webthread_impl_for_renderer_scheduler_unittest.cc View 1 2 3 4 5 6 7 8 9 10 11 1 chunk +13 lines, -10 lines 0 comments Download
M components/scheduler/scheduler.gypi View 1 2 3 4 5 6 1 chunk +4 lines, -2 lines 0 comments Download
M third_party/WebKit/Source/core/dom/Document.h View 1 2 3 4 5 6 7 8 9 10 11 1 chunk +0 lines, -2 lines 0 comments Download
M third_party/WebKit/Source/core/dom/Document.cpp View 1 2 3 4 5 6 7 8 9 10 11 12 14 15 16 5 chunks +5 lines, -13 lines 0 comments Download
M third_party/WebKit/Source/core/dom/ExecutionContext.h View 1 chunk +0 lines, -1 line 0 comments Download
M third_party/WebKit/Source/core/dom/ScriptRunnerTest.cpp View 1 2 3 4 5 6 1 chunk +0 lines, -1 line 0 comments Download
M third_party/WebKit/Source/core/frame/DOMTimer.h View 2 chunks +0 lines, -7 lines 0 comments Download
M third_party/WebKit/Source/core/frame/DOMTimer.cpp View 2 chunks +0 lines, -49 lines 0 comments Download
M third_party/WebKit/Source/core/frame/DOMTimerCoordinator.h View 1 chunk +0 lines, -5 lines 0 comments Download
M third_party/WebKit/Source/core/frame/DOMTimerCoordinator.cpp View 1 chunk +0 lines, -14 lines 0 comments Download
M third_party/WebKit/Source/core/frame/LocalDOMWindow.cpp View 1 2 3 4 5 6 7 8 9 10 11 12 13 1 chunk +1 line, -4 lines 0 comments Download
M third_party/WebKit/Source/core/frame/SuspendableTimer.cpp View 1 chunk +1 line, -1 line 0 comments Download
M third_party/WebKit/Source/core/page/Page.h View 1 2 3 4 5 6 7 8 9 10 11 12 3 chunks +0 lines, -6 lines 0 comments Download
M third_party/WebKit/Source/core/page/Page.cpp View 1 2 3 4 5 6 7 8 9 10 11 12 2 chunks +0 lines, -27 lines 0 comments Download
M third_party/WebKit/Source/core/testing/NullExecutionContext.h View 1 chunk +0 lines, -2 lines 0 comments Download
M third_party/WebKit/Source/core/testing/NullExecutionContext.cpp View 1 chunk +0 lines, -5 lines 0 comments Download
M third_party/WebKit/Source/core/workers/WorkerGlobalScope.h View 1 2 3 4 5 6 7 8 9 10 11 12 1 chunk +0 lines, -1 line 0 comments Download
M third_party/WebKit/Source/core/workers/WorkerGlobalScope.cpp View 1 2 3 4 5 6 7 8 9 10 11 12 1 chunk +0 lines, -5 lines 0 comments Download
M third_party/WebKit/Source/platform/Timer.h View 3 chunks +0 lines, -4 lines 0 comments Download
M third_party/WebKit/Source/platform/Timer.cpp View 1 2 3 3 chunks +8 lines, -26 lines 0 comments Download
M third_party/WebKit/Source/platform/TimerTest.cpp View 1 2 3 4 5 6 2 chunks +0 lines, -79 lines 0 comments Download
M third_party/WebKit/public/platform/WebScheduler.h View 1 chunk +0 lines, -9 lines 0 comments Download

Messages

Total messages: 70 (31 generated)
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/1 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/1
5 years, 1 month ago (2015-11-13 11:19:31 UTC) #2
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/20001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/20001
5 years, 1 month ago (2015-11-13 11:28:24 UTC) #4
commit-bot: I haz the power
Dry run: Try jobs failed on following builders: win_chromium_x64_rel_ng on tryserver.chromium.win (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_x64_rel_ng/builds/130389)
5 years, 1 month ago (2015-11-13 11:54:55 UTC) #6
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/40001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/40001
5 years, 1 month ago (2015-11-13 12:00:42 UTC) #8
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/60001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/60001
5 years, 1 month ago (2015-11-13 12:28:25 UTC) #10
alex clarke (OOO till 29th)
5 years, 1 month ago (2015-11-13 12:28:49 UTC) #12
commit-bot: I haz the power
Dry run: Try jobs failed on following builders: win_chromium_compile_dbg_ng on tryserver.chromium.win (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_compile_dbg_ng/builds/108206)
5 years, 1 month ago (2015-11-13 12:57:28 UTC) #14
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/80001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/80001
5 years, 1 month ago (2015-11-13 13:31:57 UTC) #16
commit-bot: I haz the power
Dry run: Try jobs failed on following builders: win_chromium_rel_ng on tryserver.chromium.win (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_rel_ng/builds/134605) win_chromium_x64_rel_ng on ...
5 years, 1 month ago (2015-11-13 14:04:09 UTC) #18
jochen (gone - plz use gerrit)
https://codereview.chromium.org/1441073006/diff/80001/third_party/WebKit/public/platform/WebPassOwnPtr.h File third_party/WebKit/public/platform/WebPassOwnPtr.h (right): https://codereview.chromium.org/1441073006/diff/80001/third_party/WebKit/public/platform/WebPassOwnPtr.h#newcode55 third_party/WebKit/public/platform/WebPassOwnPtr.h:55: T* get() const that breaks the ownership semantics of ...
5 years, 1 month ago (2015-11-16 11:51:44 UTC) #19
Sami
Thanks, looks like an excellent cleanup! https://codereview.chromium.org/1441073006/diff/80001/components/scheduler/renderer/renderer_scheduler_impl.cc File components/scheduler/renderer/renderer_scheduler_impl.cc (right): https://codereview.chromium.org/1441073006/diff/80001/components/scheduler/renderer/renderer_scheduler_impl.cc#newcode180 components/scheduler/renderer/renderer_scheduler_impl.cc:180: return helper_.ControlTaskRunner(); nit: ...
5 years, 1 month ago (2015-11-17 10:12:21 UTC) #20
alex clarke (OOO till 29th)
PTAL https://codereview.chromium.org/1441073006/diff/80001/components/scheduler/renderer/renderer_scheduler_impl.cc File components/scheduler/renderer/renderer_scheduler_impl.cc (right): https://codereview.chromium.org/1441073006/diff/80001/components/scheduler/renderer/renderer_scheduler_impl.cc#newcode180 components/scheduler/renderer/renderer_scheduler_impl.cc:180: return helper_.ControlTaskRunner(); On 2015/11/17 10:12:21, Sami wrote: > ...
5 years, 1 month ago (2015-11-23 17:13:46 UTC) #22
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/160001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/160001
5 years, 1 month ago (2015-11-23 17:13:52 UTC) #23
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/180001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/180001
5 years, 1 month ago (2015-11-23 17:46:11 UTC) #26
commit-bot: I haz the power
Dry run: Try jobs failed on following builders: win_chromium_x64_rel_ng on tryserver.chromium.win (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.win/builders/win_chromium_x64_rel_ng/builds/134607)
5 years, 1 month ago (2015-11-23 18:31:17 UTC) #28
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/200001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/200001
5 years ago (2015-11-24 10:42:07 UTC) #30
commit-bot: I haz the power
Dry run: Try jobs failed on following builders: linux_chromium_chromeos_rel_ng on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_chromeos_rel_ng/builds/133670)
5 years ago (2015-11-24 12:04:27 UTC) #32
Sami
Great stuff! https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/base/task_queue.h File components/scheduler/base/task_queue.h (right): https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/base/task_queue.h#newcode146 components/scheduler/base/task_queue.h:146: virtual bool IsQueueEmpty() const; Should we rename ...
5 years ago (2015-11-24 12:48:48 UTC) #33
alex clarke (OOO till 29th)
PTAL https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/base/task_queue.h File components/scheduler/base/task_queue.h (right): https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/base/task_queue.h#newcode146 components/scheduler/base/task_queue.h:146: virtual bool IsQueueEmpty() const; On 2015/11/24 12:48:47, Sami ...
5 years ago (2015-11-25 12:29:37 UTC) #34
alex clarke (OOO till 29th)
https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/renderer/throttling_helper.h File components/scheduler/renderer/throttling_helper.h (right): https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/renderer/throttling_helper.h#newcode32 components/scheduler/renderer/throttling_helper.h:32: void ThrottleBackgroundFrame(WebFrameSchedulerImpl* frame_scheduler); On 2015/11/24 12:48:48, Sami wrote: > ...
5 years ago (2015-11-25 12:30:12 UTC) #35
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/220001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/220001
5 years ago (2015-11-25 12:32:09 UTC) #37
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/240001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/240001
5 years ago (2015-11-25 13:27:58 UTC) #39
commit-bot: I haz the power
Dry run: Try jobs failed on following builders: linux_chromium_chromeos_rel_ng on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_chromeos_rel_ng/builds/134347)
5 years ago (2015-11-25 14:42:16 UTC) #41
Sami
Looks great. Just one question about the throttling helper's logic. https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/renderer/throttling_helper.cc File components/scheduler/renderer/throttling_helper.cc (right): https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/renderer/throttling_helper.cc#newcode105 ...
5 years ago (2015-11-25 17:12:25 UTC) #42
alex clarke (OOO till 29th)
PTAL https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/renderer/throttling_helper.cc File components/scheduler/renderer/throttling_helper.cc (right): https://codereview.chromium.org/1441073006/diff/200001/components/scheduler/renderer/throttling_helper.cc#newcode105 components/scheduler/renderer/throttling_helper.cc:105: const base::TimeDelta one_second = base::TimeDelta::FromSeconds(1); On 2015/11/25 17:12:25, ...
5 years ago (2015-11-26 18:43:27 UTC) #43
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/260001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/260001
5 years ago (2015-11-26 18:44:36 UTC) #45
Sami
scheduler parts lgtm. Just one thought about the Blink changes. https://codereview.chromium.org/1441073006/diff/260001/components/scheduler/base/task_queue_impl.cc File components/scheduler/base/task_queue_impl.cc (left): https://codereview.chromium.org/1441073006/diff/260001/components/scheduler/base/task_queue_impl.cc#oldcode228 ...
5 years ago (2015-11-26 19:27:50 UTC) #46
commit-bot: I haz the power
Dry run: Try jobs failed on following builders: linux_chromium_chromeos_ozone_rel_ng on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/linux_chromium_chromeos_ozone_rel_ng/builds/93934)
5 years ago (2015-11-26 19:36:00 UTC) #48
commit-bot: I haz the power
Dry run: CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/300001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/300001
5 years ago (2015-11-26 22:04:02 UTC) #50
commit-bot: I haz the power
Dry run: This issue passed the CQ dry run.
5 years ago (2015-11-26 23:24:44 UTC) #52
jochen (gone - plz use gerrit)
lgtm
5 years ago (2015-11-27 08:23:38 UTC) #53
alex clarke (OOO till 29th)
Thanks all! https://codereview.chromium.org/1441073006/diff/260001/components/scheduler/base/task_queue_impl.cc File components/scheduler/base/task_queue_impl.cc (left): https://codereview.chromium.org/1441073006/diff/260001/components/scheduler/base/task_queue_impl.cc#oldcode228 components/scheduler/base/task_queue_impl.cc:228: On 2015/11/26 19:27:50, Sami wrote: > Intentional? ...
5 years ago (2015-11-27 10:01:59 UTC) #54
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/300001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/300001
5 years ago (2015-11-27 10:03:09 UTC) #57
commit-bot: I haz the power
Committed patchset #16 (id:300001)
5 years ago (2015-11-27 10:08:50 UTC) #59
commit-bot: I haz the power
Patchset 16 (id:??) landed as https://crrev.com/ec5adec0a9879a31866e98c65ddc7b506b9f49c3 Cr-Commit-Position: refs/heads/master@{#361971}
5 years ago (2015-11-27 10:09:46 UTC) #61
alex clarke (OOO till 29th)
A revert of this CL (patchset #16 id:300001) has been created in https://codereview.chromium.org/1477353002/ by alexclarke@chromium.org. ...
5 years ago (2015-11-27 10:11:11 UTC) #62
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1441073006/320001 View timeline at https://chromium-cq-status.appspot.com/patch-timeline/1441073006/320001
5 years ago (2015-11-27 10:14:02 UTC) #66
commit-bot: I haz the power
Committed patchset #17 (id:320001)
5 years ago (2015-11-27 11:43:02 UTC) #68
commit-bot: I haz the power
5 years ago (2015-11-27 11:43:51 UTC) #70
Message was sent while issue was closed.
Patchset 17 (id:??) landed as
https://crrev.com/de233a29aa0ef1b89d35a9045a864c9ad6fa12fe
Cr-Commit-Position: refs/heads/master@{#361978}

Powered by Google App Engine
This is Rietveld 408576698