Index: ui/gl/gl_image_memory.cc |
diff --git a/ui/gl/gl_image_shm.cc b/ui/gl/gl_image_memory.cc |
similarity index 73% |
rename from ui/gl/gl_image_shm.cc |
rename to ui/gl/gl_image_memory.cc |
index 75ef453eade794fe846ed1548dbe90d7e56f6f3f..5d0f901c812fde7d71819ac47306cbbb75994256 100644 |
--- a/ui/gl/gl_image_shm.cc |
+++ b/ui/gl/gl_image_memory.cc |
@@ -1,11 +1,12 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "ui/gl/gl_image_shm.h" |
+#include "ui/gl/gl_image_memory.h" |
#include "base/debug/trace_event.h" |
-#include "base/process/process_handle.h" |
+#include "base/logging.h" |
+#include "ui/gl/gl_bindings.h" |
#include "ui/gl/scoped_binders.h" |
#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \ |
@@ -14,7 +15,6 @@ |
#endif |
namespace gfx { |
- |
namespace { |
bool ValidFormat(unsigned internalformat) { |
@@ -54,7 +54,7 @@ GLenum DataType(unsigned internalformat) { |
} |
} |
-GLenum BytesPerPixel(unsigned internalformat) { |
+int BytesPerPixel(unsigned internalformat) { |
switch (internalformat) { |
case GL_BGRA8_EXT: |
case GL_RGBA8_OES: |
@@ -67,8 +67,9 @@ GLenum BytesPerPixel(unsigned internalformat) { |
} // namespace |
-GLImageShm::GLImageShm(gfx::Size size, unsigned internalformat) |
- : size_(size), |
+GLImageMemory::GLImageMemory(const gfx::Size& size, unsigned internalformat) |
+ : memory_(NULL), |
+ size_(size), |
internalformat_(internalformat) |
#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \ |
defined(USE_OZONE) |
@@ -79,33 +80,22 @@ GLImageShm::GLImageShm(gfx::Size size, unsigned internalformat) |
{ |
} |
-GLImageShm::~GLImageShm() { Destroy(); } |
+GLImageMemory::~GLImageMemory() { |
+} |
-bool GLImageShm::Initialize(gfx::GpuMemoryBufferHandle buffer) { |
+bool GLImageMemory::Initialize(const unsigned char* memory) { |
if (!ValidFormat(internalformat_)) { |
DVLOG(0) << "Invalid format: " << internalformat_; |
return false; |
} |
- if (!base::SharedMemory::IsHandleValid(buffer.handle)) |
- return false; |
- |
- base::SharedMemory shared_memory(buffer.handle, true); |
- |
- // Duplicate the handle. |
- base::SharedMemoryHandle duped_shared_memory_handle; |
- if (!shared_memory.ShareToProcess(base::GetCurrentProcessHandle(), |
- &duped_shared_memory_handle)) { |
- DVLOG(0) << "Failed to duplicate shared memory handle."; |
- return false; |
- } |
- |
- shared_memory_.reset( |
- new base::SharedMemory(duped_shared_memory_handle, true)); |
+ DCHECK(memory); |
+ DCHECK(!memory_); |
+ memory_ = memory; |
return true; |
} |
-void GLImageShm::Destroy() { |
+void GLImageMemory::Destroy() { |
#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \ |
defined(USE_OZONE) |
if (egl_image_ != EGL_NO_IMAGE_KHR) { |
@@ -118,24 +108,17 @@ void GLImageShm::Destroy() { |
egl_texture_id_ = 0u; |
} |
#endif |
+ memory_ = NULL; |
} |
-gfx::Size GLImageShm::GetSize() { return size_; } |
- |
-bool GLImageShm::BindTexImage(unsigned target) { |
- TRACE_EVENT0("gpu", "GLImageShm::BindTexImage"); |
- DCHECK(shared_memory_); |
- DCHECK(ValidFormat(internalformat_)); |
- |
- size_t size = size_.GetArea() * BytesPerPixel(internalformat_); |
- DCHECK(!shared_memory_->memory()); |
- if (!shared_memory_->Map(size)) { |
- DVLOG(0) << "Failed to map shared memory."; |
- return false; |
- } |
+gfx::Size GLImageMemory::GetSize() { |
+ return size_; |
+} |
- DCHECK(shared_memory_->memory()); |
+bool GLImageMemory::BindTexImage(unsigned target) { |
+ TRACE_EVENT0("gpu", "GLImageMemory::BindTexImage"); |
+ DCHECK(memory_); |
#if defined(OS_WIN) || defined(USE_X11) || defined(OS_ANDROID) || \ |
defined(USE_OZONE) |
if (target == GL_TEXTURE_EXTERNAL_OES) { |
@@ -157,7 +140,7 @@ bool GLImageShm::BindTexImage(unsigned target) { |
0, // border |
DataFormat(internalformat_), |
DataType(internalformat_), |
- shared_memory_->memory()); |
+ memory_); |
} |
EGLint attrs[] = {EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE}; |
@@ -182,13 +165,12 @@ bool GLImageShm::BindTexImage(unsigned target) { |
size_.height(), |
DataFormat(internalformat_), |
DataType(internalformat_), |
- shared_memory_->memory()); |
+ memory_); |
} |
glEGLImageTargetTexture2DOES(target, egl_image_); |
DCHECK_EQ(static_cast<GLenum>(GL_NO_ERROR), glGetError()); |
- shared_memory_->Unmap(); |
return true; |
} |
#endif |
@@ -202,10 +184,17 @@ bool GLImageShm::BindTexImage(unsigned target) { |
0, // border |
DataFormat(internalformat_), |
DataType(internalformat_), |
- shared_memory_->memory()); |
+ memory_); |
- shared_memory_->Unmap(); |
return true; |
} |
+bool GLImageMemory::HasValidFormat() const { |
+ return ValidFormat(internalformat_); |
+} |
+ |
+size_t GLImageMemory::Bytes() const { |
+ return size_.GetArea() * BytesPerPixel(internalformat_); |
+} |
+ |
} // namespace gfx |