Index: cc/output/output_surface.cc |
diff --git a/cc/output/output_surface.cc b/cc/output/output_surface.cc |
index 2b6b7829999ef01c60648b6de7ed9acb4dce1fe7..7cfede3ee26c7a6066546a10fc6338f6d4093479 100644 |
--- a/cc/output/output_surface.cc |
+++ b/cc/output/output_surface.cc |
@@ -177,9 +177,6 @@ void OutputSurface::SetUpContext3d() { |
context_provider_->SetLostContextCallback( |
base::Bind(&OutputSurface::DidLoseOutputSurface, |
base::Unretained(this))); |
- context_provider_->ContextSupport()->SetSwapBuffersCompleteCallback( |
- base::Bind(&OutputSurface::OnSwapBuffersComplete, |
- base::Unretained(this))); |
context_provider_->SetMemoryPolicyChangedCallback( |
base::Bind(&OutputSurface::SetMemoryPolicy, |
base::Unretained(this))); |
@@ -207,8 +204,6 @@ void OutputSurface::ResetContext3d() { |
ContextProvider::LostContextCallback()); |
context_provider_->SetMemoryPolicyChangedCallback( |
ContextProvider::MemoryPolicyChangedCallback()); |
- if (gpu::ContextSupport* support = context_provider_->ContextSupport()) |
- support->SetSwapBuffersCompleteCallback(base::Closure()); |
} |
context_provider_ = NULL; |
} |
@@ -261,11 +256,18 @@ void OutputSurface::SwapBuffers(CompositorFrame* frame) { |
UpdateAndMeasureGpuLatency(); |
if (frame->gl_frame_data->sub_buffer_rect == |
gfx::Rect(frame->gl_frame_data->size)) { |
- context_provider_->ContextSupport()->Swap(); |
+ context_provider_->ContextGL()->SwapBuffers(); |
} else { |
- context_provider_->ContextSupport()->PartialSwapBuffers( |
- frame->gl_frame_data->sub_buffer_rect); |
+ const gfx::Rect& rect = frame->gl_frame_data->sub_buffer_rect; |
+ context_provider_->ContextGL()->PostSubBufferCHROMIUM( |
+ rect.x(), rect.y(), rect.width(), rect.height()); |
} |
+ uint32_t sync_point = |
+ context_provider_->ContextGL()->InsertSyncPointCHROMIUM(); |
+ context_provider_->ContextSupport()->SignalSyncPoint( |
+ sync_point, |
+ base::Bind(&OutputSurface::OnSwapBuffersComplete, |
+ weak_ptr_factory_.GetWeakPtr())); |
client_->DidSwapBuffers(); |
} |