Index: ui/gl/gl_surface_ozone.cc |
diff --git a/ui/gl/gl_surface_ozone.cc b/ui/gl/gl_surface_ozone.cc |
index 7dac123f0d1527cb61fdbaf8986ef12fa4f3ce48..c8758713239a93138b7f8da2676dc5c25ed3d73b 100644 |
--- a/ui/gl/gl_surface_ozone.cc |
+++ b/ui/gl/gl_surface_ozone.cc |
@@ -56,11 +56,12 @@ class GL_EXPORT GLSurfaceOzoneEGL : public NativeViewGLSurfaceEGL { |
return NativeViewGLSurfaceEGL::Resize(size); |
} |
- bool SwapBuffers() override { |
- if (!NativeViewGLSurfaceEGL::SwapBuffers()) |
- return false; |
+ gfx::SwapResult SwapBuffers() override { |
+ if (NativeViewGLSurfaceEGL::SwapBuffers() == gfx::SwapResult::SWAP_FAILED) |
+ return gfx::SwapResult::SWAP_FAILED; |
- return ozone_surface_->OnSwapBuffers(); |
+ return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK |
+ : gfx::SwapResult::SWAP_FAILED; |
} |
bool ScheduleOverlayPlane(int z_order, |
OverlayTransform transform, |
@@ -142,14 +143,14 @@ class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL { |
return SurfacelessEGL::Resize(size); |
} |
- bool SwapBuffers() override { |
+ gfx::SwapResult SwapBuffers() override { |
glFlush(); |
// TODO: the following should be replaced by a per surface flush as it gets |
// implemented in GL drivers. |
if (has_implicit_external_sync_) { |
EGLSyncKHR fence = InsertFence(); |
if (!fence) |
- return false; |
+ return gfx::SwapResult::SWAP_FAILED; |
EGLDisplay display = GetDisplay(); |
WaitForFence(display, fence); |
@@ -161,7 +162,8 @@ class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL { |
unsubmitted_frames_.back()->ScheduleOverlayPlanes(widget_); |
unsubmitted_frames_.back()->overlays.clear(); |
- return ozone_surface_->OnSwapBuffers(); |
+ return ozone_surface_->OnSwapBuffers() ? gfx::SwapResult::SWAP_ACK |
+ : gfx::SwapResult::SWAP_FAILED; |
} |
bool ScheduleOverlayPlane(int z_order, |
OverlayTransform transform, |
@@ -175,10 +177,9 @@ class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL { |
bool IsOffscreen() override { return false; } |
VSyncProvider* GetVSyncProvider() override { return vsync_provider_.get(); } |
bool SupportsPostSubBuffer() override { return true; } |
- bool PostSubBuffer(int x, int y, int width, int height) override { |
+ gfx::SwapResult PostSubBuffer(int x, int y, int width, int height) override { |
// The actual sub buffer handling is handled at higher layers. |
- SwapBuffers(); |
- return true; |
+ return SwapBuffers(); |
} |
bool SwapBuffersAsync(const SwapCompletionCallback& callback) override { |
// If last swap failed, don't try to schedule new ones. |
@@ -187,7 +188,7 @@ class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL { |
glFlush(); |
- base::Closure surface_swap_callback = |
+ SwapCompletionCallback surface_swap_callback = |
base::Bind(&GLSurfaceOzoneSurfaceless::SwapCompleted, |
weak_factory_.GetWeakPtr(), callback); |
@@ -298,8 +299,9 @@ class GL_EXPORT GLSurfaceOzoneSurfaceless : public SurfacelessEGL { |
SubmitFrame(); |
} |
- void SwapCompleted(const SwapCompletionCallback& callback) { |
- callback.Run(); |
+ void SwapCompleted(const SwapCompletionCallback& callback, |
+ gfx::SwapResult result) { |
+ callback.Run(result); |
swap_buffers_pending_ = false; |
SubmitFrame(); |
@@ -358,16 +360,17 @@ class GL_EXPORT GLSurfaceOzoneSurfacelessSurfaceImpl |
bool SupportsPostSubBuffer() override { return false; } |
- bool SwapBuffers() override { |
+ gfx::SwapResult SwapBuffers() override { |
if (!images_[current_surface_]->ScheduleOverlayPlane( |
widget_, 0, OverlayTransform::OVERLAY_TRANSFORM_NONE, |
gfx::Rect(GetSize()), gfx::RectF(1, 1))) |
- return false; |
- if (!GLSurfaceOzoneSurfaceless::SwapBuffers()) |
- return false; |
+ return gfx::SwapResult::SWAP_FAILED; |
+ if (GLSurfaceOzoneSurfaceless::SwapBuffers() == |
+ gfx::SwapResult::SWAP_FAILED) |
+ return gfx::SwapResult::SWAP_FAILED; |
current_surface_ ^= 1; |
BindFramebuffer(); |
- return true; |
+ return gfx::SwapResult::SWAP_ACK; |
} |
bool SwapBuffersAsync(const SwapCompletionCallback& callback) override { |