Index: content/renderer/android/synchronous_compositor_output_surface.cc |
diff --git a/content/renderer/android/synchronous_compositor_output_surface.cc b/content/renderer/android/synchronous_compositor_output_surface.cc |
index 567c2a2e2f3f905a9c5f8b6709c23db982829bdf..ddef992f9b117e09e71ef68a425246593b7379b8 100644 |
--- a/content/renderer/android/synchronous_compositor_output_surface.cc |
+++ b/content/renderer/android/synchronous_compositor_output_surface.cc |
@@ -45,7 +45,7 @@ class SynchronousCompositorOutputSurface::SoftwareDevice |
NOTREACHED() << "BeginPaint with no canvas set"; |
return &null_canvas_; |
} |
- LOG_IF(WARNING, surface_->frame_holder_.get()) |
+ LOG_IF(WARNING, surface_->did_swap_) |
<< "Mutliple calls to BeginPaint per frame"; |
return surface_->current_sw_canvas_; |
} |
@@ -74,6 +74,7 @@ SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface( |
sync_client_(nullptr), |
current_sw_canvas_(nullptr), |
memory_policy_(0u), |
+ did_swap_(false), |
frame_swap_message_queue_(frame_swap_message_queue) { |
thread_checker_.DetachFromThread(); |
DCHECK(registry_); |
@@ -120,9 +121,10 @@ void SynchronousCompositorOutputSurface::Reshape(const gfx::Size& size, |
void SynchronousCompositorOutputSurface::SwapBuffers( |
cc::CompositorFrame* frame) { |
DCHECK(CalledOnValidThread()); |
- frame_holder_.reset(new cc::CompositorFrame); |
- frame->AssignTo(frame_holder_.get()); |
+ DCHECK(sync_client_); |
+ sync_client_->SwapBuffers(frame); |
client_->DidSwapBuffers(); |
+ did_swap_ = true; |
} |
void SynchronousCompositorOutputSurface::Invalidate() { |
@@ -131,8 +133,7 @@ void SynchronousCompositorOutputSurface::Invalidate() { |
sync_client_->Invalidate(); |
} |
-scoped_ptr<cc::CompositorFrame> |
-SynchronousCompositorOutputSurface::DemandDrawHw( |
+void SynchronousCompositorOutputSurface::DemandDrawHw( |
const gfx::Size& surface_size, |
const gfx::Transform& transform, |
const gfx::Rect& viewport, |
@@ -148,12 +149,9 @@ SynchronousCompositorOutputSurface::DemandDrawHw( |
transform_for_tile_priority); |
const bool software_draw = false; |
InvokeComposite(transform, viewport, clip, software_draw); |
- |
- return frame_holder_.Pass(); |
} |
-scoped_ptr<cc::CompositorFrame> |
-SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { |
+void SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { |
DCHECK(CalledOnValidThread()); |
DCHECK(canvas); |
DCHECK(!current_sw_canvas_); |
@@ -171,8 +169,6 @@ SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { |
canvas->getBaseLayerSize().height()); |
const bool software_draw = true; |
InvokeComposite(transform, clip, clip, software_draw); |
- |
- return frame_holder_.Pass(); |
} |
void SynchronousCompositorOutputSurface::InvokeComposite( |
@@ -180,13 +176,12 @@ void SynchronousCompositorOutputSurface::InvokeComposite( |
const gfx::Rect& viewport, |
const gfx::Rect& clip, |
bool software_draw) { |
- DCHECK(!frame_holder_.get()); |
- |
gfx::Transform adjusted_transform = transform; |
adjusted_transform.matrix().postTranslate(-viewport.x(), -viewport.y(), 0); |
+ did_swap_ = false; |
client_->OnDraw(adjusted_transform, viewport, clip, software_draw); |
- if (frame_holder_.get()) |
+ if (did_swap_) |
client_->DidSwapBuffersComplete(); |
} |