class VideoEncodeAccelerator;
}
+namespace gpu {
+class GpuMemoryBufferManager;
+}
+
namespace content {
class CommandBufferProxyImpl;
class GpuChannelHost;
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.
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());
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(
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.
// 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();
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);
// 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.
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_|.
// 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_;
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_;