Index: content/common/gpu/image_transport_surface.h |
=================================================================== |
--- content/common/gpu/image_transport_surface.h (revision 108480) |
+++ content/common/gpu/image_transport_surface.h (working copy) |
@@ -8,9 +8,12 @@ |
#if defined(ENABLE_GPU) |
+#include "base/callback.h" |
#include "base/memory/ref_counted.h" |
+#include "base/memory/scoped_ptr.h" |
#include "ipc/ipc_channel.h" |
#include "ipc/ipc_message.h" |
+#include "ui/gfx/gl/gl_surface.h" |
#include "ui/gfx/size.h" |
#include "ui/gfx/native_widget_types.h" |
#include "ui/gfx/surface/transport_dib.h" |
@@ -48,9 +51,13 @@ |
class ImageTransportSurface { |
public: |
+ ImageTransportSurface(); |
+ virtual ~ImageTransportSurface(); |
+ |
virtual void OnNewSurfaceACK( |
uint64 surface_id, TransportDIB::Handle surface_handle) = 0; |
virtual void OnBuffersSwappedACK() = 0; |
+ virtual void OnResizeViewACK() = 0; |
virtual void OnResize(gfx::Size size) = 0; |
// Creates the appropriate surface depending on the GL implementation. |
@@ -60,6 +67,8 @@ |
int32 renderer_id, |
int32 command_buffer_id, |
gfx::PluginWindowHandle handle); |
+ private: |
+ DISALLOW_COPY_AND_ASSIGN(ImageTransportSurface); |
}; |
class ImageTransportHelper : public IPC::Channel::Listener { |
@@ -87,10 +96,13 @@ |
GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params); |
void SendAcceleratedSurfaceRelease( |
GpuHostMsg_AcceleratedSurfaceRelease_Params params); |
+ void SendResizeView(const gfx::Size& size); |
// Whether or not we should execute more commands. |
void SetScheduled(bool is_scheduled); |
+ void DeferToFence(base::Closure task); |
+ |
// Make the surface's context current. |
bool MakeCurrent(); |
@@ -101,10 +113,14 @@ |
// IPC::Message handlers. |
void OnNewSurfaceACK(uint64 surface_id, TransportDIB::Handle surface_handle); |
void OnBuffersSwappedACK(); |
+ void OnResizeViewACK(); |
// Backbuffer resize callback. |
void Resize(gfx::Size size); |
+ // Set the default swap interval on the surface. |
+ void SetSwapInterval(); |
+ |
// Weak pointers that point to objects that outlive this helper. |
ImageTransportSurface* surface_; |
GpuChannelManager* manager_; |
@@ -118,6 +134,36 @@ |
DISALLOW_COPY_AND_ASSIGN(ImageTransportHelper); |
}; |
+// An implementation of ImageTransportSurface that implements GLSurface through |
+// GLSurfaceAdapter, thereby forwarding GLSurface methods through to it. |
+class PassThroughImageTransportSurface |
+ : public gfx::GLSurfaceAdapter, |
+ public ImageTransportSurface { |
+ public: |
+ PassThroughImageTransportSurface(GpuChannelManager* manager, |
+ int32 render_view_id, |
+ int32 renderer_id, |
+ int32 command_buffer_id, |
+ gfx::GLSurface* surface); |
+ virtual ~PassThroughImageTransportSurface(); |
+ |
+ // GLSurface implementation. |
+ virtual bool Initialize(); |
+ virtual void Destroy(); |
+ |
+ // ImageTransportSurface implementation. |
+ virtual void OnNewSurfaceACK( |
+ uint64 surface_id, TransportDIB::Handle surface_handle) OVERRIDE; |
+ virtual void OnBuffersSwappedACK() OVERRIDE; |
+ virtual void OnResizeViewACK() OVERRIDE; |
+ virtual void OnResize(gfx::Size size) OVERRIDE; |
+ |
+ private: |
+ scoped_ptr<ImageTransportHelper> helper_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PassThroughImageTransportSurface); |
+}; |
+ |
#endif // defined(ENABLE_GPU) |
#endif // CONTENT_COMMON_GPU_IMAGE_TRANSPORT_SURFACE_H_ |