summaryrefslogtreecommitdiffstats
path: root/content/renderer
diff options
context:
space:
mode:
authorscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-31 17:13:08 +0000
committerscherkus@chromium.org <scherkus@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-31 17:13:08 +0000
commita70c2f620ef7ea0585378343fd645492562a0445 (patch)
treefa34fcd2b71556d2afceca636d0182c883bddd0f /content/renderer
parentfc5c45b24b11cdb00a01c01e5dad590af141e3e0 (diff)
downloadchromium_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.cc10
-rw-r--r--content/renderer/render_thread_impl.h8
-rw-r--r--content/renderer/render_view_impl.cc1
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(