Index: content/browser/android/in_process/synchronous_compositor_output_surface.cc |
diff --git a/content/browser/android/in_process/synchronous_compositor_output_surface.cc b/content/browser/android/in_process/synchronous_compositor_output_surface.cc |
index 8d250820209ef757ef26aea5f4d60afe1fc9f727..024ecf27ae2157a1beb900f15c7a44daa412d1e4 100644 |
--- a/content/browser/android/in_process/synchronous_compositor_output_surface.cc |
+++ b/content/browser/android/in_process/synchronous_compositor_output_surface.cc |
@@ -59,13 +59,15 @@ class SynchronousCompositorOutputSurface::SoftwareDevice |
// Intentional no-op: canvas size is controlled by the embedder. |
} |
virtual SkCanvas* BeginPaint(gfx::Rect damage_rect) OVERRIDE { |
- DCHECK(surface_->current_sw_canvas_); |
- if (surface_->current_sw_canvas_) |
- return surface_->current_sw_canvas_; |
- return &null_canvas_; |
+ if (!surface_->current_sw_canvas_) { |
+ NOTREACHED() << "BeginPaint with no canvas set"; |
+ return &null_canvas_; |
+ } |
+ LOG_IF(WARNING, surface_->did_swap_buffer_) |
+ << "Mutliple calls to BeginPaint per frame"; |
+ return surface_->current_sw_canvas_; |
} |
virtual void EndPaint(cc::SoftwareFrameData* frame_data) OVERRIDE { |
- surface_->current_sw_canvas_ = NULL; |
} |
virtual void CopyToBitmap(gfx::Rect rect, SkBitmap* output) OVERRIDE { |
NOTIMPLEMENTED(); |
@@ -119,12 +121,6 @@ void SynchronousCompositorOutputSurface::Reshape( |
// Intentional no-op: surface size is controlled by the embedder. |
} |
-void SynchronousCompositorOutputSurface::SendFrameToParentCompositor( |
- cc::CompositorFrame* frame) { |
- NOTREACHED(); |
- // TODO(joth): Route page scale to the client, see http://crbug.com/237006 |
-} |
- |
void SynchronousCompositorOutputSurface::SetNeedsBeginFrame( |
bool enable) { |
DCHECK(CalledOnValidThread()); |
@@ -135,8 +131,12 @@ void SynchronousCompositorOutputSurface::SetNeedsBeginFrame( |
} |
void SynchronousCompositorOutputSurface::SwapBuffers( |
- const ui::LatencyInfo& info) { |
- context3d()->shallowFlushCHROMIUM(); |
+ cc::CompositorFrame* frame) { |
+ if (!ForcedDrawToSoftwareDevice()) { |
+ DCHECK(context3d()); |
+ context3d()->shallowFlushCHROMIUM(); |
+ } |
+ // TODO(joth): Route page scale to the client, see http://crbug.com/237006 |
did_swap_buffer_ = true; |
} |
@@ -174,8 +174,6 @@ bool SynchronousCompositorOutputSurface::DemandDrawHw( |
if (current_context) |
current_context->ReleaseCurrent(NULL); |
- did_swap_buffer_ = false; |
- |
gfx::Transform adjusted_transform = transform; |
AdjustTransformForClip(&adjusted_transform, clip); |
surface_size_ = surface_size; |
@@ -214,9 +212,13 @@ bool SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { |
void SynchronousCompositorOutputSurface::InvokeComposite( |
gfx::Size damage_size) { |
+ did_swap_buffer_ = false; |
client_->SetNeedsRedrawRect(gfx::Rect(damage_size)); |
if (needs_begin_frame_) |
client_->BeginFrame(base::TimeTicks::Now()); |
+ |
+ if (did_swap_buffer_) |
+ client_->OnSwapBuffersComplete(NULL); |
} |
// Not using base::NonThreadSafe as we want to enforce a more exacting threading |