Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(587)

Unified Diff: content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.cc

Issue 634643002: content: Out-of-process GPU service support for SurfaceTexture backed GpuMemoryBuffers. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: one last build fix Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 872fad108bd65f49f9ba28571e845333763e2ec4..52e0362913300b61ee5545f032cd84e3ff5ba9e5 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
@@ -4,21 +4,51 @@
#include "content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.h"
+#include "base/atomic_sequence_num.h"
+#include "base/bind.h"
#include "base/debug/trace_event.h"
#include "base/logging.h"
-#include "content/common/android/surface_texture_lookup.h"
+#include "content/common/android/surface_texture_manager.h"
+#include "content/common/gpu/client/gpu_memory_buffer_factory_host.h"
#include "ui/gl/gl_bindings.h"
namespace content {
+namespace {
+
+base::StaticAtomicSequenceNumber g_next_buffer_id;
+
+void Noop() {
+}
+
+void GpuMemoryBufferCreated(
+ const gfx::Size& size,
+ unsigned internalformat,
+ const GpuMemoryBufferImpl::CreationCallback& callback,
+ const gfx::GpuMemoryBufferHandle& handle) {
+ DCHECK_EQ(gfx::SURFACE_TEXTURE_BUFFER, handle.type);
+
+ callback.Run(GpuMemoryBufferImplSurfaceTexture::CreateFromHandle(
+ handle, size, internalformat, base::Bind(&Noop)));
+}
+
+void GpuMemoryBufferCreatedForChildProcess(
+ const GpuMemoryBufferImpl::AllocationCallback& callback,
+ const gfx::GpuMemoryBufferHandle& handle) {
+ DCHECK_EQ(gfx::SURFACE_TEXTURE_BUFFER, handle.type);
+
+ callback.Run(handle);
+}
+
+} // namespace
GpuMemoryBufferImplSurfaceTexture::GpuMemoryBufferImplSurfaceTexture(
const gfx::Size& size,
unsigned internalformat,
const DestructionCallback& callback,
- const gfx::SurfaceTextureId& surface_texture_id,
+ const gfx::GpuMemoryBufferId& id,
ANativeWindow* native_window)
: GpuMemoryBufferImpl(size, internalformat, callback),
- surface_texture_id_(surface_texture_id),
+ id_(id),
native_window_(native_window),
stride_(0u) {
}
@@ -28,6 +58,44 @@ GpuMemoryBufferImplSurfaceTexture::~GpuMemoryBufferImplSurfaceTexture() {
}
// static
+void GpuMemoryBufferImplSurfaceTexture::Create(
+ const gfx::Size& size,
+ unsigned internalformat,
+ unsigned usage,
+ int client_id,
+ const CreationCallback& callback) {
+ gfx::GpuMemoryBufferHandle handle;
+ handle.global_id.primary_id = g_next_buffer_id.GetNext();
+ handle.global_id.secondary_id = client_id;
+ handle.type = gfx::SURFACE_TEXTURE_BUFFER;
+ GpuMemoryBufferFactoryHost::GetInstance()->CreateGpuMemoryBuffer(
+ handle,
+ size,
+ internalformat,
+ usage,
+ base::Bind(&GpuMemoryBufferCreated, size, internalformat, callback));
+}
+
+// static
+void GpuMemoryBufferImplSurfaceTexture::AllocateForChildProcess(
+ const gfx::Size& size,
+ unsigned internalformat,
+ unsigned usage,
+ int child_client_id,
+ const AllocationCallback& callback) {
+ gfx::GpuMemoryBufferHandle handle;
+ handle.global_id.primary_id = g_next_buffer_id.GetNext();
+ handle.global_id.secondary_id = child_client_id;
+ handle.type = gfx::SURFACE_TEXTURE_BUFFER;
+ GpuMemoryBufferFactoryHost::GetInstance()->CreateGpuMemoryBuffer(
+ handle,
+ size,
+ internalformat,
+ usage,
+ base::Bind(&GpuMemoryBufferCreatedForChildProcess, callback));
+}
+
+// static
scoped_ptr<GpuMemoryBufferImpl>
GpuMemoryBufferImplSurfaceTexture::CreateFromHandle(
const gfx::GpuMemoryBufferHandle& handle,
@@ -37,9 +105,8 @@ GpuMemoryBufferImplSurfaceTexture::CreateFromHandle(
DCHECK(IsFormatSupported(internalformat));
ANativeWindow* native_window =
- SurfaceTextureLookup::GetInstance()->AcquireNativeWidget(
- handle.surface_texture_id.primary_id,
- handle.surface_texture_id.secondary_id);
+ SurfaceTextureManager::GetInstance()->AcquireNativeWidget(
+ handle.global_id.primary_id, handle.global_id.secondary_id);
if (!native_window)
return scoped_ptr<GpuMemoryBufferImpl>();
@@ -47,11 +114,8 @@ GpuMemoryBufferImplSurfaceTexture::CreateFromHandle(
native_window, size.width(), size.height(), WindowFormat(internalformat));
return make_scoped_ptr<GpuMemoryBufferImpl>(
- new GpuMemoryBufferImplSurfaceTexture(size,
- internalformat,
- callback,
- handle.surface_texture_id,
- native_window));
+ new GpuMemoryBufferImplSurfaceTexture(
+ size, internalformat, callback, handle.global_id, native_window));
}
// static
@@ -125,7 +189,7 @@ gfx::GpuMemoryBufferHandle GpuMemoryBufferImplSurfaceTexture::GetHandle()
const {
gfx::GpuMemoryBufferHandle handle;
handle.type = gfx::SURFACE_TEXTURE_BUFFER;
- handle.surface_texture_id = surface_texture_id_;
+ handle.global_id = id_;
return handle;
}
« no previous file with comments | « content/common/gpu/client/gpu_memory_buffer_impl_surface_texture.h ('k') | content/common/gpu/gpu_command_buffer_stub.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698