namespace content {
// static
-scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::Create(
- const gfx::Size& size,
- unsigned internalformat,
- unsigned usage) {
+void GpuMemoryBufferImpl::Create(const gfx::Size& size,
+ unsigned internalformat,
+ unsigned usage,
+ int client_id,
+ const CreationCallback& callback) {
+ if (GpuMemoryBufferImplIOSurface::IsConfigurationSupported(internalformat,
+ usage)) {
+ GpuMemoryBufferImplIOSurface::Create(
+ size, internalformat, usage, client_id, callback);
+ return;
+ }
+
if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported(
size, internalformat, usage)) {
- scoped_ptr<GpuMemoryBufferImplSharedMemory> buffer(
- new GpuMemoryBufferImplSharedMemory(size, internalformat));
- if (!buffer->Initialize())
- return scoped_ptr<GpuMemoryBufferImpl>();
-
- return buffer.PassAs<GpuMemoryBufferImpl>();
+ GpuMemoryBufferImplSharedMemory::Create(
+ size, internalformat, usage, callback);
+ return;
}
- return scoped_ptr<GpuMemoryBufferImpl>();
+ callback.Run(scoped_ptr<GpuMemoryBufferImpl>());
}
// static
unsigned internalformat,
unsigned usage,
base::ProcessHandle child_process,
+ int child_client_id,
const AllocationCallback& callback) {
+ if (GpuMemoryBufferImplIOSurface::IsConfigurationSupported(internalformat,
+ usage)) {
+ GpuMemoryBufferImplIOSurface::AllocateForChildProcess(
+ size, internalformat, usage, child_client_id, callback);
+ return;
+ }
+
if (GpuMemoryBufferImplSharedMemory::IsConfigurationSupported(
size, internalformat, usage)) {
- GpuMemoryBufferImplSharedMemory::AllocateSharedMemoryForChildProcess(
+ GpuMemoryBufferImplSharedMemory::AllocateForChildProcess(
size, internalformat, child_process, callback);
return;
}
scoped_ptr<GpuMemoryBufferImpl> GpuMemoryBufferImpl::CreateFromHandle(
const gfx::GpuMemoryBufferHandle& handle,
const gfx::Size& size,
- unsigned internalformat) {
+ unsigned internalformat,
+ const DestructionCallback& callback) {
switch (handle.type) {
- case gfx::SHARED_MEMORY_BUFFER: {
- scoped_ptr<GpuMemoryBufferImplSharedMemory> buffer(
- new GpuMemoryBufferImplSharedMemory(size, internalformat));
- if (!buffer->InitializeFromHandle(handle))
- return scoped_ptr<GpuMemoryBufferImpl>();
-
- return buffer.PassAs<GpuMemoryBufferImpl>();
- }
- case gfx::IO_SURFACE_BUFFER: {
- scoped_ptr<GpuMemoryBufferImplIOSurface> buffer(
- new GpuMemoryBufferImplIOSurface(size, internalformat));
- if (!buffer->InitializeFromHandle(handle))
- return scoped_ptr<GpuMemoryBufferImpl>();
-
- return buffer.PassAs<GpuMemoryBufferImpl>();
- }
+ case gfx::SHARED_MEMORY_BUFFER:
+ return GpuMemoryBufferImplSharedMemory::CreateFromHandle(
+ handle, size, internalformat, callback);
+ case gfx::IO_SURFACE_BUFFER:
+ return GpuMemoryBufferImplIOSurface::CreateFromHandle(
+ handle, size, internalformat, callback);
default:
return scoped_ptr<GpuMemoryBufferImpl>();
}