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

Issue 1053113002: Prime the landing pad for the new video rendering pipeline. (Closed)

Created:
5 years, 8 months ago by DaleCurtis
Modified:
5 years, 8 months ago
CC:
chromium-reviews, mlamouri+watch-content_chromium.org, qsr+mojo_chromium.org, Aaron Boodman, posciak+watch_chromium.org, avayvod+watch_chromium.org, viettrungluu+watch_chromium.org, jam, mcasas+watch_chromium.org, ben+mojo_chromium.org, abarth-chromium, feature-media-reviews_chromium.org, darin-cc_chromium.org, yzshen+watch_chromium.org, mkwst+moarreviews-renderer_chromium.org, cc-bugs_chromium.org, wjia+watch_chromium.org, darin (slow to review), servolk, lcwu1
Base URL:
https://chromium.googlesource.com/chromium/src.git@master
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Prime the landing pad for the new video rendering pipeline. This is not a functional change, it only updates the interfaces and call sites in preparation for switching to a vsync based video rendering pipeline. Some notes: - Plumbs a VideoRendererSink into the the rendering pipeline; similar to how we have an AudioRendererSink. - A couple VideoRendererSink mocks are introduced which will be short lived. Like audio, we will need fakes which can pump consumption tasks. - The "PaintCB" callback has been temporarily placed on the new sink interface such that in the field experiments can be run comparing the performance of the video rendering approaches. - Finally nukes Player_X11 since setting up a vsync renderer just for unused tool code isn't worth the effort. - Since compositor callbacks may stop due to visibility changes, the new VideoRendererImpl will use a countdown timer to pump video playback as frames expire; expired frames will not count as dropped. - Since canvas/WebGL requires frame updates in the background a new method has been added to VideoFrameCompositor to return the current frame if it was updated with 250ms, or to request a new one and return the updated one. Subsequent work: - sunnyps@ will be switching VideoFrameProviderClientImpl over to using a BeginFrameObserver, which will ultimately drive the Render() callbacks. - dalecurtis@ will land the VideoRendererAlgorithm which powers the new rendering pipeline. BUG=439548 TEST=everything works as is. Committed: https://crrev.com/45a3c93f745eabf6c1b1cbdac87ed4350a919e76 Cr-Commit-Position: refs/heads/master@{#325306}

Patch Set 1 : Comments. #

Patch Set 2 : Fix cc_unittests #

Total comments: 25

Patch Set 3 : Comments. Revert canvas changes. #

Total comments: 2

Patch Set 4 : Remove visibility stuff. #

Total comments: 37

Patch Set 5 : Comments. #

Total comments: 2

Patch Set 6 : Fix comments. #

Patch Set 7 : Rebase. #

Patch Set 8 : Fix mojo, wcompile errors. #

Total comments: 3

Patch Set 9 : Fix unittest. #

Patch Set 10 : Fix cast. #

