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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "android_webview/browser/gpu_memory_buffer_factory_impl.h" 5 #include "android_webview/browser/gpu_memory_buffer_factory_impl.h"
6 6
7 #include "android_webview/public/browser/draw_gl.h" 7 #include "android_webview/public/browser/draw_gl.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "ui/gfx/gpu_memory_buffer.h" 9 #include "ui/gfx/gpu_memory_buffer.h"
10 #include "ui/gfx/size.h" 10 #include "ui/gfx/size.h"
11 #include "ui/gl/gl_bindings.h" 11 #include "ui/gl/gl_bindings.h"
12 #include "ui/gl/gl_image_android_native_buffer.h"
12 13
13 namespace android_webview { 14 namespace android_webview {
14 15
15 namespace { 16 namespace {
16 17
17 // Provides hardware rendering functions from the Android glue layer. 18 // Provides hardware rendering functions from the Android glue layer.
18 AwDrawGLFunctionTable* g_gl_draw_functions = NULL; 19 AwDrawGLFunctionTable* g_gl_draw_functions = NULL;
19 20
20 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer { 21 class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
21 public: 22 public:
22 GpuMemoryBufferImpl(long buffer_id, gfx::Size size) 23 GpuMemoryBufferImpl(long buffer_id, const gfx::Size& size)
23 : buffer_id_(buffer_id), 24 : buffer_id_(buffer_id), size_(size), mapped_(false) {
24 size_(size),
25 mapped_(false) {
26 DCHECK(buffer_id_); 25 DCHECK(buffer_id_);
27 } 26 }
28 27
29 virtual ~GpuMemoryBufferImpl() { 28 virtual ~GpuMemoryBufferImpl() {
30 g_gl_draw_functions->release_graphic_buffer(buffer_id_); 29 g_gl_draw_functions->release_graphic_buffer(buffer_id_);
31 } 30 }
32 31
33 // Overridden from gfx::GpuMemoryBuffer: 32 // Overridden from gfx::GpuMemoryBuffer:
34 virtual void* Map() OVERRIDE { 33 virtual void* Map() OVERRIDE {
35 void* vaddr = NULL; 34 void* vaddr = NULL;
36 int err = g_gl_draw_functions->map(buffer_id_, MAP_READ_WRITE, &vaddr); 35 int err = g_gl_draw_functions->map(buffer_id_, MAP_READ_WRITE, &vaddr);
37 DCHECK(!err); 36 DCHECK(!err);
38 mapped_ = true; 37 mapped_ = true;
39 return vaddr; 38 return vaddr;
40 } 39 }
41 virtual void Unmap() OVERRIDE { 40 virtual void Unmap() OVERRIDE {
42 int err = g_gl_draw_functions->unmap(buffer_id_); 41 int err = g_gl_draw_functions->unmap(buffer_id_);
43 DCHECK(!err); 42 DCHECK(!err);
44 mapped_ = false; 43 mapped_ = false;
45 } 44 }
46 virtual bool IsMapped() const OVERRIDE { return mapped_; } 45 virtual bool IsMapped() const OVERRIDE { return mapped_; }
47 virtual uint32 GetStride() const OVERRIDE { 46 virtual uint32 GetStride() const OVERRIDE {
48 return g_gl_draw_functions->get_stride(buffer_id_); 47 return g_gl_draw_functions->get_stride(buffer_id_);
49 } 48 }
50 virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE { 49 virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE {
51 gfx::GpuMemoryBufferHandle handle; 50 gfx::GpuMemoryBufferHandle handle;
52 handle.type = gfx::ANDROID_NATIVE_BUFFER; 51 handle.type = gfx::ANDROID_NATIVE_BUFFER;
53 handle.native_buffer = g_gl_draw_functions->get_native_buffer(buffer_id_); 52 handle.buffer_id = buffer_id_;
54 return handle; 53 return handle;
55 } 54 }
56 55
57 private: 56 private:
58 long buffer_id_; 57 long buffer_id_;
59 gfx::Size size_; 58 gfx::Size size_;
60 bool mapped_; 59 bool mapped_;
61 60
62 DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImpl); 61 DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImpl);
63 }; 62 };
64 63
65 } // namespace 64 } // namespace
66 65
67 GpuMemoryBufferFactoryImpl::GpuMemoryBufferFactoryImpl() { 66 GpuMemoryBufferFactoryImpl::GpuMemoryBufferFactoryImpl() {
68 } 67 }
69 68
70 GpuMemoryBufferFactoryImpl::~GpuMemoryBufferFactoryImpl() { 69 GpuMemoryBufferFactoryImpl::~GpuMemoryBufferFactoryImpl() {
71 } 70 }
72 71
73 gfx::GpuMemoryBuffer* GpuMemoryBufferFactoryImpl::CreateGpuMemoryBuffer( 72 scoped_ptr<gfx::GpuMemoryBuffer>
74 size_t width, 73 GpuMemoryBufferFactoryImpl::AllocateGpuMemoryBuffer(size_t width,
75 size_t height, 74 size_t height,
76 unsigned internalformat, 75 unsigned internalformat,
77 unsigned usage) { 76 unsigned usage) {
78 // For Android WebView we assume the |internalformat| will always be 77 // For Android WebView we assume the |internalformat| will always be
79 // GL_RGBA8_OES. 78 // GL_RGBA8_OES.
80 CHECK_EQ(static_cast<GLenum>(GL_RGBA8_OES), internalformat); 79 CHECK_EQ(static_cast<GLenum>(GL_RGBA8_OES), internalformat);
81 CHECK(g_gl_draw_functions); 80 CHECK(g_gl_draw_functions);
82 long buffer_id = g_gl_draw_functions->create_graphic_buffer(width, height); 81 long buffer_id = g_gl_draw_functions->create_graphic_buffer(width, height);
83 if (!buffer_id) 82 if (!buffer_id)
84 return NULL; 83 return scoped_ptr<gfx::GpuMemoryBuffer>();
85 84
86 return new GpuMemoryBufferImpl(buffer_id, gfx::Size(width, height)); 85 return make_scoped_ptr(
86 new GpuMemoryBufferImpl(buffer_id, gfx::Size(width, height)))
87 .PassAs<gfx::GpuMemoryBuffer>();
88 }
89
90 scoped_refptr<gfx::GLImage>
91 GpuMemoryBufferFactoryImpl::CreateImageForGpuMemoryBuffer(
92 const gfx::GpuMemoryBufferHandle& handle,
93 const gfx::Size& size,
94 unsigned internalformat) {
95 DCHECK_EQ(gfx::ANDROID_NATIVE_BUFFER, handle.type);
96
97 EGLClientBuffer native_buffer =
98 g_gl_draw_functions->get_native_buffer(handle.buffer_id);
99 DCHECK(native_buffer);
100
101 scoped_refptr<gfx::GLImageAndroidNativeBuffer> image(
102 new gfx::GLImageAndroidNativeBuffer(size));
103 if (!image->Initialize(native_buffer))
104 return scoped_refptr<gfx::GLImage>();
105
106 return image;
87 } 107 }
88 108
89 // static 109 // static
90 void GpuMemoryBufferFactoryImpl::SetAwDrawGLFunctionTable( 110 void GpuMemoryBufferFactoryImpl::SetAwDrawGLFunctionTable(
91 AwDrawGLFunctionTable* table) { 111 AwDrawGLFunctionTable* table) {
92 g_gl_draw_functions = table; 112 g_gl_draw_functions = table;
93 } 113 }
94 114
95 } // namespace android_webview 115 } // namespace android_webview
OLDNEW
« 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