diff options
author | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-31 17:13:08 +0000 |
---|---|---|
committer | scherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-31 17:13:08 +0000 |
commit | a70c2f620ef7ea0585378343fd645492562a0445 (patch) | |
tree | fa34fcd2b71556d2afceca636d0182c883bddd0f /content/renderer | |
parent | fc5c45b24b11cdb00a01c01e5dad590af141e3e0 (diff) | |
download | chromium_src-a70c2f620ef7ea0585378343fd645492562a0445.zip chromium_src-a70c2f620ef7ea0585378343fd645492562a0445.tar.gz chromium_src-a70c2f620ef7ea0585378343fd645492562a0445.tar.bz2 |
Reland: Use a shared thread for media operations.
This reduces the number of threads created per media element by one.
BUG=61293
TBR=acolwell, jamesr, jochen
Review URL: https://codereview.chromium.org/15649017
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203429 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/renderer')
-rw-r--r-- | content/renderer/render_thread_impl.cc | 10 | ||||
-rw-r--r-- | content/renderer/render_thread_impl.h | 8 | ||||
-rw-r--r-- | content/renderer/render_view_impl.cc | 1 |
3 files changed, 19 insertions, 0 deletions
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc index 386e442..b83ec91 100644 --- a/content/renderer/render_thread_impl.cc +++ b/content/renderer/render_thread_impl.cc @@ -1329,6 +1329,16 @@ RenderThreadImpl::GetFileThreadMessageLoopProxy() { return file_thread_->message_loop_proxy(); } +scoped_refptr<base::MessageLoopProxy> +RenderThreadImpl::GetMediaThreadMessageLoopProxy() { + DCHECK(message_loop() == MessageLoop::current()); + if (!media_thread_) { + media_thread_.reset(new base::Thread("Media")); + media_thread_->Start(); + } + return media_thread_->message_loop_proxy(); +} + void RenderThreadImpl::SetFlingCurveParameters( const std::vector<float>& new_touchpad, const std::vector<float>& new_touchscreen) { diff --git a/content/renderer/render_thread_impl.h b/content/renderer/render_thread_impl.h index a7d615b..abdc4d6 100644 --- a/content/renderer/render_thread_impl.h +++ b/content/renderer/render_thread_impl.h @@ -263,6 +263,11 @@ class CONTENT_EXPORT RenderThreadImpl : public RenderThread, // on the renderer's main thread. scoped_refptr<base::MessageLoopProxy> GetFileThreadMessageLoopProxy(); + // Returns a MessageLoopProxy instance corresponding to the message loop + // of the thread on which media operations should be run. Must be called + // on the renderer's main thread. + scoped_refptr<base::MessageLoopProxy> GetMediaThreadMessageLoopProxy(); + // Causes the idle handler to skip sending idle notifications // on the two next scheduled calls, so idle notifications are // not sent for at least one notification delay. @@ -433,6 +438,9 @@ class CONTENT_EXPORT RenderThreadImpl : public RenderThread, // May be null if overridden by ContentRendererClient. scoped_ptr<base::Thread> compositor_thread_; + // Thread for running multimedia operations (e.g., video decoding). + scoped_ptr<base::Thread> media_thread_; + // Will point to appropriate MessageLoopProxy after initialization, // regardless of whether |compositor_thread_| is overriden. scoped_refptr<base::MessageLoopProxy> compositor_message_loop_proxy_; diff --git a/content/renderer/render_view_impl.cc b/content/renderer/render_view_impl.cc index 2a8fc58..a51c5a2 100644 --- a/content/renderer/render_view_impl.cc +++ b/content/renderer/render_view_impl.cc @@ -2837,6 +2837,7 @@ WebMediaPlayer* RenderViewImpl::createMediaPlayer( } webkit_media::WebMediaPlayerParams params( + RenderThreadImpl::current()->GetMediaThreadMessageLoopProxy(), sink, gpu_factories, new RenderMediaLog()); WebMediaPlayer* media_player = GetContentClient()->renderer()->OverrideCreateWebMediaPlayer( |