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

Unified Diff: android_webview/browser/gpu_memory_buffer_factory_impl.cc

Issue 331723003: gpu: Remove Create/DeleteImage IPC by adding an X11_PIXMAP_BUFFER GpuMemoryBuffer type. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 5 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: android_webview/browser/gpu_memory_buffer_factory_impl.cc
diff --git a/android_webview/browser/gpu_memory_buffer_factory_impl.cc b/android_webview/browser/gpu_memory_buffer_factory_impl.cc
index 8be58c5cdc08aee26eb043dc785d8eda35bafb55..14d1ae47fc25bc0b77fb5d412d20f0d50e6e2b84 100644
--- a/android_webview/browser/gpu_memory_buffer_factory_impl.cc
+++ b/android_webview/browser/gpu_memory_buffer_factory_impl.cc
@@ -9,6 +9,7 @@
#include "ui/gfx/gpu_memory_buffer.h"
#include "ui/gfx/size.h"
#include "ui/gl/gl_bindings.h"
+#include "ui/gl/gl_image_android_native_buffer.h"
namespace android_webview {
@@ -19,10 +20,8 @@ AwDrawGLFunctionTable* g_gl_draw_functions = NULL;
class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
public:
- GpuMemoryBufferImpl(long buffer_id, gfx::Size size)
- : buffer_id_(buffer_id),
- size_(size),
- mapped_(false) {
+ GpuMemoryBufferImpl(long buffer_id, const gfx::Size& size)
+ : buffer_id_(buffer_id), size_(size), mapped_(false) {
DCHECK(buffer_id_);
}
@@ -50,7 +49,7 @@ class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE {
gfx::GpuMemoryBufferHandle handle;
handle.type = gfx::ANDROID_NATIVE_BUFFER;
- handle.native_buffer = g_gl_draw_functions->get_native_buffer(buffer_id_);
+ handle.buffer_id = buffer_id_;
return handle;
}
@@ -70,20 +69,41 @@ GpuMemoryBufferFactoryImpl::GpuMemoryBufferFactoryImpl() {
GpuMemoryBufferFactoryImpl::~GpuMemoryBufferFactoryImpl() {
}
-gfx::GpuMemoryBuffer* GpuMemoryBufferFactoryImpl::CreateGpuMemoryBuffer(
- size_t width,
- size_t height,
- unsigned internalformat,
- unsigned usage) {
+scoped_ptr<gfx::GpuMemoryBuffer>
+GpuMemoryBufferFactoryImpl::AllocateGpuMemoryBuffer(size_t width,
+ size_t height,
+ unsigned internalformat,
+ unsigned usage) {
// For Android WebView we assume the |internalformat| will always be
// GL_RGBA8_OES.
CHECK_EQ(static_cast<GLenum>(GL_RGBA8_OES), internalformat);
CHECK(g_gl_draw_functions);
long buffer_id = g_gl_draw_functions->create_graphic_buffer(width, height);
if (!buffer_id)
- return NULL;
+ return scoped_ptr<gfx::GpuMemoryBuffer>();
- return new GpuMemoryBufferImpl(buffer_id, gfx::Size(width, height));
+ return make_scoped_ptr(
+ new GpuMemoryBufferImpl(buffer_id, gfx::Size(width, height)))
+ .PassAs<gfx::GpuMemoryBuffer>();
+}
+
+scoped_refptr<gfx::GLImage>
+GpuMemoryBufferFactoryImpl::CreateImageForGpuMemoryBuffer(
+ const gfx::GpuMemoryBufferHandle& handle,
+ const gfx::Size& size,
+ unsigned internalformat) {
+ DCHECK_EQ(gfx::ANDROID_NATIVE_BUFFER, handle.type);
+
+ EGLClientBuffer native_buffer =
+ g_gl_draw_functions->get_native_buffer(handle.buffer_id);
+ DCHECK(native_buffer);
+
+ scoped_refptr<gfx::GLImageAndroidNativeBuffer> image(
+ new gfx::GLImageAndroidNativeBuffer(size));
+ if (!image->Initialize(native_buffer))
+ return scoped_refptr<gfx::GLImage>();
+
+ return image;
}
// static
« no previous file with comments | « android_webview/browser/gpu_memory_buffer_factory_impl.h ('k') | content/browser/gpu/browser_gpu_channel_host_factory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698