From ed2c9c3d1e75a88c273020be59820d1735af39f0 Mon Sep 17 00:00:00 2001 From: "scherkus@chromium.org" Date: Mon, 6 Feb 2012 20:51:24 +0000 Subject: Update WebMediaPlayerProxy to use MessageLoopProxy. Seeing as it's a ref-counted proxy object that can outlive the message loops that it is proxying between it should be using a MessageLoopProxy instead of a raw MessageLoop pointer. BUG=111106 Review URL: https://chromiumcodereview.appspot.com/9330005 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@120606 0039d316-1c4b-4281-b951-d872f2087c98 --- webkit/media/webmediaplayer_impl.cc | 3 ++- webkit/media/webmediaplayer_proxy.cc | 31 ++++++++++++++++--------------- webkit/media/webmediaplayer_proxy.h | 12 ++++++------ 3 files changed, 24 insertions(+), 22 deletions(-) (limited to 'webkit') diff --git a/webkit/media/webmediaplayer_impl.cc b/webkit/media/webmediaplayer_impl.cc index da28423..652c66e 100644 --- a/webkit/media/webmediaplayer_impl.cc +++ b/webkit/media/webmediaplayer_impl.cc @@ -10,6 +10,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/command_line.h" +#include "base/message_loop_proxy.h" #include "base/metrics/histogram.h" #include "media/base/filter_collection.h" #include "media/base/limits.h" @@ -114,7 +115,7 @@ WebMediaPlayerImpl::WebMediaPlayerImpl( pending_seek_(false), pending_seek_seconds_(0.0f), client_(client), - proxy_(new WebMediaPlayerProxy(main_loop_, this)), + proxy_(new WebMediaPlayerProxy(main_loop_->message_loop_proxy(), this)), delegate_(delegate), media_stream_client_(media_stream_client), media_log_(media_log), diff --git a/webkit/media/webmediaplayer_proxy.cc b/webkit/media/webmediaplayer_proxy.cc index 4a2d929..be4c8a7 100644 --- a/webkit/media/webmediaplayer_proxy.cc +++ b/webkit/media/webmediaplayer_proxy.cc @@ -6,7 +6,7 @@ #include "base/bind.h" #include "base/logging.h" -#include "base/message_loop.h" +#include "base/message_loop_proxy.h" #include "media/base/pipeline_status.h" #include "media/filters/chunk_demuxer.h" #include "media/filters/video_renderer_base.h" @@ -22,8 +22,9 @@ namespace webkit_media { // queue but gives up a pretty good latency on repaint. static const int kMaxOutstandingRepaints = 50; -WebMediaPlayerProxy::WebMediaPlayerProxy(MessageLoop* render_loop, - WebMediaPlayerImpl* webmediaplayer) +WebMediaPlayerProxy::WebMediaPlayerProxy( + const scoped_refptr& render_loop, + WebMediaPlayerImpl* webmediaplayer) : render_loop_(render_loop), webmediaplayer_(webmediaplayer), outstanding_repaints_(0) { @@ -51,7 +52,7 @@ void WebMediaPlayerProxy::SetOpaque(bool opaque) { } void WebMediaPlayerProxy::Paint(SkCanvas* canvas, const gfx::Rect& dest_rect) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (frame_provider_) { scoped_refptr video_frame; frame_provider_->GetCurrentFrame(&video_frame); @@ -61,20 +62,20 @@ void WebMediaPlayerProxy::Paint(SkCanvas* canvas, const gfx::Rect& dest_rect) { } bool WebMediaPlayerProxy::HasSingleOrigin() { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (data_source_) return data_source_->HasSingleOrigin(); return true; } void WebMediaPlayerProxy::AbortDataSource() { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (data_source_) data_source_->Abort(); } void WebMediaPlayerProxy::Detach() { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); webmediaplayer_ = NULL; data_source_ = NULL; frame_provider_ = NULL; @@ -108,7 +109,7 @@ void WebMediaPlayerProxy::NetworkEventCallback(NetworkEvent type) { } void WebMediaPlayerProxy::RepaintTask() { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); { base::AutoLock auto_lock(lock_); --outstanding_repaints_; @@ -120,37 +121,37 @@ void WebMediaPlayerProxy::RepaintTask() { } void WebMediaPlayerProxy::PipelineInitializationTask(PipelineStatus status) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (webmediaplayer_) webmediaplayer_->OnPipelineInitialize(status); } void WebMediaPlayerProxy::PipelineSeekTask(PipelineStatus status) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (webmediaplayer_) webmediaplayer_->OnPipelineSeek(status); } void WebMediaPlayerProxy::PipelineEndedTask(PipelineStatus status) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (webmediaplayer_) webmediaplayer_->OnPipelineEnded(status); } void WebMediaPlayerProxy::PipelineErrorTask(PipelineStatus error) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (webmediaplayer_) webmediaplayer_->OnPipelineError(error); } void WebMediaPlayerProxy::NetworkEventTask(NetworkEvent type) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (webmediaplayer_) webmediaplayer_->OnNetworkEvent(type); } void WebMediaPlayerProxy::SetOpaqueTask(bool opaque) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); if (webmediaplayer_) webmediaplayer_->SetOpaque(opaque); } @@ -201,7 +202,7 @@ void WebMediaPlayerProxy::DemuxerShutdown() { void WebMediaPlayerProxy::DemuxerOpenedTask( const scoped_refptr& demuxer) { - DCHECK(MessageLoop::current() == render_loop_); + DCHECK(render_loop_->BelongsToCurrentThread()); chunk_demuxer_ = demuxer; if (webmediaplayer_) webmediaplayer_->OnDemuxerOpened(); diff --git a/webkit/media/webmediaplayer_proxy.h b/webkit/media/webmediaplayer_proxy.h index da0ec50..c7e0929 100644 --- a/webkit/media/webmediaplayer_proxy.h +++ b/webkit/media/webmediaplayer_proxy.h @@ -14,9 +14,12 @@ #include "webkit/media/skcanvas_video_renderer.h" #include "webkit/media/web_data_source.h" -class MessageLoop; class SkCanvas; +namespace base { +class MessageLoopProxy; +} + namespace gfx { class Rect; } @@ -36,7 +39,7 @@ class WebMediaPlayerProxy : public base::RefCountedThreadSafe, public media::ChunkDemuxerClient { public: - WebMediaPlayerProxy(MessageLoop* render_loop, + WebMediaPlayerProxy(const scoped_refptr& render_loop, WebMediaPlayerImpl* webmediaplayer); const scoped_refptr& data_source() { return data_source_; @@ -83,9 +86,6 @@ class WebMediaPlayerProxy void DemuxerOpenedTask(const scoped_refptr& demuxer); void DemuxerClosedTask(); - // Returns the message loop used by the proxy. - MessageLoop* message_loop() { return render_loop_; } - private: friend class base::RefCountedThreadSafe; virtual ~WebMediaPlayerProxy(); @@ -113,7 +113,7 @@ class WebMediaPlayerProxy void SetOpaqueTask(bool opaque); // The render message loop where WebKit lives. - MessageLoop* render_loop_; + scoped_refptr render_loop_; WebMediaPlayerImpl* webmediaplayer_; scoped_refptr data_source_; -- cgit v1.1