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

Issue 2472273002: Move passing of WebRTC rendering frames from main thread to compositor thread (Closed)

Created:
4 years, 1 month ago by emircan
Modified:
4 years, 1 month ago
CC:
avayvod+watch_chromium.org, chromium-reviews, darin-cc_chromium.org, feature-media-reviews_chromium.org, imcheng+watch_chromium.org, isheriff+watch_chromium.org, jam, jasonroberts+watch_google.com, mcasas+watch+vc_chromium.org, miu+watch_chromium.org, mlamouri+watch-content_chromium.org, posciak+watch_chromium.org, xjz+watch_chromium.org
Target Ref:
refs/pending/heads/master
Project:
chromium
Visibility:
Public.

Description

Move passing of WebRTC rendering frames from main thread to compositor thread When main render thread is busy with JS functions, WebRTC video playback stalls and starts accumulating frames resulting in increased memory. It sometimes recovers by playing the accumulated frames quickly, and sometimes causes out of memory error. This CL modifies the passing to video frames in rendering path such that main thread is not used. We jump from IO thread directly to compositor thread and avoid trampolining in between. Since lifetime and methods of these classes, such as WebMediaPlayerMS, is still tied to main thread, I created inner classes which are pinned to specific threads and carry forwarding tasks: - FrameReceiver receives frames on IO and forwards to compositor. - FrameDeliverer forwards frames on compositor. BUG=652923 TEST=Modified unit tests. Tested running JS alert() in console during an AppRTC loopback. I am still confused to how/where to add a proper browsertest. Running alert() on a page requires manual user interaction. Committed: https://crrev.com/99eb6bc119173a68cc695f5179c72cadf0b515da Cr-Commit-Position: refs/heads/master@{#433356}

Patch Set 1 : #

Patch Set 2 : Make |render_frame_suspended_| android specific. #

Total comments: 21

Patch Set 3 : perkj@ and qiangchen@ comments. #

Total comments: 18

Patch Set 4 : perkj@ comments. #

Total comments: 42

Patch Set 5 : dalecurtis@ comments. #

Patch Set 6 : wez@ and dalecurtis@ comments. #

Total comments: 20

Patch Set 7 : wez@ comments. #

Total comments: 4

Patch Set 8 : dalecurtis@ comments. #

Total comments: 12

Patch Set 9 : perkj@ comments. #

Patch Set 10 : wez@ nits. #

Total comments: 2
Unified diffs Side-by-side diffs Delta from patch set Stats (+499 lines, -206 lines) Patch
M content/public/renderer/media_stream_renderer_factory.h View 1 2 3 1 chunk +5 lines, -0 lines 0 comments Download
M content/public/renderer/media_stream_video_renderer.h View 1 2 3 4 1 chunk +1 line, -2 lines 0 comments Download
M content/renderer/media/media_stream_renderer_factory_impl.h View 1 chunk +1 line, -0 lines 0 comments Download
M content/renderer/media/media_stream_renderer_factory_impl.cc View 2 chunks +4 lines, -3 lines 0 comments Download
M content/renderer/media/media_stream_video_renderer_sink.h View 1 2 3 4 5 6 7 8 9 5 chunks +20 lines, -17 lines 0 comments Download
M content/renderer/media/media_stream_video_renderer_sink.cc View 1 2 3 4 5 6 7 8 9 1 chunk +247 lines, -93 lines 0 comments Download
M content/renderer/media/media_stream_video_renderer_sink_unittest.cc View 1 2 3 4 5 6 6 chunks +62 lines, -33 lines 0 comments Download
M content/renderer/media/webmediaplayer_ms.h View 1 2 3 4 3 chunks +9 lines, -6 lines 0 comments Download
M content/renderer/media/webmediaplayer_ms.cc View 1 2 3 4 5 6 7 8 10 chunks +143 lines, -49 lines 2 comments Download
M content/renderer/media/webmediaplayer_ms_compositor.h View 1 2 3 4 5 6 1 chunk +1 line, -1 line 0 comments Download
M content/renderer/media/webmediaplayer_ms_compositor.cc View 1 2 3 4 5 6 1 chunk +2 lines, -2 lines 0 comments Download
M content/renderer/media/webmediaplayer_ms_unittest.cc View 1 2 3 4 5 6 7 2 chunks +2 lines, -0 lines 0 comments Download
M content/shell/renderer/layout_test/test_media_stream_renderer_factory.h View 1 chunk +1 line, -0 lines 0 comments Download
M content/shell/renderer/layout_test/test_media_stream_renderer_factory.cc View 1 chunk +1 line, -0 lines 0 comments Download

Messages

