summaryrefslogtreecommitdiffstats
path: root/content/renderer/render_thread_impl.cc
diff options
context:
space:
mode:
authorboliu <boliu@chromium.org>2016-03-10 23:02:14 -0800
committerCommit bot <commit-bot@chromium.org>2016-03-11 07:03:13 +0000
commitde5b75b1ccd0ef7f478318d805b3ba1c8ebf7130 (patch)
tree393ff97cfa98eda6ae12d59381dc0a71dbf22091 /content/renderer/render_thread_impl.cc
parenta2e46e0ffc404d3168c0af4c3b89d8ae5475cc3d (diff)
downloadchromium_src-de5b75b1ccd0ef7f478318d805b3ba1c8ebf7130.zip
chromium_src-de5b75b1ccd0ef7f478318d805b3ba1c8ebf7130.tar.gz
chromium_src-de5b75b1ccd0ef7f478318d805b3ba1c8ebf7130.tar.bz2
sync compositor: Merge input path with chrome
Use chrome's async input delivery path in Android WebView. See bug for potential incompatibility risk. Existing code path is not removed in case compatibility is an issue. Refactor out ui::SynchronousInputHandlerProxy parts from InputHandlerManagerClient into a separate interface so that sync compositor can use SynchronousInputHandlerProxy even without routing input synchronously. Then just stop filtering input events in sync compositor, hook up overscroll, and everything just works. Tests: testNoSpuriousOverScrolls requires synchronous input to maintain the property that a single scroll call happens. Asynchronously the test is not valid AwContents.zoomIn is no longer synchronous which breaks testPinchZoomUpdatesScrollRangeSynchronously. Can fix this independently if this becomes a problem later. BUG=545628 Review URL: https://codereview.chromium.org/1620053002 Cr-Commit-Position: refs/heads/master@{#380563}
Diffstat (limited to 'content/renderer/render_thread_impl.cc')
-rw-r--r--content/renderer/render_thread_impl.cc20
1 files changed, 15 insertions, 5 deletions
diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc
index 202c5f9..b1b76c9 100644
--- a/content/renderer/render_thread_impl.cc
+++ b/content/renderer/render_thread_impl.cc
@@ -1177,10 +1177,13 @@ void RenderThreadImpl::InitializeCompositorThread() {
#if defined(OS_ANDROID)
SynchronousCompositorFactory* sync_compositor_factory =
SynchronousCompositorFactory::GetInstance();
+ const base::CommandLine* cmd_line = base::CommandLine::ForCurrentProcess();
bool using_ipc_sync_compositing =
- base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kIPCSyncCompositing);
+ cmd_line->HasSwitch(switches::kIPCSyncCompositing);
+ bool sync_input_for_sync_compositing =
+ cmd_line->HasSwitch(switches::kSyncInputForSyncCompositor);
DCHECK(!sync_compositor_factory || !using_ipc_sync_compositing);
+ DCHECK(!sync_input_for_sync_compositing || using_ipc_sync_compositing);
if (sync_compositor_factory) {
compositor_task_runner_ =
@@ -1201,16 +1204,23 @@ void RenderThreadImpl::InitializeCompositorThread() {
false));
}
- InputHandlerManagerClient* input_handler_manager_client = NULL;
+ InputHandlerManagerClient* input_handler_manager_client = nullptr;
+ SynchronousInputHandlerProxyClient* synchronous_input_handler_proxy_client =
+ nullptr;
#if defined(OS_ANDROID)
if (using_ipc_sync_compositing) {
sync_compositor_message_filter_ =
new SynchronousCompositorFilter(compositor_task_runner_);
AddFilter(sync_compositor_message_filter_.get());
- input_handler_manager_client = sync_compositor_message_filter_.get();
+ if (sync_input_for_sync_compositing)
+ input_handler_manager_client = sync_compositor_message_filter_.get();
+ synchronous_input_handler_proxy_client =
+ sync_compositor_message_filter_.get();
} else if (sync_compositor_factory) {
input_handler_manager_client =
sync_compositor_factory->GetInputHandlerManagerClient();
+ synchronous_input_handler_proxy_client =
+ sync_compositor_factory->GetSynchronousInputHandlerProxyClient();
}
#endif
if (!input_handler_manager_client) {
@@ -1223,7 +1233,7 @@ void RenderThreadImpl::InitializeCompositorThread() {
}
input_handler_manager_.reset(new InputHandlerManager(
compositor_task_runner_, input_handler_manager_client,
- renderer_scheduler_.get()));
+ synchronous_input_handler_proxy_client, renderer_scheduler_.get()));
}
void RenderThreadImpl::EnsureWebKitInitialized() {