Index: content/renderer/media/media_stream_video_renderer_sink.cc |
diff --git a/content/renderer/media/media_stream_video_renderer_sink.cc b/content/renderer/media/media_stream_video_renderer_sink.cc |
index c7341aa8442590502307ce2bf7082c7c9a4f8a07..12f43996ee137c98cb5eb61fb11099c2571cab9e 100644 |
--- a/content/renderer/media/media_stream_video_renderer_sink.cc |
+++ b/content/renderer/media/media_stream_video_renderer_sink.cc |
@@ -24,10 +24,10 @@ const int kMinFrameSize = 2; |
namespace content { |
// FrameDeliverer is responsible for delivering frames received on |
-// OnVideoFrame() to |repaint_cb_| on compositor thread. |
+// OnVideoFrame() to |repaint_cb_| on |media_task_runner_|. |
// |
// It is created on the main thread, but methods should be called and class |
-// should be destructed on the compositor thread. |
+// should be destructed on |media_task_runner_|. |
class MediaStreamVideoRendererSink::FrameDeliverer { |
public: |
FrameDeliverer(const RepaintCB& repaint_cb, |
@@ -39,7 +39,6 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
frame_size_(kMinFrameSize, kMinFrameSize), |
media_task_runner_(media_task_runner), |
weak_factory_(this) { |
- compositor_thread_checker_.DetachFromThread(); |
weak_this_ = weak_factory_.GetWeakPtr(); |
if (gpu_factories && |
gpu_factories->ShouldUseGpuMemoryBuffersForVideoFrames() && |
@@ -51,18 +50,13 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
} |
~FrameDeliverer() { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
DCHECK(state_ == STARTED || state_ == PAUSED) << state_; |
- |
- if (gpu_memory_buffer_pool_) { |
- media_task_runner_->DeleteSoon(FROM_HERE, |
- gpu_memory_buffer_pool_.release()); |
- } |
} |
void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame, |
base::TimeTicks /*current_time*/) { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
DCHECK(frame); |
TRACE_EVENT_INSTANT1("webrtc", |
"MediaStreamVideoRendererSink::" |
@@ -77,21 +71,13 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
FrameReady(frame); |
return; |
} |
- |
- // |gpu_memory_buffer_pool_| deletion is going to be posted to |
- // |media_task_runner_|. base::Unretained() usage is fine since |
- // |gpu_memory_buffer_pool_| outlives the task. |
- media_task_runner_->PostTask( |
- FROM_HERE, |
- base::Bind( |
- &media::GpuMemoryBufferVideoFramePool::MaybeCreateHardwareFrame, |
- base::Unretained(gpu_memory_buffer_pool_.get()), frame, |
- media::BindToCurrentLoop( |
- base::Bind(&FrameDeliverer::FrameReady, weak_this_)))); |
+ gpu_memory_buffer_pool_->MaybeCreateHardwareFrame( |
+ frame, media::BindToCurrentLoop( |
+ base::Bind(&FrameDeliverer::FrameReady, weak_this_))); |
} |
void FrameReady(const scoped_refptr<media::VideoFrame>& frame) { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
DCHECK(frame); |
TRACE_EVENT_INSTANT1( |
"webrtc", "MediaStreamVideoRendererSink::FrameDeliverer::FrameReady", |
@@ -103,7 +89,7 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
} |
void RenderEndOfStream() { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
// This is necessary to make sure audio can play if the video tag src is a |
// MediaStream video track that has been rejected or ended. It also ensure |
// that the renderer doesn't hold a reference to a real video frame if no |
@@ -121,19 +107,19 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
} |
void Start() { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
DCHECK_EQ(state_, STOPPED); |
state_ = STARTED; |
} |
void Resume() { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
if (state_ == PAUSED) |
state_ = STARTED; |
} |
void Pause() { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
if (state_ == STARTED) |
state_ = PAUSED; |
} |
@@ -147,7 +133,7 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
void SetGpuMemoryBufferVideoForTesting( |
media::GpuMemoryBufferVideoFramePool* gpu_memory_buffer_pool) { |
- DCHECK(compositor_thread_checker_.CalledOnValidThread()); |
+ DCHECK(media_task_runner_->BelongsToCurrentThread()); |
gpu_memory_buffer_pool_.reset(gpu_memory_buffer_pool); |
} |
@@ -159,9 +145,6 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
std::unique_ptr<media::GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool_; |
const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; |
- // Used for DCHECKs to ensure method calls are executed on the correct thread. |
- base::ThreadChecker compositor_thread_checker_; |
- |
base::WeakPtr<FrameDeliverer> weak_this_; |
base::WeakPtrFactory<FrameDeliverer> weak_factory_; |
@@ -169,16 +152,16 @@ class MediaStreamVideoRendererSink::FrameDeliverer { |
}; |
// FrameReceiver is responsible for trampolining frames from IO thread to |
-// the compositor thread by posting a task on |deliver_frame_cb_|. |
+// media thread by posting a task on |deliver_frame_cb_|. |
// |
// It is created on main thread, but methods should be called and class should |
// be destructed on the IO thread. |
class MediaStreamVideoRendererSink::FrameReceiver { |
public: |
FrameReceiver( |
- const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, |
+ const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, |
const VideoCaptureDeliverFrameCB& deliver_frame_cb) |
- : compositor_task_runner_(compositor_task_runner), |
+ : media_task_runner_(media_task_runner), |
deliver_frame_cb_(deliver_frame_cb) { |
io_thread_checker_.DetachFromThread(); |
} |
@@ -188,12 +171,12 @@ class MediaStreamVideoRendererSink::FrameReceiver { |
void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame, |
base::TimeTicks current_time) { |
DCHECK(io_thread_checker_.CalledOnValidThread()); |
- compositor_task_runner_->PostTask( |
+ media_task_runner_->PostTask( |
FROM_HERE, base::Bind(deliver_frame_cb_, frame, current_time)); |
} |
private: |
- const scoped_refptr<base::SingleThreadTaskRunner> compositor_task_runner_; |
+ const scoped_refptr<base::SingleThreadTaskRunner> media_task_runner_; |
const VideoCaptureDeliverFrameCB deliver_frame_cb_; |
// Used for DCHECKs to ensure method calls executed in the correct thread. |
@@ -206,14 +189,12 @@ MediaStreamVideoRendererSink::MediaStreamVideoRendererSink( |
const blink::WebMediaStreamTrack& video_track, |
const base::Closure& error_cb, |
const RepaintCB& repaint_cb, |
- const scoped_refptr<base::SingleThreadTaskRunner>& compositor_task_runner, |
const scoped_refptr<base::SingleThreadTaskRunner>& media_task_runner, |
const scoped_refptr<base::TaskRunner>& worker_task_runner, |
media::GpuVideoAcceleratorFactories* gpu_factories) |
: error_cb_(error_cb), |
repaint_cb_(repaint_cb), |
video_track_(video_track), |
- compositor_task_runner_(compositor_task_runner), |
media_task_runner_(media_task_runner), |
worker_task_runner_(worker_task_runner), |
gpu_factories_(gpu_factories) {} |
@@ -225,12 +206,12 @@ void MediaStreamVideoRendererSink::Start() { |
frame_deliverer_.reset(new MediaStreamVideoRendererSink::FrameDeliverer( |
repaint_cb_, media_task_runner_, worker_task_runner_, gpu_factories_)); |
- compositor_task_runner_->PostTask( |
+ media_task_runner_->PostTask( |
FROM_HERE, base::Bind(&FrameDeliverer::Start, |
base::Unretained(frame_deliverer_.get()))); |
frame_receiver_.reset(new MediaStreamVideoRendererSink::FrameReceiver( |
- compositor_task_runner_, frame_deliverer_->GetDeliverFrameCallback())); |
+ media_task_runner_, frame_deliverer_->GetDeliverFrameCallback())); |
MediaStreamVideoSink::ConnectToTrack( |
video_track_, |
// This callback is run on IO thread. It is safe to use base::Unretained |
@@ -244,7 +225,7 @@ void MediaStreamVideoRendererSink::Start() { |
if (video_track_.source().getReadyState() == |
blink::WebMediaStreamSource::ReadyStateEnded || |
!video_track_.isEnabled()) { |
- compositor_task_runner_->PostTask( |
+ media_task_runner_->PostTask( |
FROM_HERE, base::Bind(&FrameDeliverer::RenderEndOfStream, |
base::Unretained(frame_deliverer_.get()))); |
} |
@@ -259,7 +240,7 @@ void MediaStreamVideoRendererSink::Stop() { |
FROM_HERE, frame_receiver_.release()); |
} |
if (frame_deliverer_) |
- compositor_task_runner_->DeleteSoon(FROM_HERE, frame_deliverer_.release()); |
+ media_task_runner_->DeleteSoon(FROM_HERE, frame_deliverer_.release()); |
} |
void MediaStreamVideoRendererSink::Resume() { |
@@ -267,7 +248,7 @@ void MediaStreamVideoRendererSink::Resume() { |
if (!frame_deliverer_) |
return; |
- compositor_task_runner_->PostTask( |
+ media_task_runner_->PostTask( |
FROM_HERE, base::Bind(&FrameDeliverer::Resume, |
base::Unretained(frame_deliverer_.get()))); |
} |
@@ -277,7 +258,7 @@ void MediaStreamVideoRendererSink::Pause() { |
if (!frame_deliverer_) |
return; |
- compositor_task_runner_->PostTask( |
+ media_task_runner_->PostTask( |
FROM_HERE, base::Bind(&FrameDeliverer::Pause, |
base::Unretained(frame_deliverer_.get()))); |
} |
@@ -287,7 +268,7 @@ void MediaStreamVideoRendererSink::OnReadyStateChanged( |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
if (state == blink::WebMediaStreamSource::ReadyStateEnded && |
frame_deliverer_) { |
- compositor_task_runner_->PostTask( |
+ media_task_runner_->PostTask( |
FROM_HERE, base::Bind(&FrameDeliverer::RenderEndOfStream, |
base::Unretained(frame_deliverer_.get()))); |
} |
@@ -305,7 +286,7 @@ void MediaStreamVideoRendererSink::SetGpuMemoryBufferVideoForTesting( |
media::GpuMemoryBufferVideoFramePool* gpu_memory_buffer_pool) { |
DCHECK(main_thread_checker_.CalledOnValidThread()); |
CHECK(frame_deliverer_); |
- compositor_task_runner_->PostTask( |
+ media_task_runner_->PostTask( |
FROM_HERE, base::Bind(&FrameDeliverer::SetGpuMemoryBufferVideoForTesting, |
base::Unretained(frame_deliverer_.get()), |
gpu_memory_buffer_pool)); |