Total messages: 115 (83 generated)
emircan
PTAL.
4 years, 1 month ago (2016-11-07 23:55:19 UTC) #27
emircan
mcasas@: PTAL at content/renderer/media/* changes. qiangchenC@: PTAL at content/renderer/media/webmediaplayer_ms.* changes. dalecurtis:PTAL at content/renderer/media/webmediaplayer_ms.* changes with ...
4 years, 1 month ago (2016-11-08 18:06:25 UTC) #31
perkj_chrome
Took a first look. There is much here that I dont know though. https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/media_stream_video_renderer_sink.cc File ...
4 years, 1 month ago (2016-11-09 15:27:13 UTC) #39
qiangchen
Not finished yet. Just post my findings so far. https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/webmediaplayer_ms.cc File content/renderer/media/webmediaplayer_ms.cc (right): https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/webmediaplayer_ms.cc#newcode91 content/renderer/media/webmediaplayer_ms.cc:91: ...
4 years, 1 month ago (2016-11-09 19:44:39 UTC) #40
qiangchen
some more comments. https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode174 content/renderer/media/media_stream_video_renderer_sink.cc:174: class MediaStreamVideoRendererSink::FrameReceiverOnIO { Is it possible ...
4 years, 1 month ago (2016-11-09 23:23:48 UTC) #41
emircan
https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode161 content/renderer/media/media_stream_video_renderer_sink.cc:161: // Used for DCHECKs to ensure method calls executed ...
4 years, 1 month ago (2016-11-11 22:27:20 UTC) #47
perkj_chrome
Mostly nits. But I wondering about all the thread hops. Can you remove one thread ...
4 years, 1 month ago (2016-11-14 15:19:55 UTC) #48
emircan
https://codereview.chromium.org/2472273002/diff/160001/content/public/renderer/media_stream_renderer_factory.h File content/public/renderer/media_stream_renderer_factory.h (right): https://codereview.chromium.org/2472273002/diff/160001/content/public/renderer/media_stream_renderer_factory.h#newcode39 content/public/renderer/media_stream_renderer_factory.h:39: virtual scoped_refptr<MediaStreamVideoRenderer> GetVideoRenderer( On 2016/11/14 15:19:55, perkj_chrome wrote: > ...
4 years, 1 month ago (2016-11-14 22:43:32 UTC) #50
qiangchen
lgtm https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/120001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode174 content/renderer/media/media_stream_video_renderer_sink.cc:174: class MediaStreamVideoRendererSink::FrameReceiverOnIO { On 2016/11/11 22:27:19, emircan wrote: ...
4 years, 1 month ago (2016-11-15 00:04:54 UTC) #52
DaleCurtis
The explosion of WeakPtr usage is very worrying and currently incorrect. These classes are well ...
4 years, 1 month ago (2016-11-15 00:30:16 UTC) #54
emircan
https://codereview.chromium.org/2472273002/diff/180001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/180001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode31 content/renderer/media/media_stream_video_renderer_sink.cc:31: class MediaStreamVideoRendererSink::FrameDelivererOnCompositor { On 2016/11/15 00:30:16, DaleCurtis wrote: > ...
4 years, 1 month ago (2016-11-15 19:54:02 UTC) #59
DaleCurtis
+wez for WeakPtr semantics in case I've recalled something incorrectly. https://codereview.chromium.org/2472273002/diff/180001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/180001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode92 ...
4 years, 1 month ago (2016-11-15 20:29:03 UTC) #63
Wez
On 2016/11/15 20:29:03, DaleCurtis wrote: > +wez for WeakPtr semantics in case I've recalled something ...
4 years, 1 month ago (2016-11-15 22:01:52 UTC) #64
emircan
> > If you create the weak ptr on a different thread than it's used ...
4 years, 1 month ago (2016-11-16 00:52:24 UTC) #66
Wez
Yes, the preferred model is to call GetWeakPtr() once during setup of your class, and ...
4 years, 1 month ago (2016-11-16 01:47:10 UTC) #70
emircan
https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode31 content/renderer/media/media_stream_video_renderer_sink.cc:31: class MediaStreamVideoRendererSink::FrameDeliverer On 2016/11/16 01:47:10, Wez wrote: > This ...
4 years, 1 month ago (2016-11-17 01:23:26 UTC) #72
DaleCurtis
https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode32 content/renderer/media/media_stream_video_renderer_sink.cc:32: : public base::SupportsWeakPtr<FrameDeliverer> { On 2016/11/17 at 01:23:25, emircan ...
4 years, 1 month ago (2016-11-17 02:13:17 UTC) #74
DaleCurtis
https://codereview.chromium.org/2472273002/diff/240001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/240001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode238 content/renderer/media/media_stream_video_renderer_sink.cc:238: compositor_task_runner_, frame_deliverer_->GetWeakPtr())); As mentioned on the other instance of ...
4 years, 1 month ago (2016-11-17 02:18:51 UTC) #75
Wez
https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode32 content/renderer/media/media_stream_video_renderer_sink.cc:32: : public base::SupportsWeakPtr<FrameDeliverer> { On 2016/11/17 02:13:17, DaleCurtis wrote: ...
4 years, 1 month ago (2016-11-17 02:30:27 UTC) #76
emircan
https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode32 content/renderer/media/media_stream_video_renderer_sink.cc:32: : public base::SupportsWeakPtr<FrameDeliverer> { On 2016/11/17 02:30:27, Wez wrote: ...
4 years, 1 month ago (2016-11-17 19:43:47 UTC) #81
perkj_chrome
lgtm https://codereview.chromium.org/2472273002/diff/280001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/280001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode30 content/renderer/media/media_stream_video_renderer_sink.cc:30: // be destructed on compositor thread. /s on ...
4 years, 1 month ago (2016-11-17 21:54:01 UTC) #87
emircan
Thanks. https://codereview.chromium.org/2472273002/diff/280001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/280001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode30 content/renderer/media/media_stream_video_renderer_sink.cc:30: // be destructed on compositor thread. On 2016/11/17 ...
4 years, 1 month ago (2016-11-17 23:03:21 UTC) #91
DaleCurtis
lgtm, description needs a bit of update though
4 years, 1 month ago (2016-11-18 00:06:04 UTC) #93
emircan
> lgtm, description needs a bit of update though Thanks. I just updated the class ...
4 years, 1 month ago (2016-11-18 00:32:45 UTC) #96
emircan
avi@, can PTAL at content/public/renderer/media_stream_renderer_factory.* and content/shell/renderer/layout_test/test_media_stream_renderer_factory.*?
4 years, 1 month ago (2016-11-18 00:33:30 UTC) #98
Avi (use Gerrit)
On 2016/11/18 00:33:30, emircan wrote: > avi@, can PTAL at content/public/renderer/media_stream_renderer_factory.* and > content/shell/renderer/layout_test/test_media_stream_renderer_factory.*? content/public ...
4 years, 1 month ago (2016-11-18 00:43:26 UTC) #99
Wez
Some final suggestions but otherwise WeakPtr usage LGTM. https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode233 content/renderer/media/media_stream_video_renderer_sink.cc:233: compositor_task_runner_, ...
4 years, 1 month ago (2016-11-18 02:26:56 UTC) #102
emircan
https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc File content/renderer/media/media_stream_video_renderer_sink.cc (right): https://codereview.chromium.org/2472273002/diff/220001/content/renderer/media/media_stream_video_renderer_sink.cc#newcode254 content/renderer/media/media_stream_video_renderer_sink.cc:254: ChildProcess::current()->io_task_runner()->DeleteSoon( On 2016/11/18 02:26:56, Wez wrote: > On 2016/11/17 ...
4 years, 1 month ago (2016-11-18 21:14:18 UTC) #104
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2472273002/320001
4 years, 1 month ago (2016-11-18 22:27:39 UTC) #109
commit-bot: I haz the power
Committed patchset #10 (id:320001)
4 years, 1 month ago (2016-11-19 00:49:49 UTC) #111
commit-bot: I haz the power
Patchset 10 (id:??) landed as https://crrev.com/99eb6bc119173a68cc695f5179c72cadf0b515da Cr-Commit-Position: refs/heads/master@{#433356}
4 years, 1 month ago (2016-11-19 00:56:23 UTC) #113
Lei Zhang
4 years, 1 month ago (2016-11-19 06:21:08 UTC) #115
Message was sent while issue was closed.
MSAN bots are red. Bug has been filed. Should be an easy fix.

https://codereview.chromium.org/2472273002/diff/320001/content/renderer/media...
File content/renderer/media/webmediaplayer_ms.cc (left):

https://codereview.chromium.org/2472273002/diff/320001/content/renderer/media...
content/renderer/media/webmediaplayer_ms.cc:510:
ignore_result(frame->metadata()->GetRotation(
The previous code was calling GetRotation() on |video_rotation_| and that was
initialized in the ctor.

https://codereview.chromium.org/2472273002/diff/320001/content/renderer/media...
File content/renderer/media/webmediaplayer_ms.cc (right):

https://codereview.chromium.org/2472273002/diff/320001/content/renderer/media...
content/renderer/media/webmediaplayer_ms.cc:87: media::VideoRotation
video_rotation;
This is not initialized and is triggering bug https://crbug.com/667026.

Powered by Google App Engine
This is Rietveld 408576698