Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / content / common / gpu / client / gpu_channel_host.h
index ac9d120..ebbbdac 100644 (file)
@@ -47,6 +47,10 @@ class VideoDecodeAccelerator;
 class VideoEncodeAccelerator;
 }
 
+namespace gpu {
+class GpuMemoryBufferManager;
+}
+
 namespace content {
 class CommandBufferProxyImpl;
 class GpuChannelHost;
@@ -71,11 +75,6 @@ class CONTENT_EXPORT GpuChannelHostFactory {
       int32 surface_id,
       const GPUCreateCommandBufferConfig& init_params,
       int32 route_id) = 0;
-  virtual scoped_ptr<gfx::GpuMemoryBuffer> AllocateGpuMemoryBuffer(
-      size_t width,
-      size_t height,
-      unsigned internalformat,
-      unsigned usage) = 0;
 };
 
 // Encapsulates an IPC channel between the client and one GPU process.
@@ -90,11 +89,8 @@ class GpuChannelHost : public IPC::Sender,
       GpuChannelHostFactory* factory,
       const gpu::GPUInfo& gpu_info,
       const IPC::ChannelHandle& channel_handle,
-      base::WaitableEvent* shutdown_event);
-
-  // Returns true if |handle| is a valid GpuMemoryBuffer handle that
-  // can be shared to the GPU process.
-  static bool IsValidGpuMemoryBuffer(gfx::GpuMemoryBufferHandle handle);
+      base::WaitableEvent* shutdown_event,
+      gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager);
 
   bool IsLost() const {
     DCHECK(channel_filter_.get());
@@ -105,7 +101,7 @@ class GpuChannelHost : public IPC::Sender,
   const gpu::GPUInfo& gpu_info() const { return gpu_info_; }
 
   // IPC::Sender implementation:
-  virtual bool Send(IPC::Message* msg) OVERRIDE;
+  bool Send(IPC::Message* msg) override;
 
   // Create and connect to a command buffer in the GPU process.
   CommandBufferProxyImpl* CreateViewCommandBuffer(
@@ -140,6 +136,10 @@ class GpuChannelHost : public IPC::Sender,
 
   GpuChannelHostFactory* factory() const { return factory_; }
 
+  gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager() const {
+    return gpu_memory_buffer_manager_;
+  }
+
   // Returns a handle to the shared memory that can be sent via IPC to the
   // GPU process. The caller is responsible for ensuring it is closed. Returns
   // an invalid handle on failure.
@@ -153,10 +153,11 @@ class GpuChannelHost : public IPC::Sender,
   // IPC to the GPU process. The caller is responsible for ensuring it is
   // closed. Returns an invalid handle on failure.
   gfx::GpuMemoryBufferHandle ShareGpuMemoryBufferToGpuProcess(
-      gfx::GpuMemoryBufferHandle source_handle);
+      const gfx::GpuMemoryBufferHandle& source_handle,
+      bool* requires_sync_point);
 
-  // Reserve one unused gpu memory buffer ID.
-  int32 ReserveGpuMemoryBufferId();
+  // Reserve one unused image ID.
+  int32 ReserveImageId();
 
   // Generate a route ID guaranteed to be unique for this channel.
   int32 GenerateRouteID();
@@ -164,8 +165,9 @@ class GpuChannelHost : public IPC::Sender,
  private:
   friend class base::RefCountedThreadSafe<GpuChannelHost>;
   GpuChannelHost(GpuChannelHostFactory* factory,
-                 const gpu::GPUInfo& gpu_info);
-  virtual ~GpuChannelHost();
+                 const gpu::GPUInfo& gpu_info,
+                 gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager);
+  ~GpuChannelHost() override;
   void Connect(const IPC::ChannelHandle& channel_handle,
                base::WaitableEvent* shutdown_event);
 
@@ -185,8 +187,8 @@ class GpuChannelHost : public IPC::Sender,
 
     // IPC::MessageFilter implementation
     // (called on the IO thread):
-    virtual bool OnMessageReceived(const IPC::Message& msg) OVERRIDE;
-    virtual void OnChannelError() OVERRIDE;
+    bool OnMessageReceived(const IPC::Message& msg) override;
+    void OnChannelError() override;
 
     // The following methods can be called on any thread.
 
@@ -194,7 +196,7 @@ class GpuChannelHost : public IPC::Sender,
     bool IsLost() const;
 
    private:
-    virtual ~MessageFilter();
+    ~MessageFilter() override;
 
     // Threading notes: |listeners_| is only accessed on the IO thread. Every
     // other field is protected by |lock_|.
@@ -211,7 +213,7 @@ class GpuChannelHost : public IPC::Sender,
   // Threading notes: all fields are constant during the lifetime of |this|
   // except:
   // - |next_transfer_buffer_id_|, atomic type
-  // - |next_gpu_memory_buffer_id_|, atomic type
+  // - |next_image_id_|, atomic type
   // - |next_route_id_|, atomic type
   // - |proxies_|, protected by |context_lock_|
   GpuChannelHostFactory* const factory_;
@@ -221,14 +223,16 @@ class GpuChannelHost : public IPC::Sender,
   scoped_ptr<IPC::SyncChannel> channel_;
   scoped_refptr<MessageFilter> channel_filter_;
 
+  gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager_;
+
   // A filter for sending messages from thread other than the main thread.
   scoped_refptr<IPC::SyncMessageFilter> sync_filter_;
 
   // Transfer buffer IDs are allocated in sequence.
   base::AtomicSequenceNumber next_transfer_buffer_id_;
 
-  // Gpu memory buffer IDs are allocated in sequence.
-  base::AtomicSequenceNumber next_gpu_memory_buffer_id_;
+  // Image IDs are allocated in sequence.
+  base::AtomicSequenceNumber next_image_id_;
 
   // Route IDs are allocated in sequence.
   base::AtomicSequenceNumber next_route_id_;