Unified diffs Side-by-side diffs Delta from patch set Stats (+501 lines, -1236 lines) Patch
M BUILD.gn View 1 2 3 4 5 6 1 chunk +0 lines, -1 line 0 comments Download
M build/gn_migration.gypi View 1 2 3 4 5 6 1 chunk +0 lines, -1 line 0 comments Download
M cc/layers/video_frame_provider.h View 1 2 3 4 5 3 chunks +49 lines, -21 lines 0 comments Download
M cc/layers/video_frame_provider_client_impl.h View 2 chunks +3 lines, -1 line 0 comments Download
M cc/layers/video_frame_provider_client_impl.cc View 2 chunks +12 lines, -3 lines 0 comments Download
M cc/layers/video_layer_impl.cc View 1 2 3 1 chunk +1 line, -1 line 0 comments Download
M cc/test/fake_video_frame_provider.h View 1 2 3 1 chunk +3 lines, -1 line 0 comments Download
M cc/test/fake_video_frame_provider.cc View 1 2 1 chunk +5 lines, -0 lines 0 comments Download
M chromecast/media/base/switching_media_renderer.h View 1 2 3 4 5 6 7 8 9 1 chunk +0 lines, -1 line 0 comments Download
M chromecast/media/base/switching_media_renderer.cc View 1 2 3 4 5 6 7 8 9 2 chunks +1 line, -2 lines 0 comments Download
M chromecast/media/cma/filters/cma_renderer.h View 1 2 3 4 5 6 7 8 9 4 chunks +4 lines, -3 lines 0 comments Download
M chromecast/media/cma/filters/cma_renderer.cc View 1 2 3 4 5 6 7 8 9 6 chunks +8 lines, -5 lines 0 comments Download
M chromecast/renderer/media/chromecast_media_renderer_factory.h View 1 2 3 4 5 6 7 8 9 1 chunk +2 lines, -1 line 0 comments Download
M chromecast/renderer/media/chromecast_media_renderer_factory.cc View 1 2 3 4 5 6 7 8 9 2 chunks +5 lines, -3 lines 0 comments Download
M content/renderer/media/android/webmediaplayer_android.h View 1 2 3 4 5 6 1 chunk +3 lines, -1 line 0 comments Download
M content/renderer/media/android/webmediaplayer_android.cc View 1 2 3 4 5 6 2 chunks +7 lines, -2 lines 0 comments Download
M content/renderer/media/webmediaplayer_ms.h View 1 2 3 1 chunk +3 lines, -1 line 0 comments Download
M content/renderer/media/webmediaplayer_ms.cc View 1 2 3 2 chunks +9 lines, -2 lines 0 comments Download
M media/BUILD.gn View 1 2 3 1 chunk +0 lines, -31 lines 0 comments Download
M media/base/mock_filters.h View 1 2 3 2 chunks +11 lines, -13 lines 0 comments Download
M media/base/pipeline.h View 3 chunks +0 lines, -4 lines 0 comments Download
M media/base/pipeline.cc View 1 2 3 4 chunks +0 lines, -4 lines 0 comments Download
M media/base/pipeline_unittest.cc View 1 2 3 5 chunks +5 lines, -8 lines 0 comments Download
M media/base/renderer.h View 2 chunks +0 lines, -4 lines 0 comments Download
M media/base/renderer_factory.h View 2 chunks +5 lines, -2 lines 0 comments Download
M media/base/video_renderer.h View 1 2 3 2 chunks +0 lines, -4 lines 0 comments Download
A media/base/video_renderer_sink.h View 1 2 3 4 1 chunk +64 lines, -0 lines 0 comments Download
M media/blink/video_frame_compositor.h View 1 2 3 4 2 chunks +65 lines, -13 lines 0 comments Download
M media/blink/video_frame_compositor.cc View 1 2 3 4 5 6 7 2 chunks +84 lines, -5 lines 0 comments Download
M media/blink/video_frame_compositor_unittest.cc View 1 2 3 4 5 6 7 8 7 chunks +16 lines, -11 lines 0 comments Download
M media/blink/webmediaplayer_impl.cc View 1 2 3 4 5 6 4 chunks +9 lines, -18 lines 0 comments Download
M media/media.gyp View 1 2 3 1 chunk +0 lines, -38 lines 0 comments Download
M media/mojo/services/mojo_renderer_factory.h View 1 2 3 4 5 6 7 1 chunk +2 lines, -1 line 0 comments Download
M media/mojo/services/mojo_renderer_factory.cc View 1 2 3 4 5 6 7 1 chunk +2 lines, -1 line 0 comments Download
M media/mojo/services/mojo_renderer_impl.h View 1 chunk +0 lines, -1 line 0 comments Download
M media/mojo/services/mojo_renderer_impl.cc View 1 chunk +1 line, -3 lines 0 comments Download
M media/mojo/services/mojo_renderer_service.h View 1 2 3 4 5 6 7 2 chunks +2 lines, -0 lines 0 comments Download
M media/mojo/services/mojo_renderer_service.cc View 1 2 3 4 5 6 7 5 chunks +3 lines, -5 lines 0 comments Download
M media/mojo/services/renderer_config.h View 1 2 3 4 5 6 7 3 chunks +4 lines, -2 lines 0 comments Download
M media/mojo/services/renderer_config.cc View 1 2 3 4 5 6 7 1 chunk +4 lines, -0 lines 0 comments Download
M media/mojo/services/renderer_config_default.cc View 1 2 3 4 5 6 7 2 chunks +18 lines, -0 lines 0 comments Download
M media/renderers/default_renderer_factory.h View 2 chunks +3 lines, -1 line 0 comments Download
M media/renderers/default_renderer_factory.cc View 2 chunks +5 lines, -3 lines 0 comments Download
M media/renderers/renderer_impl.h View 1 2 2 chunks +0 lines, -2 lines 0 comments Download
M media/renderers/renderer_impl.cc View 1 2 3 4 chunks +0 lines, -4 lines 0 comments Download
M media/renderers/renderer_impl_unittest.cc View 1 2 3 4 chunks +4 lines, -7 lines 0 comments Download
M media/renderers/video_renderer_impl.h View 1 2 3 4 5 6 7 6 chunks +10 lines, -1 line 0 comments Download
M media/renderers/video_renderer_impl.cc View 1 2 3 5 chunks +17 lines, -3 lines 0 comments Download
M media/renderers/video_renderer_impl_unittest.cc View 1 2 15 chunks +27 lines, -18 lines 0 comments Download
M media/test/pipeline_integration_test.cc View 1 2 3 4 5 6 7 3 chunks +1 line, -9 lines 0 comments Download
M media/test/pipeline_integration_test_base.h View 1 2 2 chunks +15 lines, -0 lines 0 comments Download
M media/test/pipeline_integration_test_base.cc View 1 2 4 chunks +9 lines, -3 lines 0 comments Download
D media/tools/player_x11/data_source_logger.h View 1 chunk +0 lines, -41 lines 0 comments Download
D media/tools/player_x11/data_source_logger.cc View 1 chunk +0 lines, -59 lines 0 comments Download
D media/tools/player_x11/gl_video_renderer.h View 1 chunk +0 lines, -43 lines 0 comments Download
D media/tools/player_x11/gl_video_renderer.cc View 1 chunk +0 lines, -251 lines 0 comments Download
D media/tools/player_x11/player_x11.cc View 1 2 1 chunk +0 lines, -311 lines 0 comments Download
D media/tools/player_x11/x11_video_renderer.h View 1 chunk +0 lines, -47 lines 0 comments Download
D media/tools/player_x11/x11_video_renderer.cc View 1 chunk +0 lines, -215 lines 0 comments Download

