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

Unified Diff: content/renderer/media/webmediaplayer_ms_compositor.cc

Issue 2529263004: Move passing of WebRTC rendering frames to IO thread (Closed)
Patch Set: ncarter@ comment. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/media/webmediaplayer_ms_compositor.cc
diff --git a/content/renderer/media/webmediaplayer_ms_compositor.cc b/content/renderer/media/webmediaplayer_ms_compositor.cc
index 4a7dd8ca91b2ee73db1376fffd57362fc716266b..3f9147cd6185e5034ef1c9d8a4a113bd8e1069dd 100644
--- a/content/renderer/media/webmediaplayer_ms_compositor.cc
+++ b/content/renderer/media/webmediaplayer_ms_compositor.cc
@@ -134,9 +134,9 @@ WebMediaPlayerMSCompositor::WebMediaPlayerMSCompositor(
last_render_length_(base::TimeDelta::FromSecondsD(1.0 / 60.0)),
total_frame_count_(0),
dropped_frame_count_(0),
- stopped_(true),
- weak_ptr_factory_(this) {
+ stopped_(true) {
main_message_loop_ = base::MessageLoop::current();
+ io_thread_checker_.DetachFromThread();
blink::WebVector<blink::WebMediaStreamTrack> video_tracks;
if (!web_stream.isNull())
@@ -162,9 +162,8 @@ WebMediaPlayerMSCompositor::WebMediaPlayerMSCompositor(
}
WebMediaPlayerMSCompositor::~WebMediaPlayerMSCompositor() {
- DCHECK(compositor_task_runner_->BelongsToCurrentThread());
- if (video_frame_provider_client_)
- video_frame_provider_client_->StopUsingProvider();
+ DCHECK(!video_frame_provider_client_)
+ << "Must call StopUsingProvider() before dtor!";
}
gfx::Size WebMediaPlayerMSCompositor::GetCurrentSize() {
@@ -204,7 +203,7 @@ void WebMediaPlayerMSCompositor::SetVideoFrameProviderClient(
void WebMediaPlayerMSCompositor::EnqueueFrame(
scoped_refptr<media::VideoFrame> frame) {
- DCHECK(compositor_task_runner_->BelongsToCurrentThread());
+ DCHECK(io_thread_checker_.CalledOnValidThread());
base::AutoLock auto_lock(current_frame_lock_);
++total_frame_count_;
@@ -317,41 +316,15 @@ WebMediaPlayerMSCompositor::GetCurrentFrameWithoutUpdatingStatistics() {
void WebMediaPlayerMSCompositor::StartRendering() {
DCHECK(thread_checker_.CalledOnValidThread());
compositor_task_runner_->PostTask(
- FROM_HERE, base::Bind(&WebMediaPlayerMSCompositor::StartRenderingInternal,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void WebMediaPlayerMSCompositor::StartRenderingInternal() {
- DCHECK(compositor_task_runner_->BelongsToCurrentThread());
- stopped_ = false;
-
- if (video_frame_provider_client_)
- video_frame_provider_client_->StartRendering();
+ FROM_HERE,
+ base::Bind(&WebMediaPlayerMSCompositor::StartRenderingInternal, this));
}
void WebMediaPlayerMSCompositor::StopRendering() {
DCHECK(thread_checker_.CalledOnValidThread());
compositor_task_runner_->PostTask(
- FROM_HERE, base::Bind(&WebMediaPlayerMSCompositor::StopRenderingInternal,
- weak_ptr_factory_.GetWeakPtr()));
-}
-
-void WebMediaPlayerMSCompositor::StopRenderingInternal() {
- DCHECK(compositor_task_runner_->BelongsToCurrentThread());
- stopped_ = true;
-
- // It is possible that the video gets paused and then resumed. We need to
- // reset VideoRendererAlgorithm, otherwise, VideoRendererAlgorithm will think
- // there is a very long frame in the queue and then make totally wrong
- // frame selection.
- {
- base::AutoLock auto_lock(current_frame_lock_);
- if (rendering_frame_buffer_)
- rendering_frame_buffer_->Reset();
- }
-
- if (video_frame_provider_client_)
- video_frame_provider_client_->StopRendering();
+ FROM_HERE,
+ base::Bind(&WebMediaPlayerMSCompositor::StopRenderingInternal, this));
}
void WebMediaPlayerMSCompositor::ReplaceCurrentFrameWithACopy() {
@@ -368,11 +341,19 @@ void WebMediaPlayerMSCompositor::ReplaceCurrentFrameWithACopy() {
CopyFrame(current_frame_, player_->GetSkCanvasVideoRenderer());
}
+void WebMediaPlayerMSCompositor::StopUsingProvider() {
+ DCHECK(thread_checker_.CalledOnValidThread());
+ compositor_task_runner_->PostTask(
+ FROM_HERE,
+ base::Bind(&WebMediaPlayerMSCompositor::StopUsingProviderInternal, this));
+}
+
bool WebMediaPlayerMSCompositor::MapTimestampsToRenderTimeTicks(
const std::vector<base::TimeDelta>& timestamps,
std::vector<base::TimeTicks>* wall_clock_times) {
DCHECK(compositor_task_runner_->BelongsToCurrentThread() ||
- thread_checker_.CalledOnValidThread());
+ thread_checker_.CalledOnValidThread() ||
+ io_thread_checker_.CalledOnValidThread());
for (const base::TimeDelta& timestamp : timestamps) {
DCHECK(timestamps_to_clock_times_.count(timestamp));
wall_clock_times->push_back(timestamps_to_clock_times_[timestamp]);
@@ -430,6 +411,39 @@ void WebMediaPlayerMSCompositor::SetCurrentFrame(
FROM_HERE, base::Bind(&WebMediaPlayerMS::ResetCanvasCache, player_));
}
+void WebMediaPlayerMSCompositor::StartRenderingInternal() {
+ DCHECK(compositor_task_runner_->BelongsToCurrentThread());
+ stopped_ = false;
+
+ if (video_frame_provider_client_)
+ video_frame_provider_client_->StartRendering();
+}
+
+void WebMediaPlayerMSCompositor::StopRenderingInternal() {
+ DCHECK(compositor_task_runner_->BelongsToCurrentThread());
+ stopped_ = true;
+
+ // It is possible that the video gets paused and then resumed. We need to
+ // reset VideoRendererAlgorithm, otherwise, VideoRendererAlgorithm will think
+ // there is a very long frame in the queue and then make totally wrong
+ // frame selection.
+ {
+ base::AutoLock auto_lock(current_frame_lock_);
+ if (rendering_frame_buffer_)
+ rendering_frame_buffer_->Reset();
+ }
+
+ if (video_frame_provider_client_)
+ video_frame_provider_client_->StopRendering();
+}
+
+void WebMediaPlayerMSCompositor::StopUsingProviderInternal() {
+ DCHECK(compositor_task_runner_->BelongsToCurrentThread());
+ if (video_frame_provider_client_)
+ video_frame_provider_client_->StopUsingProvider();
+ video_frame_provider_client_ = nullptr;
+}
+
void WebMediaPlayerMSCompositor::SetAlgorithmEnabledForTesting(
bool algorithm_enabled) {
if (!algorithm_enabled) {
« no previous file with comments | « content/renderer/media/webmediaplayer_ms_compositor.h ('k') | content/renderer/media/webmediaplayer_ms_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698