Index: content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc |
diff --git a/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc b/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc |
index b3471d1d5a5cea9dc8ccd391b8d31b54e8a2b674..e3f009a795bec15dbda4fc49e7ce6705330c47a9 100644 |
--- a/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc |
+++ b/content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc |
@@ -7,6 +7,7 @@ |
#include "base/logging.h" |
#include "base/trace_event/trace_event.h" |
#include "content/common/android/surface_texture_manager.h" |
+#include "content/common/gpu/gpu_memory_buffer_factory_surface_texture.h" |
#include "ui/gfx/buffer_format_util.h" |
#include "ui/gl/gl_bindings.h" |
@@ -37,6 +38,10 @@ int WindowFormat(gfx::BufferFormat format) { |
return 0; |
} |
+void FreeSurfaceTextureForTesting(gfx::GpuMemoryBufferId id) { |
+ SurfaceTextureManager::GetInstance()->UnregisterSurfaceTexture(id.id, 0); |
+} |
+ |
} // namespace |
GpuMemoryBufferImplSurfaceTexture::GpuMemoryBufferImplSurfaceTexture( |
@@ -54,7 +59,7 @@ GpuMemoryBufferImplSurfaceTexture::~GpuMemoryBufferImplSurfaceTexture() { |
} |
// static |
-scoped_ptr<GpuMemoryBufferImpl> |
+scoped_ptr<GpuMemoryBufferImplSurfaceTexture> |
GpuMemoryBufferImplSurfaceTexture::CreateFromHandle( |
const gfx::GpuMemoryBufferHandle& handle, |
const gfx::Size& size, |
@@ -64,14 +69,38 @@ GpuMemoryBufferImplSurfaceTexture::CreateFromHandle( |
SurfaceTextureManager::GetInstance() |
->AcquireNativeWidgetForSurfaceTexture(handle.id.id); |
if (!native_window) |
- return scoped_ptr<GpuMemoryBufferImpl>(); |
+ return nullptr; |
ANativeWindow_setBuffersGeometry( |
native_window, size.width(), size.height(), WindowFormat(format)); |
- return make_scoped_ptr<GpuMemoryBufferImpl>( |
- new GpuMemoryBufferImplSurfaceTexture( |
- handle.id, size, format, callback, native_window)); |
+ return make_scoped_ptr(new GpuMemoryBufferImplSurfaceTexture( |
+ handle.id, size, format, callback, native_window)); |
+} |
+ |
+// static |
+bool GpuMemoryBufferImplSurfaceTexture::IsConfigurationSupported( |
+ gfx::BufferFormat format, |
+ gfx::BufferUsage usage) { |
+ return GpuMemoryBufferFactorySurfaceTexture:: |
+ IsGpuMemoryBufferConfigurationSupported(format, usage); |
+} |
+ |
+// static |
+base::Closure GpuMemoryBufferImplSurfaceTexture::AllocateForTesting( |
+ const gfx::Size& size, |
+ gfx::BufferFormat format, |
+ gfx::BufferUsage usage, |
+ gfx::GpuMemoryBufferHandle* handle) { |
+ scoped_refptr<gfx::SurfaceTexture> surface_texture = |
+ gfx::SurfaceTexture::Create(0); |
+ DCHECK(surface_texture); |
+ gfx::GpuMemoryBufferId kBufferId(1); |
+ SurfaceTextureManager::GetInstance()->RegisterSurfaceTexture( |
+ kBufferId.id, 0, surface_texture.get()); |
+ handle->type = gfx::SURFACE_TEXTURE_BUFFER; |
+ handle->id = kBufferId; |
+ return base::Bind(&FreeSurfaceTextureForTesting, kBufferId); |
} |
bool GpuMemoryBufferImplSurfaceTexture::Map(void** data) { |