Messages

Total messages: 77 (22 generated)
DaleCurtis
Hi guys, please review the base work for the new video rendering pathway.
5 years, 8 months ago (2015-04-02 22:31:36 UTC) #4
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1053113002/40001
5 years, 8 months ago (2015-04-03 00:55:04 UTC) #6
DaleCurtis
(just a CQ dry run)
5 years, 8 months ago (2015-04-03 00:58:37 UTC) #7
xhwang
Thanks! A lot of questions trying to understand the design better :) https://codereview.chromium.org/1053113002/diff/60001/cc/layers/video_frame_provider.h File cc/layers/video_frame_provider.h ...
5 years, 8 months ago (2015-04-03 07:00:14 UTC) #8
DaleCurtis
https://codereview.chromium.org/1053113002/diff/60001/cc/layers/video_frame_provider.h File cc/layers/video_frame_provider.h (right): https://codereview.chromium.org/1053113002/diff/60001/cc/layers/video_frame_provider.h#newcode59 cc/layers/video_frame_provider.h:59: // presentation interval [|deadline_min|, |deadline_max|]. On 2015/04/03 07:00:13, xhwang ...
5 years, 8 months ago (2015-04-03 17:14:53 UTC) #9
xhwang
Here's are my thoughts. Let me know if you want to chat offline ;) https://codereview.chromium.org/1053113002/diff/60001/cc/layers/video_frame_provider.h ...
5 years, 8 months ago (2015-04-03 19:18:27 UTC) #10
DaleCurtis
https://codereview.chromium.org/1053113002/diff/60001/cc/layers/video_frame_provider.h File cc/layers/video_frame_provider.h (right): https://codereview.chromium.org/1053113002/diff/60001/cc/layers/video_frame_provider.h#newcode70 cc/layers/video_frame_provider.h:70: virtual void PutCurrentFrame() = 0; On 2015/04/03 19:18:27, xhwang ...
5 years, 8 months ago (2015-04-03 19:59:16 UTC) #11
xhwang
I am trying to give a clear definition of "number of dropped frames". How about ...
5 years, 8 months ago (2015-04-03 21:27:55 UTC) #12
DaleCurtis
On 2015/04/03 21:27:55, xhwang wrote: > I am trying to give a clear definition of ...
5 years, 8 months ago (2015-04-03 21:52:39 UTC) #13
sunnyps
On 2015/04/03 21:52:39, DaleCurtis wrote: > On 2015/04/03 21:27:55, xhwang wrote: > > I am ...
5 years, 8 months ago (2015-04-03 23:46:29 UTC) #14
DaleCurtis
Comments addressed and rebased on top of https://codereview.chromium.org/1068593003/ which lets us avoid multiple Start/Stop methods ...
5 years, 8 months ago (2015-04-07 00:40:52 UTC) #15
DaleCurtis
https://codereview.chromium.org/1053113002/diff/80001/media/base/video_renderer_sink.h File media/base/video_renderer_sink.h (right): https://codereview.chromium.org/1053113002/diff/80001/media/base/video_renderer_sink.h#newcode30 media/base/video_renderer_sink.h:30: virtual scoped_refptr<VideoFrame> Render(base::TimeTicks deadline_min, Since VideoFrameCompositor will need to ...
5 years, 8 months ago (2015-04-07 19:58:45 UTC) #16
xhwang
Do you want to rebase this CL on top of the other one before I ...
5 years, 8 months ago (2015-04-08 04:45:13 UTC) #17
DaleCurtis
I'm waiting for the discussion on https://codereview.chromium.org/1039533002/ to resolve so we know if we need ...
5 years, 8 months ago (2015-04-08 17:17:28 UTC) #18
DaleCurtis
PTAL. I've removed all visibility related code. Now we'll use xhwang@'s suggestion and have a ...
5 years, 8 months ago (2015-04-13 18:29:27 UTC) #20
sunnyps
On 2015/04/13 18:29:27, DaleCurtis wrote: > PTAL. I've removed all visibility related code. Now we'll ...
5 years, 8 months ago (2015-04-13 18:43:49 UTC) #21
DaleCurtis
On 2015/04/13 18:43:49, sunnyps wrote: > On 2015/04/13 18:29:27, DaleCurtis wrote: > > PTAL. I've ...
5 years, 8 months ago (2015-04-13 18:45:47 UTC) #22
sunnyps
On 2015/04/13 18:45:47, DaleCurtis wrote: > On 2015/04/13 18:43:49, sunnyps wrote: > > On 2015/04/13 ...
5 years, 8 months ago (2015-04-13 18:56:54 UTC) #23
DaleCurtis
Thanks. I added Brian previously; should I add enne@ or danakj@ then too?
5 years, 8 months ago (2015-04-13 19:57:51 UTC) #24
xhwang
The interface looks good in general. I just have a lot of nits... https://codereview.chromium.org/1053113002/diff/100001/cc/layers/video_frame_provider.h File ...
5 years, 8 months ago (2015-04-13 20:50:30 UTC) #25
brianderson
cc lgtm. I'm a bit hazy on the WebGL + not visible details. In particular, ...
5 years, 8 months ago (2015-04-13 21:16:29 UTC) #26
brianderson
+enne, since they were interested in taking a look.
5 years, 8 months ago (2015-04-13 21:17:51 UTC) #28
DaleCurtis
On 2015/04/13 21:16:29, brianderson wrote: > cc lgtm. > > I'm a bit hazy on ...
5 years, 8 months ago (2015-04-13 22:10:47 UTC) #29
DaleCurtis
PTAL. Comments addressed. +dpranke for BUILD.gn and build/gn_migration.gypi removals. https://codereview.chromium.org/1053113002/diff/100001/cc/layers/video_frame_provider.h File cc/layers/video_frame_provider.h (right): https://codereview.chromium.org/1053113002/diff/100001/cc/layers/video_frame_provider.h#newcode30 cc/layers/video_frame_provider.h:30: ...
5 years, 8 months ago (2015-04-13 23:15:06 UTC) #31
Dirk Pranke
BUILD.gn, build/gn_migration.gypi changes lgtm.
5 years, 8 months ago (2015-04-13 23:19:07 UTC) #32
xhwang
Thanks! LGTM https://codereview.chromium.org/1053113002/diff/100001/cc/layers/video_frame_provider.h File cc/layers/video_frame_provider.h (right): https://codereview.chromium.org/1053113002/diff/100001/cc/layers/video_frame_provider.h#newcode59 cc/layers/video_frame_provider.h:59: // the presentation interval [|deadline_min|, |deadline_max|]. On ...
5 years, 8 months ago (2015-04-14 00:29:52 UTC) #33
DaleCurtis
enne: Did you want to review as well?
5 years, 8 months ago (2015-04-14 16:25:45 UTC) #34
danakj
https://codereview.chromium.org/1053113002/diff/120001/cc/layers/video_frame_provider.h File cc/layers/video_frame_provider.h (right): https://codereview.chromium.org/1053113002/diff/120001/cc/layers/video_frame_provider.h#newcode35 cc/layers/video_frame_provider.h:35: // Notifies the client that it should start or ...
5 years, 8 months ago (2015-04-14 16:46:18 UTC) #36
DaleCurtis
https://codereview.chromium.org/1053113002/diff/120001/cc/layers/video_frame_provider.h File cc/layers/video_frame_provider.h (right): https://codereview.chromium.org/1053113002/diff/120001/cc/layers/video_frame_provider.h#newcode35 cc/layers/video_frame_provider.h:35: // Notifies the client that it should start or ...
5 years, 8 months ago (2015-04-14 17:01:06 UTC) #37
DaleCurtis
(comments updated)
5 years, 8 months ago (2015-04-14 17:12:52 UTC) #38
DaleCurtis
Spoke with enne via chat, she isn't planning to review, but it "... lgtm in ...
5 years, 8 months ago (2015-04-14 22:30:41 UTC) #39
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1053113002/140001
5 years, 8 months ago (2015-04-14 22:31:12 UTC) #42
commit-bot: I haz the power
Try jobs failed on following builders: ios_dbg_simulator_ninja on tryserver.chromium.mac (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.mac/builders/ios_dbg_simulator_ninja/builds/14837) mac_chromium_compile_dbg_ng on tryserver.chromium.mac (JOB_FAILED, ...
5 years, 8 months ago (2015-04-14 22:36:58 UTC) #44
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1053113002/160001
5 years, 8 months ago (2015-04-14 22:55:49 UTC) #47
commit-bot: I haz the power
Try jobs failed on following builders: android_chromium_gn_compile_dbg on tryserver.chromium.linux (JOB_FAILED, http://build.chromium.org/p/tryserver.chromium.linux/builders/android_chromium_gn_compile_dbg/builds/61483)
5 years, 8 months ago (2015-04-14 23:15:55 UTC) #49
DaleCurtis
xhwang: PTAL, I forgot to update the mojo interfaces.
5 years, 8 months ago (2015-04-14 23:53:41 UTC) #50
xhwang
still lgtm % one nit question https://codereview.chromium.org/1053113002/diff/180001/media/mojo/services/mojo_renderer_service.h File media/mojo/services/mojo_renderer_service.h (right): https://codereview.chromium.org/1053113002/diff/180001/media/mojo/services/mojo_renderer_service.h#newcode93 media/mojo/services/mojo_renderer_service.h:93: scoped_ptr<VideoRendererSink> video_renderer_sink_; ARS ...
5 years, 8 months ago (2015-04-15 00:12:19 UTC) #51
DaleCurtis
https://codereview.chromium.org/1053113002/diff/180001/media/mojo/services/mojo_renderer_service.h File media/mojo/services/mojo_renderer_service.h (right): https://codereview.chromium.org/1053113002/diff/180001/media/mojo/services/mojo_renderer_service.h#newcode93 media/mojo/services/mojo_renderer_service.h:93: scoped_ptr<VideoRendererSink> video_renderer_sink_; On 2015/04/15 00:12:19, xhwang wrote: > ARS ...
5 years, 8 months ago (2015-04-15 00:13:56 UTC) #52
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1053113002/180001
5 years, 8 months ago (2015-04-15 00:14:28 UTC) #55
xhwang
https://codereview.chromium.org/1053113002/diff/180001/media/mojo/services/mojo_renderer_service.h File media/mojo/services/mojo_renderer_service.h (right): https://codereview.chromium.org/1053113002/diff/180001/media/mojo/services/mojo_renderer_service.h#newcode93 media/mojo/services/mojo_renderer_service.h:93: scoped_ptr<VideoRendererSink> video_renderer_sink_; On 2015/04/15 00:13:56, DaleCurtis wrote: > On ...
5 years, 8 months ago (2015-04-15 00:17:06 UTC) #56
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/78634)
5 years, 8 months ago (2015-04-15 00:57:32 UTC) #58
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1053113002/200001
5 years, 8 months ago (2015-04-15 01:43:54 UTC) #61
commit-bot: I haz the power
Committed patchset #9 (id:200001)
5 years, 8 months ago (2015-04-15 04:03:46 UTC) #62
commit-bot: I haz the power
Patchset 9 (id:??) landed as https://crrev.com/e7f41df2541aea7c99f7965874f9c5ce901899e5 Cr-Commit-Position: refs/heads/master@{#325183}
5 years, 8 months ago (2015-04-15 04:04:52 UTC) #63
gunsch
+CC some of Cast team Hi Dale, I just saw this because the Chromecast build ...
5 years, 8 months ago (2015-04-15 05:53:21 UTC) #65
gunsch
A revert of this CL (patchset #9 id:200001) has been created in https://codereview.chromium.org/1052493005/ by gunsch@chromium.org. ...
5 years, 8 months ago (2015-04-15 06:01:35 UTC) #66
gunsch
On 2015/04/15 06:01:35, gunsch wrote: > A revert of this CL (patchset #9 id:200001) has ...
5 years, 8 months ago (2015-04-15 06:16:26 UTC) #67
DaleCurtis
On 2015/04/15 05:53:21, gunsch wrote: > +CC some of Cast team > > Hi Dale, ...
5 years, 8 months ago (2015-04-15 16:28:24 UTC) #68
gunsch
On 2015/04/15 16:28:24, DaleCurtis wrote: > On 2015/04/15 05:53:21, gunsch wrote: > > +CC some ...
5 years, 8 months ago (2015-04-15 16:35:40 UTC) #69
gunsch
On 2015/04/15 16:35:40, gunsch wrote: > On 2015/04/15 16:28:24, DaleCurtis wrote: > > On 2015/04/15 ...
5 years, 8 months ago (2015-04-15 16:38:49 UTC) #70
DaleCurtis
gunsch: PTAL. I've merged in your patch and sent it off to your trybots.
5 years, 8 months ago (2015-04-15 17:41:44 UTC) #71
gunsch
On 2015/04/15 17:41:44, DaleCurtis wrote: > gunsch: PTAL. I've merged in your patch and sent ...
5 years, 8 months ago (2015-04-15 19:32:50 UTC) #72
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/patch-status/1053113002/180002
5 years, 8 months ago (2015-04-15 20:04:15 UTC) #75
commit-bot: I haz the power
Committed patchset #10 (id:180002)
5 years, 8 months ago (2015-04-15 21:15:06 UTC) #76
commit-bot: I haz the power
5 years, 8 months ago (2015-04-15 21:16:13 UTC) #77
Message was sent while issue was closed.
Patchset 10 (id:??) landed as
https://crrev.com/45a3c93f745eabf6c1b1cbdac87ed4350a919e76
Cr-Commit-Position: refs/heads/master@{#325306}

Powered by Google App Engine
This is Rietveld 408576698