Index: content/browser/gpu/browser_gpu_channel_host_factory.cc |
diff --git a/content/browser/gpu/browser_gpu_channel_host_factory.cc b/content/browser/gpu/browser_gpu_channel_host_factory.cc |
index 7bc6fca71e6ea30a2cef3cb891b3dd3a7977a142..a60eb1e3f0f3147fb831aa1fee2dcf53173d8d1c 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,28 @@ GpuChannelHost* BrowserGpuChannelHostFactory::EstablishGpuChannelSync( |
return gpu_channel_.get(); |
} |
+scoped_ptr<gfx::GpuMemoryBuffer> |
+ BrowserGpuChannelHostFactory::AllocateGpuMemoryBuffer( |
+ size_t width, |
+ size_t height, |
+ unsigned internalformat) { |
+ DCHECK(GpuMemoryBufferImpl::IsFormatValid(internalformat)); |
+ if (!GpuMemoryBufferImpl::IsFormatValid(internalformat)) |
+ return scoped_ptr<gfx::GpuMemoryBuffer>(); |
piman
2013/10/21 21:57:00
nit: either DCHECK or test, but not both.
If the c
reveman
2013/10/22 16:26:11
Removed the DCHECK.
|
+ |
+ 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, |