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

Unified Diff: android_webview/browser/gpu_memory_buffer_factory_impl.cc

Issue 20017005: gpu: Refactor GpuMemoryBuffer framework for multi-process support. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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
new file mode 100644
index 0000000000000000000000000000000000000000..2cf9e637e6c8eab8720ac6687ebf65c5832aa45d
--- /dev/null
+++ b/android_webview/browser/gpu_memory_buffer_factory_impl.cc
@@ -0,0 +1,110 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
kaanb 2013/07/24 03:31:23 I think joth@ already pointed this out. I think if
reveman 2013/07/24 05:47:12 I used "git mv" but the changes are too great for
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "android_webview/browser/gpu_memory_buffer_factory_impl.h"
+
+#include "android_webview/public/browser/draw_gl.h"
+#include "base/logging.h"
+#include "ui/gfx/gpu_memory_buffer.h"
+#include "ui/gfx/size.h"
+#include "ui/gl/gl_bindings.h"
+
+namespace android_webview {
+
+namespace {
+
+// Provides hardware rendering functions from the Android glue layer.
+AwDrawGLFunctionTable* g_gl_draw_functions = NULL;
+
+class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
+ public:
+ GpuMemoryBufferImpl(int buffer_id, gfx::Size size)
+ : buffer_id_(buffer_id),
+ size_(size),
+ mapped_(false) {
+ DCHECK(buffer_id_);
+ }
+
+ virtual ~GpuMemoryBufferImpl() {
+ g_gl_draw_functions->release_graphic_buffer(buffer_id_);
+ }
+
+ // Overridden from gfx::GpuMemoryBuffer:
+ virtual void Map(gfx::GpuMemoryBuffer::AccessMode mode,
+ void** vaddr) OVERRIDE {
+ AwMapMode map_mode = MAP_READ_ONLY;
+ switch (mode) {
+ case GpuMemoryBuffer::READ_ONLY:
+ map_mode = MAP_READ_ONLY;
+ break;
+ case GpuMemoryBuffer::WRITE_ONLY:
+ map_mode = MAP_WRITE_ONLY;
+ break;
+ case GpuMemoryBuffer::READ_WRITE:
+ map_mode = MAP_READ_WRITE;
+ break;
+ default:
+ LOG(DFATAL) << "Unknown map mode: " << mode;
+ }
+ int err = g_gl_draw_functions->map(buffer_id_, map_mode, vaddr);
+ DCHECK(!err);
+ mapped_ = true;
+ }
+ virtual void Unmap() OVERRIDE {
+ int err = g_gl_draw_functions->unmap(buffer_id_);
+ DCHECK(!err);
+ mapped_ = false;
+ }
+ virtual bool IsMapped() const OVERRIDE { return mapped_; }
+ virtual uint32 GetStride() const OVERRIDE {
+ return g_gl_draw_functions->get_stride(buffer_id_);
+ }
+ virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE {
+ gfx::GpuMemoryBufferHandle handle;
+ handle.type = gfx::EGL_CLIENT_BUFFER;
+ handle.native_buffer = g_gl_draw_functions->get_native_buffer(buffer_id_);
+ return handle;
+ }
+
+ private:
+ int buffer_id_;
+ gfx::Size size_;
+ bool mapped_;
+
+ DISALLOW_COPY_AND_ASSIGN(GpuMemoryBufferImpl);
+};
+
+} // namespace
+
+GpuMemoryBufferFactoryImpl::GpuMemoryBufferFactoryImpl() {
+}
+
+GpuMemoryBufferFactoryImpl::~GpuMemoryBufferFactoryImpl() {
+}
+
+gfx::GpuMemoryBuffer* GpuMemoryBufferFactoryImpl::CreateGpuMemoryBuffer(
+ size_t width,
+ size_t height,
+ unsigned internalformat) {
+ // For Android WebView we assume the |internalformat| will always be
+ // GL_RGBA8_OES.
+ DCHECK_EQ(static_cast<GLenum>(GL_RGBA8_OES), internalformat);
+ if (internalformat != static_cast<unsigned>(GL_RGBA8_OES))
+ return NULL;
+
+ CHECK(g_gl_draw_functions);
+ int buffer_id = g_gl_draw_functions->create_graphic_buffer(width, height);
+ if (!buffer_id)
+ return NULL;
+
+ return new GpuMemoryBufferImpl(buffer_id, gfx::Size(width, height));
+}
+
+// static
+void GpuMemoryBufferFactoryImpl::SetAwDrawGLFunctionTable(
+ AwDrawGLFunctionTable* table) {
+ g_gl_draw_functions = table;
+}
+
+} // namespace android_webview

Powered by Google App Engine
This is Rietveld 408576698