diff options
Diffstat (limited to 'content/browser/gpu/browser_gpu_channel_host_factory.cc')
-rw-r--r-- | content/browser/gpu/browser_gpu_channel_host_factory.cc | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.cc b/content/browser/gpu/browser_gpu_channel_host_factory.cc index 7bc6fca..2f04189 100644 --- a/content/browser/gpu/browser_gpu_channel_host_factory.cc +++ b/content/browser/gpu/browser_gpu_channel_host_factory.cc @@ -9,8 +9,9 @@ #include "content/browser/gpu/gpu_data_manager_impl.h" #include "content/browser/gpu/gpu_process_host.h" #include "content/browser/gpu/gpu_surface_tracker.h" -#include "content/common/gpu/gpu_messages.h" #include "content/common/child_process_host_impl.h" +#include "content/common/gpu/client/gpu_memory_buffer_impl.h" +#include "content/common/gpu/gpu_messages.h" #include "content/public/browser/browser_thread.h" #include "content/public/common/content_client.h" #include "ipc/ipc_forwarding_message_filter.h" @@ -284,6 +285,27 @@ GpuChannelHost* BrowserGpuChannelHostFactory::EstablishGpuChannelSync( return gpu_channel_.get(); } +scoped_ptr<gfx::GpuMemoryBuffer> + BrowserGpuChannelHostFactory::AllocateGpuMemoryBuffer( + size_t width, + size_t height, + unsigned internalformat) { + if (!GpuMemoryBufferImpl::IsFormatValid(internalformat)) + return scoped_ptr<gfx::GpuMemoryBuffer>(); + + size_t size = width * height * + GpuMemoryBufferImpl::BytesPerPixel(internalformat); + scoped_ptr<base::SharedMemory> shm(new base::SharedMemory()); + if (!shm->CreateAnonymous(size)) + return scoped_ptr<gfx::GpuMemoryBuffer>(); + + return make_scoped_ptr<gfx::GpuMemoryBuffer>( + new GpuMemoryBufferImpl(shm.Pass(), + width, + height, + internalformat)); +} + // static void BrowserGpuChannelHostFactory::AddFilterOnIO( int host_id, |