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() { |