Chromium Code Reviews| Index: content/renderer/render_thread_impl.cc |
| diff --git a/content/renderer/render_thread_impl.cc b/content/renderer/render_thread_impl.cc |
| index 92b5bb0aa0bdb7c8db6467abb6ed99f07b6633a6..d003291c196d78b7e0912a2ab561b87ec61a6bde 100644 |
| --- a/content/renderer/render_thread_impl.cc |
| +++ b/content/renderer/render_thread_impl.cc |
| @@ -159,7 +159,9 @@ |
| #if defined(OS_ANDROID) |
| #include <cpu-features.h> |
| +#include "content/renderer/android/synchronous_compositor_external_begin_frame_source.h" |
| #include "content/renderer/android/synchronous_compositor_factory.h" |
| +#include "content/renderer/android/synchronous_compositor_filter.h" |
| #include "content/renderer/media/android/renderer_demuxer_android.h" |
| #endif |
| @@ -857,6 +859,13 @@ void RenderThreadImpl::Shutdown() { |
| compositor_message_filter_ = NULL; |
| } |
| +#if defined(OS_ANDROID) |
| + if (sync_compositor_message_filter_.get()) { |
|
dcheng
2015/11/04 09:47:41
Nit: no .get()
boliu
2015/11/04 16:52:05
Done.
|
| + RemoveFilter(sync_compositor_message_filter_.get()); |
| + sync_compositor_message_filter_ = NULL; |
|
dcheng
2015/11/04 09:47:41
Nit: nullptr
boliu
2015/11/04 16:52:05
Done.
|
| + } |
| +#endif |
| + |
| media_thread_.reset(); |
| compositor_thread_.reset(); |
| @@ -1129,9 +1138,17 @@ void RenderThreadImpl::EnsureWebKitInitialized() { |
| bool enable = !command_line.HasSwitch(switches::kDisableThreadedCompositing); |
| if (enable) { |
| #if defined(OS_ANDROID) |
| - if (SynchronousCompositorFactory* factory = |
| - SynchronousCompositorFactory::GetInstance()) |
| - compositor_task_runner_ = factory->GetCompositorTaskRunner(); |
| + SynchronousCompositorFactory* sync_compositor_factory = |
| + SynchronousCompositorFactory::GetInstance(); |
| + bool using_ipc_sync_compositing = |
| + base::CommandLine::ForCurrentProcess()->HasSwitch( |
| + switches::kIPCSyncCompositing); |
| + DCHECK(!sync_compositor_factory || !using_ipc_sync_compositing); |
| + |
| + if (sync_compositor_factory) { |
| + compositor_task_runner_ = |
| + sync_compositor_factory->GetCompositorTaskRunner(); |
| + } |
| #endif |
| if (!compositor_task_runner_.get()) { |
| compositor_thread_.reset(new base::Thread("Compositor")); |
| @@ -1149,9 +1166,14 @@ void RenderThreadImpl::EnsureWebKitInitialized() { |
| InputHandlerManagerClient* input_handler_manager_client = NULL; |
| #if defined(OS_ANDROID) |
| - if (SynchronousCompositorFactory* factory = |
| - SynchronousCompositorFactory::GetInstance()) { |
| - input_handler_manager_client = factory->GetInputHandlerManagerClient(); |
| + 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(); |
| + } else if (sync_compositor_factory) { |
| + input_handler_manager_client = |
| + sync_compositor_factory->GetInputHandlerManagerClient(); |
| } |
| #endif |
| if (!input_handler_manager_client) { |
| @@ -1538,7 +1560,11 @@ RenderThreadImpl::CreateExternalBeginFrameSource(int routing_id) { |
| #if defined(OS_ANDROID) |
| if (SynchronousCompositorFactory* factory = |
| SynchronousCompositorFactory::GetInstance()) { |
| + DCHECK(!sync_compositor_message_filter_.get()); |
| return factory->CreateExternalBeginFrameSource(routing_id); |
| + } else if (sync_compositor_message_filter_.get()) { |
| + return make_scoped_ptr(new SynchronousCompositorExternalBeginFrameSource( |
| + routing_id, sync_compositor_message_filter_.get())); |
| } |
| #endif |
| return make_scoped_ptr(new CompositorExternalBeginFrameSource( |