summaryrefslogtreecommitdiffstats
path: root/android_webview
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-07 12:30:36 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-03-07 12:30:36 +0000
commitea5f70a488fe91f363e591e820f6af4f77f3bc4f (patch)
treeef83d136c80f805dab63b47a3bc287e87a9bdfbf /android_webview
parentd1630ac3b8f7a6087a50758e2125a4a8b1f1f662 (diff)
downloadchromium_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.gyp2
-rw-r--r--android_webview/common/aw_switches.cc12
-rw-r--r--android_webview/common/aw_switches.h15
-rw-r--r--android_webview/lib/main/aw_main_delegate.cc15
-rw-r--r--android_webview/renderer/aw_content_renderer_client.cc9
-rw-r--r--android_webview/renderer/aw_content_renderer_client.h4
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