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

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

Issue 516643002: Fix assorted issues with remote CoreAnimation (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@clean_up_accel_layers
Patch Set: Incorporate review feedback 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 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,
« 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