Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: content/common/gpu/image_transport_surface_fbo_mac.mm

Issue 517733002: Revert of Fix assorted issues with remote CoreAnimation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@clean_up_accel_layers
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 343ee83bfc09647526c2c700ba1e6c8632fd8f22..fc7e5ec4bf370933a39cd3ebca0a647539d8b82e 100644
--- a/content/common/gpu/image_transport_surface_fbo_mac.mm
+++ b/content/common/gpu/image_transport_surface_fbo_mac.mm
@@ -28,7 +28,8 @@
context_(NULL),
scale_factor_(1.f),
made_current_(false),
- is_swap_buffers_send_pending_(false) {
+ is_swap_buffers_pending_(false),
+ did_unschedule_(false) {
if (ui::RemoteLayerAPISupported())
storage_provider_.reset(new CALayerStorageProvider(this));
else
@@ -61,9 +62,17 @@
}
bool ImageTransportSurfaceFBO::DeferDraws() {
- storage_provider_->WillWriteToBackbuffer();
- // We should not have a pending send when we are drawing the next frame.
- DCHECK(!is_swap_buffers_send_pending_);
+ // 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;
+ }
return false;
}
@@ -92,8 +101,6 @@
return true;
backbuffer_suggested_allocation_ = allocation;
AdjustBufferAllocation();
- if (!allocation)
- storage_provider_->DiscardBackbuffer();
return true;
}
@@ -123,22 +130,18 @@
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 = surface_handle;
- params.size = pixel_size;
- params.scale_factor = scale_factor;
+ params.surface_handle = storage_provider_->GetSurfaceHandle();
+ params.size = GetSize();
+ params.scale_factor = scale_factor_;
params.latency_info.swap(latency_info_);
helper_->SendAcceleratedSurfaceBuffersSwapped(params);
- is_swap_buffers_send_pending_ = false;
+
+ DCHECK(!is_swap_buffers_pending_);
+ is_swap_buffers_pending_ = true;
+
+ storage_provider_->WillSwapBuffers();
+ return true;
}
bool ImageTransportSurfaceFBO::PostSubBuffer(
@@ -167,7 +170,16 @@
void ImageTransportSurfaceFBO::OnBufferPresented(
const AcceleratedSurfaceMsg_BufferPresented_Params& params) {
context_->share_group()->SetRendererID(params.renderer_id);
- storage_provider_->SwapBuffersAckedByBrowser();
+ 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);
+ }
}
void ImageTransportSurfaceFBO::OnResize(gfx::Size size,
« no previous file with comments | « content/common/gpu/image_transport_surface_fbo_mac.h ('k') | content/common/gpu/image_transport_surface_iosurface_mac.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698