Chromium Code Reviews| Index: content/common/gpu/image_transport_surface_fbo_mac.mm |
| diff --git a/content/common/gpu/image_transport_surface_fbo_mac.mm b/content/common/gpu/image_transport_surface_fbo_mac.mm |
| index fc7e5ec4bf370933a39cd3ebca0a647539d8b82e..343ee83bfc09647526c2c700ba1e6c8632fd8f22 100644 |
| --- a/content/common/gpu/image_transport_surface_fbo_mac.mm |
| +++ b/content/common/gpu/image_transport_surface_fbo_mac.mm |
| @@ -28,8 +28,7 @@ ImageTransportSurfaceFBO::ImageTransportSurfaceFBO( |
| context_(NULL), |
| scale_factor_(1.f), |
| made_current_(false), |
| - is_swap_buffers_pending_(false), |
| - did_unschedule_(false) { |
| + is_swap_buffers_send_pending_(false) { |
| if (ui::RemoteLayerAPISupported()) |
| storage_provider_.reset(new CALayerStorageProvider(this)); |
| else |
| @@ -62,17 +61,9 @@ void ImageTransportSurfaceFBO::Destroy() { |
| } |
| bool ImageTransportSurfaceFBO::DeferDraws() { |
| - // The command buffer hit a draw/clear command that could clobber the |
| - // IOSurface in use by an earlier SwapBuffers. If a Swap is pending, abort |
| - // processing of the command by returning true and unschedule until the Swap |
| - // Ack arrives. |
| - if(did_unschedule_) |
| - return true; // Still unscheduled, so just return true. |
| - if (is_swap_buffers_pending_) { |
| - did_unschedule_ = true; |
| - helper_->SetScheduled(false); |
| - return true; |
| - } |
| + storage_provider_->WillWriteToBackbuffer(); |
| + // We should not have a pending send when we are drawing the next frame. |
| + DCHECK(!is_swap_buffers_send_pending_); |
|
piman
2014/08/27 22:13:05
Is that DCHECK also invalid while the TODO in CALa
ccameron
2014/08/27 22:46:08
This is still valid.
At the moment it is valid, b
|
| return false; |
| } |
| @@ -101,6 +92,8 @@ bool ImageTransportSurfaceFBO::SetBackbufferAllocation(bool allocation) { |
| return true; |
| backbuffer_suggested_allocation_ = allocation; |
| AdjustBufferAllocation(); |
| + if (!allocation) |
| + storage_provider_->DiscardBackbuffer(); |
| return true; |
| } |
| @@ -130,18 +123,22 @@ bool ImageTransportSurfaceFBO::SwapBuffers() { |
| return true; |
| glFlush(); |
| + // It is the responsibility of the storage provider to send the swap IPC. |
| + is_swap_buffers_send_pending_ = true; |
| + storage_provider_->SwapBuffers(size_, scale_factor_); |
| + return true; |
| +} |
| + |
| +void ImageTransportSurfaceFBO::SendSwapBuffers(uint64 surface_handle, |
| + const gfx::Size pixel_size, |
| + float scale_factor) { |
| GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params; |
| - params.surface_handle = storage_provider_->GetSurfaceHandle(); |
| - params.size = GetSize(); |
| - params.scale_factor = scale_factor_; |
| + params.surface_handle = surface_handle; |
| + params.size = pixel_size; |
| + params.scale_factor = scale_factor; |
| params.latency_info.swap(latency_info_); |
| helper_->SendAcceleratedSurfaceBuffersSwapped(params); |
| - |
| - DCHECK(!is_swap_buffers_pending_); |
| - is_swap_buffers_pending_ = true; |
| - |
| - storage_provider_->WillSwapBuffers(); |
| - return true; |
| + is_swap_buffers_send_pending_ = false; |
| } |
| bool ImageTransportSurfaceFBO::PostSubBuffer( |
| @@ -170,16 +167,7 @@ void* ImageTransportSurfaceFBO::GetDisplay() { |
| void ImageTransportSurfaceFBO::OnBufferPresented( |
| const AcceleratedSurfaceMsg_BufferPresented_Params& params) { |
| context_->share_group()->SetRendererID(params.renderer_id); |
| - storage_provider_->CanFreeSwappedBuffer(); |
| -} |
| - |
| -void ImageTransportSurfaceFBO::UnblockContextAfterPendingSwap() { |
| - DCHECK(is_swap_buffers_pending_); |
| - is_swap_buffers_pending_ = false; |
| - if (did_unschedule_) { |
| - did_unschedule_ = false; |
| - helper_->SetScheduled(true); |
| - } |
| + storage_provider_->SwapBuffersAckedByBrowser(); |
| } |
| void ImageTransportSurfaceFBO::OnResize(gfx::Size size, |