Index: ui/gl/gl_surface.h |
diff --git a/ui/gl/gl_surface.h b/ui/gl/gl_surface.h |
index c218267e01d2ae887da58e4343e46d71c6045848..220bda6806e284b89802834807491d283b62bc38 100644 |
--- a/ui/gl/gl_surface.h |
+++ b/ui/gl/gl_surface.h |
@@ -7,6 +7,7 @@ |
#include <string> |
+#include "base/callback.h" |
#include "base/memory/ref_counted.h" |
#include "build/build_config.h" |
#include "ui/gfx/native_widget_types.h" |
@@ -72,9 +73,28 @@ class GL_EXPORT GLSurface : public base::RefCounted<GLSurface> { |
// FBO. Otherwise returns 0. |
virtual unsigned int GetBackingFrameBufferObject(); |
+ typedef base::Callback<void()> SwapCompletionCallback; |
+ // Swaps front and back buffers. This has no effect for off-screen |
+ // contexts. On some platforms, we want to send SwapBufferAck only after the |
+ // surface is displayed on screen. The callback can be used to delay sending |
+ // SwapBufferAck till that data is available. The callback should be run on |
+ // the calling thread (i.e. same thread SwapBuffersAsync is called) |
+ virtual bool SwapBuffersAsync(const SwapCompletionCallback& callback); |
+ |
// Copy part of the backbuffer to the frontbuffer. |
virtual bool PostSubBuffer(int x, int y, int width, int height); |
+ // Copy part of the backbuffer to the frontbuffer. On some platforms, we want |
+ // to send SwapBufferAck only after the surface is displayed on screen. The |
+ // callback can be used to delay sending SwapBufferAck till that data is |
+ // available. The callback should be run on the calling thread (i.e. same |
+ // thread PostSubBufferAsync is called) |
+ virtual bool PostSubBufferAsync(int x, |
+ int y, |
+ int width, |
+ int height, |
+ const SwapCompletionCallback& callback); |
+ |
// Initialize GL bindings. |
static bool InitializeOneOff(GLImplementation = kGLImplementationNone); |
@@ -173,7 +193,13 @@ class GL_EXPORT GLSurfaceAdapter : public GLSurface { |
bool DeferDraws() override; |
bool IsOffscreen() override; |
bool SwapBuffers() override; |
+ bool SwapBuffersAsync(const SwapCompletionCallback& callback) override; |
bool PostSubBuffer(int x, int y, int width, int height) override; |
+ bool PostSubBufferAsync(int x, |
+ int y, |
+ int width, |
+ int height, |
+ const SwapCompletionCallback& callback) override; |
bool SupportsPostSubBuffer() override; |
gfx::Size GetSize() override; |
void* GetHandle() override; |