| Index: content/common/gpu/image_transport_surface_mac.h | 
| diff --git a/content/common/gpu/image_transport_surface_mac.h b/content/common/gpu/image_transport_surface_mac.h | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..78c68ed06226a3e9ccda2c73fd620d4fe2854350 | 
| --- /dev/null | 
| +++ b/content/common/gpu/image_transport_surface_mac.h | 
| @@ -0,0 +1,114 @@ | 
| +// Copyright 2014 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +#ifndef CONTENT_COMMON_GPU_IMAGE_TRANSPORT_SURFACE_MAC_H_ | 
| +#define CONTENT_COMMON_GPU_IMAGE_TRANSPORT_SURFACE_MAC_H_ | 
| + | 
| +#include "base/mac/scoped_cftyperef.h" | 
| +#include "base/memory/scoped_ptr.h" | 
| +#include "content/common/gpu/gpu_command_buffer_stub.h" | 
| +#include "content/common/gpu/image_transport_surface.h" | 
| +#include "ui/gl/gl_bindings.h" | 
| + | 
| +struct GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params; | 
| +struct GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params; | 
| + | 
| +namespace content { | 
| + | 
| +// We are backed by an offscreen surface for the purposes of creating | 
| +// a context, but use FBOs to render to texture backed IOSurface | 
| +class ImageTransportSurfaceFBO | 
| +    : public gfx::GLSurface, | 
| +      public ImageTransportSurface, | 
| +      public GpuCommandBufferStub::DestructionObserver { | 
| + public: | 
| +  class StorageProvider { | 
| +   public: | 
| +    virtual ~StorageProvider() {} | 
| +    virtual gfx::Size GetRoundedSize(gfx::Size size) = 0; | 
| +    virtual bool AllocateColorBufferStorage( | 
| +        CGLContextObj context, gfx::Size size) = 0; | 
| +    virtual void FreeColorBufferStorage() = 0; | 
| +    virtual void PopulateSwapBuffersStorageParams( | 
| +        GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params* params) = 0; | 
| +    virtual void PopulateSubBufferStorageParams( | 
| +        GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params* params) = 0; | 
| +  }; | 
| + | 
| +  ImageTransportSurfaceFBO(StorageProvider* storage_provider, | 
| +                           GpuChannelManager* manager, | 
| +                           GpuCommandBufferStub* stub, | 
| +                           gfx::PluginWindowHandle handle); | 
| + | 
| +  // GLSurface implementation | 
| +  virtual bool Initialize() OVERRIDE; | 
| +  virtual void Destroy() OVERRIDE; | 
| +  virtual bool DeferDraws() OVERRIDE; | 
| +  virtual bool IsOffscreen() OVERRIDE; | 
| +  virtual bool SwapBuffers() OVERRIDE; | 
| +  virtual bool PostSubBuffer(int x, int y, int width, int height) OVERRIDE; | 
| +  virtual bool SupportsPostSubBuffer() OVERRIDE; | 
| +  virtual gfx::Size GetSize() OVERRIDE; | 
| +  virtual void* GetHandle() OVERRIDE; | 
| +  virtual bool OnMakeCurrent(gfx::GLContext* context) OVERRIDE; | 
| +  virtual unsigned int GetBackingFrameBufferObject() OVERRIDE; | 
| +  virtual bool SetBackbufferAllocation(bool allocated) OVERRIDE; | 
| +  virtual void SetFrontbufferAllocation(bool allocated) OVERRIDE; | 
| + | 
| + protected: | 
| +  // ImageTransportSurface implementation | 
| +  virtual void OnBufferPresented( | 
| +      const AcceleratedSurfaceMsg_BufferPresented_Params& params) OVERRIDE; | 
| +  virtual void OnResize(gfx::Size size, float scale_factor) OVERRIDE; | 
| +  virtual void SetLatencyInfo( | 
| +      const std::vector<ui::LatencyInfo>&) OVERRIDE; | 
| +  virtual void WakeUpGpu() OVERRIDE; | 
| + | 
| +  // GpuCommandBufferStub::DestructionObserver implementation. | 
| +  virtual void OnWillDestroyStub() OVERRIDE; | 
| + | 
| + private: | 
| +  virtual ~ImageTransportSurfaceFBO() OVERRIDE; | 
| + | 
| +  void AdjustBufferAllocation(); | 
| +  void DestroyFramebuffer(); | 
| +  void CreateFramebuffer(); | 
| + | 
| +  scoped_ptr<StorageProvider> storage_provider_; | 
| + | 
| +  // Tracks the current buffer allocation state. | 
| +  bool backbuffer_suggested_allocation_; | 
| +  bool frontbuffer_suggested_allocation_; | 
| + | 
| +  uint32 fbo_id_; | 
| +  GLuint texture_id_; | 
| +  GLuint depth_stencil_renderbuffer_id_; | 
| +  bool has_complete_framebuffer_; | 
| + | 
| +  // Weak pointer to the context that this was last made current to. | 
| +  gfx::GLContext* context_; | 
| + | 
| +  gfx::Size size_; | 
| +  gfx::Size rounded_size_; | 
| +  float scale_factor_; | 
| + | 
| +  // Whether or not we've successfully made the surface current once. | 
| +  bool made_current_; | 
| + | 
| +  // Whether a SwapBuffers is pending. | 
| +  bool is_swap_buffers_pending_; | 
| + | 
| +  // Whether we unscheduled command buffer because of pending SwapBuffers. | 
| +  bool did_unschedule_; | 
| + | 
| +  std::vector<ui::LatencyInfo> latency_info_; | 
| + | 
| +  scoped_ptr<ImageTransportHelper> helper_; | 
| + | 
| +  DISALLOW_COPY_AND_ASSIGN(ImageTransportSurfaceFBO); | 
| +}; | 
| + | 
| +}  // namespace content | 
| + | 
| +#endif  //  CONTENT_COMMON_GPU_IMAGE_TRANSPORT_SURFACE_MAC_H_ | 
|  |