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

Unified Diff: gpu/command_buffer/tests/gl_manager.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: wip Created 6 years, 6 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: gpu/command_buffer/tests/gl_manager.cc
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 7d5b5913fffe7e213d2d6841178e65a1cd85effd..3edf40287775a2f59054daedb2502ed606e8ebfb 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -4,13 +4,16 @@
#include "gpu/command_buffer/tests/gl_manager.h"
+#include <GLES2/gl2.h>
+#include <GLES2/gl2ext.h>
+
#include <vector>
#include "base/at_exit.h"
#include "base/bind.h"
+#include "base/memory/ref_counted_memory.h"
#include "gpu/command_buffer/client/gles2_implementation.h"
#include "gpu/command_buffer/client/gles2_lib.h"
-#include "gpu/command_buffer/client/gpu_memory_buffer_factory.h"
#include "gpu/command_buffer/client/transfer_buffer.h"
#include "gpu/command_buffer/common/constants.h"
#include "gpu/command_buffer/common/gles2_cmd_utils.h"
@@ -23,11 +26,58 @@
#include "gpu/command_buffer/service/image_manager.h"
#include "gpu/command_buffer/service/mailbox_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "ui/gfx/gpu_memory_buffer.h"
#include "ui/gl/gl_context.h"
+#include "ui/gl/gl_image_ref_counted_memory.h"
#include "ui/gl/gl_share_group.h"
#include "ui/gl/gl_surface.h"
namespace gpu {
+namespace {
+
+int BytesPerPixel(unsigned internalformat) {
+ switch (internalformat) {
+ case GL_RGBA8_OES:
+ return 4;
+ default:
+ NOTREACHED();
+ return 0;
+ }
+}
+
+class GpuMemoryBufferImpl : public gfx::GpuMemoryBuffer {
+ public:
+ GpuMemoryBufferImpl(base::RefCountedBytes* bytes,
+ const gfx::Size& size,
+ unsigned internalformat)
+ : bytes_(bytes),
+ size_(size),
+ internalformat_(internalformat),
+ mapped_(false) {}
+
+ // Overridden from gfx::GpuMemoryBuffer:
+ virtual void* Map() OVERRIDE {
+ mapped_ = true;
+ return &bytes_->data().front();
+ }
+ virtual void Unmap() OVERRIDE { mapped_ = false; }
+ virtual bool IsMapped() const OVERRIDE { return mapped_; }
+ virtual uint32 GetStride() const OVERRIDE {
+ return size_.width() * BytesPerPixel(internalformat_);
+ }
+ virtual gfx::GpuMemoryBufferHandle GetHandle() const OVERRIDE {
+ NOTREACHED();
+ return gfx::GpuMemoryBufferHandle();
+ }
+
+ private:
+ scoped_refptr<base::RefCountedBytes> bytes_;
+ const gfx::Size size_;
+ unsigned internalformat_;
+ bool mapped_;
+};
+
+} // namespace
int GLManager::use_count_;
scoped_refptr<gfx::GLShareGroup>* GLManager::base_share_group_;
@@ -41,11 +91,10 @@ GLManager::Options::Options()
virtual_manager(NULL),
bind_generates_resource(false),
lose_context_when_out_of_memory(false),
- context_lost_allowed(false),
- image_manager(NULL) {}
+ context_lost_allowed(false) {
+}
-GLManager::GLManager()
- : context_lost_allowed_(false), gpu_memory_buffer_factory_(NULL) {
+GLManager::GLManager() : context_lost_allowed_(false) {
SetupBaseContext();
}
@@ -120,7 +169,6 @@ void GLManager::Initialize(const GLManager::Options& options) {
if (!context_group) {
context_group =
new gles2::ContextGroup(mailbox_manager_.get(),
- options.image_manager,
NULL,
new gpu::gles2::ShaderTranslatorCache,
NULL,
@@ -173,9 +221,7 @@ void GLManager::Initialize(const GLManager::Options& options) {
attribs)) << "could not initialize decoder";
gpu_control_service_.reset(
- new GpuControlService(decoder_->GetContextGroup()->image_manager(),
- decoder_->GetQueryManager()));
- gpu_memory_buffer_factory_ = options.gpu_memory_buffer_factory;
+ new GpuControlService(decoder_->GetQueryManager()));
command_buffer_->SetPutOffsetChangeCallback(
base::Bind(&GLManager::PumpCommands, base::Unretained(this)));
@@ -278,25 +324,32 @@ gfx::GpuMemoryBuffer* GLManager::CreateGpuMemoryBuffer(
unsigned internalformat,
unsigned usage,
int32* id) {
- *id = -1;
- scoped_ptr<gfx::GpuMemoryBuffer> buffer(
- gpu_memory_buffer_factory_->CreateGpuMemoryBuffer(
- width, height, internalformat, usage));
- if (!buffer.get())
+ gfx::Size size(width, height);
+
+ std::vector<unsigned char> data(
+ size.GetArea() * BytesPerPixel(internalformat), 0);
+ scoped_refptr<base::RefCountedBytes> bytes(new base::RefCountedBytes(data));
+
+ scoped_ptr<GpuMemoryBufferImpl> gpu_memory_buffer(
+ new GpuMemoryBufferImpl(bytes.get(), size, internalformat));
+
+ scoped_refptr<gfx::GLImageRefCountedMemory> gl_image(
+ new gfx::GLImageRefCountedMemory(size, internalformat));
+ if (!gl_image->Initialize(bytes.get()))
return NULL;
static int32 next_id = 1;
*id = next_id++;
- gpu_control_service_->RegisterGpuMemoryBuffer(
- *id, buffer->GetHandle(), width, height, internalformat);
- gfx::GpuMemoryBuffer* raw_buffer = buffer.get();
- memory_buffers_.add(*id, buffer.Pass());
- return raw_buffer;
+
+ decoder()->GetImageManager()->AddImage(gl_image.get(), *id);
+ gpu_memory_buffers_.add(*id,
+ gpu_memory_buffer.PassAs<gfx::GpuMemoryBuffer>());
+ return gpu_memory_buffers_.get(*id);
}
void GLManager::DestroyGpuMemoryBuffer(int32 id) {
- memory_buffers_.erase(id);
- gpu_control_service_->UnregisterGpuMemoryBuffer(id);
+ decoder()->GetImageManager()->RemoveImage(id);
+ gpu_memory_buffers_.erase(id);
}
uint32 GLManager::InsertSyncPoint() {

Powered by Google App Engine
This is Rietveld 408576698