diff options
author | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 12:30:36 +0000 |
---|---|---|
committer | boliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-03-07 12:30:36 +0000 |
commit | ea5f70a488fe91f363e591e820f6af4f77f3bc4f (patch) | |
tree | ef83d136c80f805dab63b47a3bc287e87a9bdfbf /android_webview | |
parent | d1630ac3b8f7a6087a50758e2125a4a8b1f1f662 (diff) | |
download | chromium_src-ea5f70a488fe91f363e591e820f6af4f77f3bc4f.zip chromium_src-ea5f70a488fe91f363e591e820f6af4f77f3bc4f.tar.gz chromium_src-ea5f70a488fe91f363e591e820f6af4f77f3bc4f.tar.bz2 |
Allow renderer compositor message loop to be set by content embedder
Accomplished by adding a override method to ContentRendererClient
to return a MessageLoop, which if not null, is used as the renderer
compositor thread. In the process, make the ownership of the
compositor thread into RenderThreadImpl and rename CompositorThread
to InputHandlerManager.
Added a thread merge command line switch to control this in
android_webview.
BUG=179436
Review URL: https://chromiumcodereview.appspot.com/12383056
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@186682 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/android_webview.gyp | 2 | ||||
-rw-r--r-- | android_webview/common/aw_switches.cc | 12 | ||||
-rw-r--r-- | android_webview/common/aw_switches.h | 15 | ||||
-rw-r--r-- | android_webview/lib/main/aw_main_delegate.cc | 15 | ||||
-rw-r--r-- | android_webview/renderer/aw_content_renderer_client.cc | 9 | ||||
-rw-r--r-- | android_webview/renderer/aw_content_renderer_client.h | 4 |
6 files changed, 53 insertions, 4 deletions
diff --git a/android_webview/android_webview.gyp b/android_webview/android_webview.gyp index 3a09568..87249f9 100644 --- a/android_webview/android_webview.gyp +++ b/android_webview/android_webview.gyp @@ -156,6 +156,8 @@ 'common/aw_hit_test_data.cc', 'common/aw_hit_test_data.h', 'common/aw_resource.h', + 'common/aw_switches.cc', + 'common/aw_switches.h', 'common/render_view_messages.cc', 'common/render_view_messages.h', 'common/renderer_picture_map.cc', diff --git a/android_webview/common/aw_switches.cc b/android_webview/common/aw_switches.cc new file mode 100644 index 0000000..c3fbf1b --- /dev/null +++ b/android_webview/common/aw_switches.cc @@ -0,0 +1,12 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "android_webview/common/aw_switches.h" + +namespace switches { + +const char kMergeUIAndRendererCompositorThreads[] = + "merge-ui-and-compositor-threads"; + +} // namespace switches diff --git a/android_webview/common/aw_switches.h b/android_webview/common/aw_switches.h new file mode 100644 index 0000000..c812122 --- /dev/null +++ b/android_webview/common/aw_switches.h @@ -0,0 +1,15 @@ +// Copyright (c) 2013 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef ANDROID_WEBVIEW_COMMON_AW_SWITCHES_H_ +#define ANDROID_WEBVIEW_COMMON_AW_SWITCHES_H_ + +namespace switches { + +// Merge the Browser UI and the renderer compositor threads. +extern const char kMergeUIAndRendererCompositorThreads[]; + +} // namespace switches + +#endif // ANDROID_WEBVIEW_COMMON_AW_SWITCHES_H_ diff --git a/android_webview/lib/main/aw_main_delegate.cc b/android_webview/lib/main/aw_main_delegate.cc index aa220ea..99a4b0d 100644 --- a/android_webview/lib/main/aw_main_delegate.cc +++ b/android_webview/lib/main/aw_main_delegate.cc @@ -5,6 +5,7 @@ #include "android_webview/lib/main/aw_main_delegate.h" #include "android_webview/browser/aw_content_browser_client.h" +#include "android_webview/common/aw_switches.h" #include "android_webview/lib/aw_browser_dependency_factory_impl.h" #include "android_webview/native/aw_geolocation_permission_context.h" #include "android_webview/native/aw_quota_manager_bridge_impl.h" @@ -13,8 +14,8 @@ #include "base/command_line.h" #include "base/logging.h" #include "base/memory/scoped_ptr.h" -#include "cc/switches.h" #include "content/public/browser/browser_main_runner.h" +#include "content/public/browser/browser_thread.h" #include "content/public/common/content_switches.h" namespace android_webview { @@ -76,7 +77,17 @@ content::ContentBrowserClient* content::ContentRendererClient* AwMainDelegate::CreateContentRendererClient() { - content_renderer_client_.reset(new AwContentRendererClient()); + MessageLoop* renderer_compositor_loop = NULL; + + CommandLine* command_line = CommandLine::ForCurrentProcess(); + if (command_line->HasSwitch(switches::kMergeUIAndRendererCompositorThreads)) { + renderer_compositor_loop = + content::BrowserThread::UnsafeGetMessageLoopForThread( + content::BrowserThread::UI); + } + + content_renderer_client_.reset( + new AwContentRendererClient(renderer_compositor_loop)); return content_renderer_client_.get(); } diff --git a/android_webview/renderer/aw_content_renderer_client.cc b/android_webview/renderer/aw_content_renderer_client.cc index a1995a3..b0abcd0 100644 --- a/android_webview/renderer/aw_content_renderer_client.cc +++ b/android_webview/renderer/aw_content_renderer_client.cc @@ -8,6 +8,7 @@ #include "android_webview/common/url_constants.h" #include "android_webview/renderer/aw_render_view_ext.h" #include "android_webview/renderer/view_renderer.h" +#include "base/message_loop.h" #include "base/utf_string_conversions.h" #include "components/visitedlink/renderer/visitedlink_slave.h" #include "content/public/renderer/render_thread.h" @@ -20,7 +21,9 @@ namespace android_webview { -AwContentRendererClient::AwContentRendererClient() { +AwContentRendererClient::AwContentRendererClient( + MessageLoop* compositor_message_loop) + : compositor_message_loop_(compositor_message_loop) { } AwContentRendererClient::~AwContentRendererClient() { @@ -93,4 +96,8 @@ void AwContentRendererClient::PrefetchHostName(const char* hostname, // Perhaps componentize chrome implementation or move to content/? } +MessageLoop* AwContentRendererClient::OverrideCompositorMessageLoop() const { + return compositor_message_loop_; +} + } // namespace android_webview diff --git a/android_webview/renderer/aw_content_renderer_client.h b/android_webview/renderer/aw_content_renderer_client.h index d938cd3..72112c2 100644 --- a/android_webview/renderer/aw_content_renderer_client.h +++ b/android_webview/renderer/aw_content_renderer_client.h @@ -18,7 +18,7 @@ namespace android_webview { class AwContentRendererClient : public content::ContentRendererClient { public: - AwContentRendererClient(); + explicit AwContentRendererClient(MessageLoop* compositor_message_loop); virtual ~AwContentRendererClient(); // ContentRendererClient implementation. @@ -36,10 +36,12 @@ class AwContentRendererClient : public content::ContentRendererClient { size_t length) OVERRIDE; virtual bool IsLinkVisited(unsigned long long link_hash) OVERRIDE; virtual void PrefetchHostName(const char* hostname, size_t length) OVERRIDE; + virtual MessageLoop* OverrideCompositorMessageLoop() const OVERRIDE; private: scoped_ptr<AwRenderProcessObserver> aw_render_process_observer_; scoped_ptr<components::VisitedLinkSlave> visited_link_slave_; + MessageLoop* compositor_message_loop_; }; } // namespace android_webview |