Index: content/browser/renderer_host/render_widget_host_view_android.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_android.cc b/content/browser/renderer_host/render_widget_host_view_android.cc |
index c182e2982a386ead45fdc64039a74409dc498795..72c523dca6ee39d8bbc8ad9aea1e57c61fa05230 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_android.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_android.cc |
@@ -515,7 +515,7 @@ bool RenderWidgetHostViewAndroid::HasFocus() const { |
} |
bool RenderWidgetHostViewAndroid::IsSurfaceAvailableForCopy() const { |
- return HasValidFrame(); |
+ return !using_browser_compositor_ || HasValidFrame(); |
} |
void RenderWidgetHostViewAndroid::Show() { |
@@ -872,7 +872,7 @@ void RenderWidgetHostViewAndroid::CopyFromCompositingSurface( |
return; |
} |
base::TimeTicks start_time = base::TimeTicks::Now(); |
- if (using_browser_compositor_ && !IsSurfaceAvailableForCopy()) { |
+ if (!IsSurfaceAvailableForCopy()) { |
callback.Run(SkBitmap(), READBACK_SURFACE_UNAVAILABLE); |
return; |
} |
@@ -1176,6 +1176,11 @@ void RenderWidgetHostViewAndroid::RetainFrame( |
last_frame_info_.reset(new LastFrameInfo(output_surface_id, frame.Pass())); |
} |
+SynchronousCompositorImpl* |
+RenderWidgetHostViewAndroid::GetSynchronousCompositorImpl() { |
+ return sync_compositor_.get(); |
+} |
+ |
void RenderWidgetHostViewAndroid::SynchronousFrameMetadata( |
const cc::CompositorFrameMetadata& frame_metadata) { |
if (!content_view_core_) |
@@ -1281,10 +1286,7 @@ void RenderWidgetHostViewAndroid::SynchronousCopyContents( |
int output_width = output_size_in_pixel.width(); |
int output_height = output_size_in_pixel.height(); |
- SynchronousCompositor* compositor = |
- SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), |
- host_->GetRoutingID()); |
- if (!compositor) { |
+ if (!sync_compositor_) { |
callback.Run(SkBitmap(), READBACK_FAILED); |
return; |
} |
@@ -1298,7 +1300,7 @@ void RenderWidgetHostViewAndroid::SynchronousCopyContents( |
canvas.scale( |
(float)output_width / (float)input_size_in_pixel.width(), |
(float)output_height / (float)input_size_in_pixel.height()); |
- compositor->DemandDrawSw(&canvas); |
+ sync_compositor_->DemandDrawSw(&canvas); |
callback.Run(bitmap, READBACK_SUCCESS); |
} |
@@ -1482,16 +1484,12 @@ void RenderWidgetHostViewAndroid::SendBeginFrame(base::TimeTicks frame_time, |
host_->GetRoutingID(), |
cc::BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline, |
vsync_period, cc::BeginFrameArgs::NORMAL))); |
- } else { |
- SynchronousCompositorImpl* compositor = SynchronousCompositorImpl::FromID( |
- host_->GetProcess()->GetID(), host_->GetRoutingID()); |
- if (compositor) { |
- // The synchronous compositor synchronously does it's work in this call. |
- // It does not use a deadline. |
- compositor->BeginFrame(cc::BeginFrameArgs::Create( |
- BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks(), vsync_period, |
- cc::BeginFrameArgs::NORMAL)); |
- } |
+ } else if (sync_compositor_) { |
+ // The synchronous compositor synchronously does it's work in this call. |
+ // It does not use a deadline. |
+ sync_compositor_->BeginFrame(cc::BeginFrameArgs::Create( |
+ BEGINFRAME_FROM_HERE, frame_time, base::TimeTicks(), vsync_period, |
+ cc::BeginFrameArgs::NORMAL)); |
} |
} |
@@ -1609,11 +1607,8 @@ InputEventAckState RenderWidgetHostViewAndroid::FilterInputEvent( |
shim->Send(new GpuMsg_WakeUpGpu); |
} |
- SynchronousCompositorImpl* compositor = |
- SynchronousCompositorImpl::FromID(host_->GetProcess()->GetID(), |
- host_->GetRoutingID()); |
- if (compositor) |
- return compositor->HandleInputEvent(input_event); |
+ if (sync_compositor_) |
+ return sync_compositor_->HandleInputEvent(input_event); |
return INPUT_EVENT_ACK_STATE_NOT_CONSUMED; |
} |
@@ -1745,6 +1740,8 @@ uint32_t RenderWidgetHostViewAndroid::GetSurfaceIdNamespace() { |
void RenderWidgetHostViewAndroid::SetContentViewCore( |
ContentViewCoreImpl* content_view_core) { |
+ DCHECK(!content_view_core || !content_view_core_ || |
+ (content_view_core_ == content_view_core)); |
RemoveLayers(); |
StopObservingRootWindow(); |
@@ -1772,9 +1769,10 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( |
} |
AttachLayers(); |
- |
- if (!content_view_core_) |
+ if (!content_view_core_) { |
+ sync_compositor_.reset(); |
return; |
+ } |
if (is_showing_) |
StartObservingRootWindow(); |
@@ -1789,6 +1787,11 @@ void RenderWidgetHostViewAndroid::SetContentViewCore( |
content_view_core_window_android_->GetCompositor()) { |
overscroll_controller_ = CreateOverscrollController(content_view_core_); |
} |
+ |
+ if (!sync_compositor_) { |
+ sync_compositor_ = SynchronousCompositorImpl::Create( |
+ this, content_view_core_->GetWebContents()); |
+ } |
} |
void RenderWidgetHostViewAndroid::RunAckCallbacks( |