Index: gpu/command_buffer/service/in_process_command_buffer.h |
diff --git a/gpu/command_buffer/service/in_process_command_buffer.h b/gpu/command_buffer/service/in_process_command_buffer.h |
index f1e07910e710088357dd2ab62969d8d01cbeff7e..7fece0eccbbed2b5581d7790b66fdc63a9f6abbb 100644 |
--- a/gpu/command_buffer/service/in_process_command_buffer.h |
+++ b/gpu/command_buffer/service/in_process_command_buffer.h |
@@ -10,7 +10,7 @@ |
#include "base/callback.h" |
#include "base/compiler_specific.h" |
-#include "base/memory/linked_ptr.h" |
+#include "base/containers/scoped_ptr_hash_map.h" |
#include "base/memory/ref_counted.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/memory/weak_ptr.h" |
@@ -52,11 +52,29 @@ class ShaderTranslatorCache; |
} |
class CommandBufferServiceBase; |
-class GpuControlService; |
-class GpuMemoryBufferFactory; |
class GpuScheduler; |
class TransferBufferManagerInterface; |
+// TODO(reveman): Remove this interface when InProcessCommandBuffer doesn't need |
+// a custom factory interface and android_webview implementation of GPU memory |
+// buffers can use the same mechanism for buffer allocation as what's used for |
+// out of process GPU service. |
+class GPU_EXPORT InProcessGpuMemoryBufferFactory { |
+ public: |
+ virtual scoped_ptr<gfx::GpuMemoryBuffer> AllocateGpuMemoryBuffer( |
+ size_t width, |
+ size_t height, |
+ unsigned internalformat, |
+ unsigned usage) = 0; |
+ virtual scoped_refptr<gfx::GLImage> CreateImageForGpuMemoryBuffer( |
+ const gfx::GpuMemoryBufferHandle& handle, |
+ const gfx::Size& size, |
+ unsigned internalformat) = 0; |
+ |
+ protected: |
+ virtual ~InProcessGpuMemoryBufferFactory() {} |
+}; |
+ |
// This class provides a thread-safe interface to the global GPU service (for |
// example GPU thread) when being run in single process mode. |
// However, the behavior for accessing one context (i.e. one instance of this |
@@ -68,7 +86,8 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer, |
explicit InProcessCommandBuffer(const scoped_refptr<Service>& service); |
virtual ~InProcessCommandBuffer(); |
- static void SetGpuMemoryBufferFactory(GpuMemoryBufferFactory* factory); |
+ static void SetGpuMemoryBufferFactory( |
+ InProcessGpuMemoryBufferFactory* factory); |
// If |surface| is not NULL, use it directly; in this case, the command |
// buffer gpu thread must be the same as the client thread. Otherwise create |
@@ -109,7 +128,7 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer, |
virtual void RetireSyncPoint(uint32 sync_point) OVERRIDE; |
virtual void SignalSyncPoint(uint32 sync_point, |
const base::Closure& callback) OVERRIDE; |
- virtual void SignalQuery(uint32 query, |
+ virtual void SignalQuery(uint32 query_id, |
const base::Closure& callback) OVERRIDE; |
virtual void SetSurfaceVisible(bool visible) OVERRIDE; |
virtual void Echo(const base::Closure& callback) OVERRIDE; |
@@ -179,7 +198,15 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer, |
void RetireSyncPointOnGpuThread(uint32 sync_point); |
void SignalSyncPointOnGpuThread(uint32 sync_point, |
const base::Closure& callback); |
- void DestroyTransferBufferOnGputhread(int32 id); |
+ void SignalQueryOnGpuThread(unsigned query_id, const base::Closure& callback); |
+ void DestroyTransferBufferOnGpuThread(int32 id); |
+ void RegisterGpuMemoryBufferOnGpuThread( |
+ int32 id, |
+ const gfx::GpuMemoryBufferHandle& handle, |
+ size_t width, |
+ size_t height, |
+ unsigned internalformat); |
+ void UnregisterGpuMemoryBufferOnGpuThread(int32 id); |
// Callbacks: |
void OnContextLost(); |
@@ -204,7 +231,8 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer, |
State last_state_; |
int32 last_put_offset_; |
gpu::Capabilities capabilities_; |
- typedef std::map<int32, linked_ptr<gfx::GpuMemoryBuffer> > GpuMemoryBufferMap; |
+ typedef base::ScopedPtrHashMap<int32, gfx::GpuMemoryBuffer> |
+ GpuMemoryBufferMap; |
GpuMemoryBufferMap gpu_memory_buffers_; |
// Accessed on both threads: |
@@ -214,7 +242,6 @@ class GPU_EXPORT InProcessCommandBuffer : public CommandBuffer, |
scoped_refptr<Service> service_; |
State state_after_last_flush_; |
base::Lock state_after_last_flush_lock_; |
- scoped_ptr<GpuControlService> gpu_control_; |
scoped_refptr<gfx::GLShareGroup> gl_share_group_; |
#if defined(OS_ANDROID) |