summaryrefslogtreecommitdiffstats
path: root/gpu
diff options
context:
space:
mode:
authorgman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-01 06:13:40 +0000
committergman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-01 06:13:40 +0000
commit1d471e85257d65758aa9bf6b8b0ba8ed38de9e1b (patch)
tree969a3ae1c9531d6f0c3ec561b6ac0459b175f6df /gpu
parentd4554ceb907a41b5e8134e3b66d446c0567870bc (diff)
downloadchromium_src-1d471e85257d65758aa9bf6b8b0ba8ed38de9e1b.zip
chromium_src-1d471e85257d65758aa9bf6b8b0ba8ed38de9e1b.tar.gz
chromium_src-1d471e85257d65758aa9bf6b8b0ba8ed38de9e1b.tar.bz2
Make context groups share a TextureBufferManager
TEST=unit tests, and ran WebGL Conformance tests BUG=129803 Review URL: https://chromiumcodereview.appspot.com/10441140 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@139981 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu')
-rw-r--r--gpu/command_buffer/client/cmd_buffer_helper_test.cc12
-rw-r--r--gpu/command_buffer/client/fenced_allocator_test.cc12
-rw-r--r--gpu/command_buffer/client/mapped_memory_unittest.cc15
-rw-r--r--gpu/command_buffer/client/ring_buffer_test.cc14
-rw-r--r--gpu/command_buffer/service/command_buffer_service.cc8
-rw-r--r--gpu/command_buffer/service/command_buffer_service.h9
-rw-r--r--gpu/command_buffer/service/command_buffer_service_unittest.cc10
-rw-r--r--gpu/command_buffer/service/context_group.cc12
-rw-r--r--gpu/command_buffer/service/context_group.h11
-rw-r--r--gpu/command_buffer/tests/gl_manager.cc15
-rw-r--r--gpu/demos/framework/window.cc9
-rw-r--r--gpu/demos/framework/window.h2
-rw-r--r--gpu/gles2_conform_support/egl/display.cc8
-rw-r--r--gpu/gles2_conform_support/egl/display.h2
14 files changed, 108 insertions, 31 deletions
diff --git a/gpu/command_buffer/client/cmd_buffer_helper_test.cc b/gpu/command_buffer/client/cmd_buffer_helper_test.cc
index 6c62312..a180c96 100644
--- a/gpu/command_buffer/client/cmd_buffer_helper_test.cc
+++ b/gpu/command_buffer/client/cmd_buffer_helper_test.cc
@@ -10,6 +10,7 @@
#include "gpu/command_buffer/client/cmd_buffer_helper.h"
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "gpu/command_buffer/service/gpu_scheduler.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -65,8 +66,14 @@ class CommandBufferHelperTest : public testing::Test {
EXPECT_CALL(*api_mock_, DoCommand(cmd::kNoop, _, _))
.WillRepeatedly(Return(error::kNoError));
- command_buffer_.reset(new CommandBufferService);
- command_buffer_->Initialize();
+ {
+ TransferBufferManager* manager = new TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ EXPECT_TRUE(manager->Initialize());
+ }
+ command_buffer_.reset(
+ new CommandBufferService(transfer_buffer_manager_.get()));
+ EXPECT_TRUE(command_buffer_->Initialize());
gpu_scheduler_.reset(new GpuScheduler(
command_buffer_.get(), api_mock_.get(), NULL));
@@ -160,6 +167,7 @@ class CommandBufferHelperTest : public testing::Test {
#endif
MessageLoop message_loop_;
scoped_ptr<AsyncAPIMock> api_mock_;
+ scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<CommandBufferService> command_buffer_;
scoped_ptr<GpuScheduler> gpu_scheduler_;
scoped_ptr<CommandBufferHelper> helper_;
diff --git a/gpu/command_buffer/client/fenced_allocator_test.cc b/gpu/command_buffer/client/fenced_allocator_test.cc
index 731f374..d34e158 100644
--- a/gpu/command_buffer/client/fenced_allocator_test.cc
+++ b/gpu/command_buffer/client/fenced_allocator_test.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -13,6 +13,7 @@
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
#include "gpu/command_buffer/service/gpu_scheduler.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
#if defined(OS_MACOSX)
@@ -44,7 +45,13 @@ class BaseFencedAllocatorTest : public testing::Test {
.WillRepeatedly(DoAll(Invoke(api_mock_.get(), &AsyncAPIMock::SetToken),
Return(error::kNoError)));
- command_buffer_.reset(new CommandBufferService);
+ {
+ TransferBufferManager* manager = new TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ EXPECT_TRUE(manager->Initialize());
+ }
+ command_buffer_.reset(
+ new CommandBufferService(transfer_buffer_manager_.get()));
command_buffer_->Initialize();
gpu_scheduler_.reset(new GpuScheduler(
@@ -69,6 +76,7 @@ class BaseFencedAllocatorTest : public testing::Test {
#endif
MessageLoop message_loop_;
scoped_ptr<AsyncAPIMock> api_mock_;
+ scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<CommandBufferService> command_buffer_;
scoped_ptr<GpuScheduler> gpu_scheduler_;
scoped_ptr<CommandBufferHelper> helper_;
diff --git a/gpu/command_buffer/client/mapped_memory_unittest.cc b/gpu/command_buffer/client/mapped_memory_unittest.cc
index 4442d88..391d3b4 100644
--- a/gpu/command_buffer/client/mapped_memory_unittest.cc
+++ b/gpu/command_buffer/client/mapped_memory_unittest.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -9,6 +9,7 @@
#include "gpu/command_buffer/client/cmd_buffer_helper.h"
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "gpu/command_buffer/service/gpu_scheduler.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -41,8 +42,15 @@ class MappedMemoryTestBase : public testing::Test {
.WillRepeatedly(DoAll(Invoke(api_mock_.get(), &AsyncAPIMock::SetToken),
Return(error::kNoError)));
- command_buffer_.reset(new CommandBufferService);
- command_buffer_->Initialize();
+ {
+ TransferBufferManager* manager = new TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ EXPECT_TRUE(manager->Initialize());
+ }
+
+ command_buffer_.reset(
+ new CommandBufferService(transfer_buffer_manager_.get()));
+ EXPECT_TRUE(command_buffer_->Initialize());
gpu_scheduler_.reset(new GpuScheduler(
command_buffer_.get(), api_mock_.get(), NULL));
@@ -66,6 +74,7 @@ class MappedMemoryTestBase : public testing::Test {
#endif
MessageLoop message_loop_;
scoped_ptr<AsyncAPIMock> api_mock_;
+ scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<CommandBufferService> command_buffer_;
scoped_ptr<GpuScheduler> gpu_scheduler_;
scoped_ptr<CommandBufferHelper> helper_;
diff --git a/gpu/command_buffer/client/ring_buffer_test.cc b/gpu/command_buffer/client/ring_buffer_test.cc
index 86dc020..04e4e30 100644
--- a/gpu/command_buffer/client/ring_buffer_test.cc
+++ b/gpu/command_buffer/client/ring_buffer_test.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2011 The Chromium Authors. All rights reserved.
+// Copyright (c) 2012 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.
@@ -13,6 +13,7 @@
#include "gpu/command_buffer/service/mocks.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
#include "gpu/command_buffer/service/gpu_scheduler.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
#if defined(OS_MACOSX)
@@ -64,8 +65,14 @@ class BaseRingBufferTest : public testing::Test {
.WillRepeatedly(DoAll(Invoke(api_mock_.get(), &AsyncAPIMock::SetToken),
Return(error::kNoError)));
- command_buffer_.reset(new CommandBufferService);
- command_buffer_->Initialize();
+ {
+ TransferBufferManager* manager = new TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ EXPECT_TRUE(manager->Initialize());
+ }
+ command_buffer_.reset(
+ new CommandBufferService(transfer_buffer_manager_.get()));
+ EXPECT_TRUE(command_buffer_->Initialize());
gpu_scheduler_.reset(new GpuScheduler(
command_buffer_.get(), api_mock_.get(), NULL));
@@ -93,6 +100,7 @@ class BaseRingBufferTest : public testing::Test {
#endif
MessageLoop message_loop_;
scoped_ptr<AsyncAPIMock> api_mock_;
+ scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<CommandBufferService> command_buffer_;
scoped_ptr<GpuScheduler> gpu_scheduler_;
scoped_ptr<CommandBufferHelper> helper_;
diff --git a/gpu/command_buffer/service/command_buffer_service.cc b/gpu/command_buffer/service/command_buffer_service.cc
index 402cb7c..8b00595 100644
--- a/gpu/command_buffer/service/command_buffer_service.cc
+++ b/gpu/command_buffer/service/command_buffer_service.cc
@@ -16,12 +16,14 @@ using ::base::SharedMemory;
namespace gpu {
-CommandBufferService::CommandBufferService()
+CommandBufferService::CommandBufferService(
+ TransferBufferManagerInterface* transfer_buffer_manager)
: ring_buffer_id_(-1),
shared_state_(NULL),
num_entries_(0),
get_offset_(0),
put_offset_(0),
+ transfer_buffer_manager_(transfer_buffer_manager),
token_(0),
generation_(0),
error_(error::kNoError),
@@ -32,9 +34,7 @@ CommandBufferService::~CommandBufferService() {
}
bool CommandBufferService::Initialize() {
- TransferBufferManager* manager = new TransferBufferManager();
- transfer_buffer_manager_.reset(manager);
- return manager->Initialize();
+ return true;
}
CommandBufferService::State CommandBufferService::GetState() {
diff --git a/gpu/command_buffer/service/command_buffer_service.h b/gpu/command_buffer/service/command_buffer_service.h
index 77fe951..c3bb841 100644
--- a/gpu/command_buffer/service/command_buffer_service.h
+++ b/gpu/command_buffer/service/command_buffer_service.h
@@ -6,8 +6,6 @@
#define GPU_COMMAND_BUFFER_SERVICE_COMMAND_BUFFER_SERVICE_H_
#include "base/callback.h"
-#include "base/memory/linked_ptr.h"
-#include "base/memory/scoped_ptr.h"
#include "base/shared_memory.h"
#include "gpu/command_buffer/common/command_buffer.h"
#include "gpu/command_buffer/common/command_buffer_shared.h"
@@ -21,7 +19,8 @@ class TransferBufferManagerInterface;
class GPU_EXPORT CommandBufferService : public CommandBuffer {
public:
typedef base::Callback<bool(int32)> GetBufferChangedCallback;
- CommandBufferService();
+ explicit CommandBufferService(
+ TransferBufferManagerInterface* transfer_buffer_manager);
virtual ~CommandBufferService();
// CommandBuffer implementation:
@@ -72,11 +71,13 @@ class GPU_EXPORT CommandBufferService : public CommandBuffer {
base::Closure put_offset_change_callback_;
GetBufferChangedCallback get_buffer_change_callback_;
base::Closure parse_error_callback_;
- scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
+ TransferBufferManagerInterface* transfer_buffer_manager_;
int32 token_;
uint32 generation_;
error::Error error_;
error::ContextLostReason context_lost_reason_;
+
+ DISALLOW_COPY_AND_ASSIGN(CommandBufferService);
};
} // namespace gpu
diff --git a/gpu/command_buffer/service/command_buffer_service_unittest.cc b/gpu/command_buffer/service/command_buffer_service_unittest.cc
index a771018..2c9093b 100644
--- a/gpu/command_buffer/service/command_buffer_service_unittest.cc
+++ b/gpu/command_buffer/service/command_buffer_service_unittest.cc
@@ -7,6 +7,7 @@
#include "base/threading/thread.h"
#include "gpu/command_buffer/common/cmd_buffer_common.h"
#include "gpu/command_buffer/service/command_buffer_service.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -22,7 +23,13 @@ namespace gpu {
class CommandBufferServiceTest : public testing::Test {
protected:
virtual void SetUp() {
- command_buffer_.reset(new CommandBufferService);
+ {
+ TransferBufferManager* manager = new TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ EXPECT_TRUE(manager->Initialize());
+ }
+ command_buffer_.reset(
+ new CommandBufferService(transfer_buffer_manager_.get()));
EXPECT_TRUE(command_buffer_->Initialize());
}
@@ -49,6 +56,7 @@ class CommandBufferServiceTest : public testing::Test {
return true;
}
+ scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<CommandBufferService> command_buffer_;
};
diff --git a/gpu/command_buffer/service/context_group.cc b/gpu/command_buffer/service/context_group.cc
index 2b6c8ef..81fd606 100644
--- a/gpu/command_buffer/service/context_group.cc
+++ b/gpu/command_buffer/service/context_group.cc
@@ -18,13 +18,15 @@
#include "gpu/command_buffer/service/renderbuffer_manager.h"
#include "gpu/command_buffer/service/shader_manager.h"
#include "gpu/command_buffer/service/texture_manager.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "ui/gl/gl_implementation.h"
namespace gpu {
namespace gles2 {
-ContextGroup::ContextGroup(MailboxManager* mailbox_manager,
- bool bind_generates_resource)
+ContextGroup::ContextGroup(
+ MailboxManager* mailbox_manager,
+ bool bind_generates_resource)
: mailbox_manager_(mailbox_manager ? mailbox_manager : new MailboxManager),
num_contexts_(0),
enforce_gl_minimums_(CommandLine::ForCurrentProcess()->HasSwitch(
@@ -38,6 +40,12 @@ ContextGroup::ContextGroup(MailboxManager* mailbox_manager,
max_varying_vectors_(0u),
max_vertex_uniform_vectors_(0u),
feature_info_(new FeatureInfo()) {
+ {
+ TransferBufferManager* manager = new TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ manager->Initialize();
+ }
+
id_namespaces_[id_namespaces::kBuffers].reset(new IdAllocator);
id_namespaces_[id_namespaces::kFramebuffers].reset(new IdAllocator);
id_namespaces_[id_namespaces::kProgramsAndShaders].reset(
diff --git a/gpu/command_buffer/service/context_group.h b/gpu/command_buffer/service/context_group.h
index 7b9118f..bf76308 100644
--- a/gpu/command_buffer/service/context_group.h
+++ b/gpu/command_buffer/service/context_group.h
@@ -19,6 +19,7 @@
namespace gpu {
class IdAllocatorInterface;
+class TransferBufferManagerInterface;
namespace gles2 {
@@ -38,8 +39,9 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> {
public:
typedef scoped_refptr<ContextGroup> Ref;
- explicit ContextGroup(MailboxManager* mailbox_manager,
- bool bind_generates_resource);
+ ContextGroup(
+ MailboxManager* mailbox_manager,
+ bool bind_generates_resource);
// This should only be called by GLES2Decoder. This must be paired with a
// call to destroy if it succeeds.
@@ -114,6 +116,10 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> {
return shader_manager_.get();
}
+ TransferBufferManagerInterface* transfer_buffer_manager() const {
+ return transfer_buffer_manager_.get();
+ }
+
IdAllocatorInterface* GetIdAllocator(unsigned namespace_id);
private:
@@ -126,6 +132,7 @@ class GPU_EXPORT ContextGroup : public base::RefCounted<ContextGroup> {
bool QueryGLFeatureU(GLenum pname, GLint min_required, uint32* v);
scoped_refptr<MailboxManager> mailbox_manager_;
+ scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
// Whether or not this context is initialized.
int num_contexts_;
diff --git a/gpu/command_buffer/tests/gl_manager.cc b/gpu/command_buffer/tests/gl_manager.cc
index 912d721..14db773 100644
--- a/gpu/command_buffer/tests/gl_manager.cc
+++ b/gpu/command_buffer/tests/gl_manager.cc
@@ -93,15 +93,18 @@ void GLManager::Setup(
attribs.push_back(16);
attribs.push_back(EGL_NONE);
- command_buffer_.reset(new CommandBufferService);
+ if (!context_group) {
+ context_group = new gles2::ContextGroup(
+ mailbox_manager_.get(), kBindGeneratesResource);
+ }
+
+ decoder_.reset(::gpu::gles2::GLES2Decoder::Create(context_group));
+
+ command_buffer_.reset(new CommandBufferService(
+ decoder_->GetContextGroup()->transfer_buffer_manager()));
ASSERT_TRUE(command_buffer_->Initialize())
<< "could not create command buffer service";
- decoder_.reset(::gpu::gles2::GLES2Decoder::Create(
- context_group ? context_group :
- new gles2::ContextGroup(
- mailbox_manager_.get(), kBindGeneratesResource)));
-
gpu_scheduler_.reset(new GpuScheduler(command_buffer_.get(),
decoder_.get(),
decoder_.get()));
diff --git a/gpu/demos/framework/window.cc b/gpu/demos/framework/window.cc
index e5274790..d30e427 100644
--- a/gpu/demos/framework/window.cc
+++ b/gpu/demos/framework/window.cc
@@ -12,6 +12,7 @@
#include "gpu/command_buffer/client/gles2_lib.h"
#include "gpu/command_buffer/client/transfer_buffer.h"
#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "gpu/demos/framework/demo.h"
#include "gpu/demos/framework/demo_factory.h"
@@ -65,7 +66,13 @@ void Window::OnPaint() {
}
bool Window::CreateRenderContext(gfx::AcceleratedWidget hwnd) {
- command_buffer_.reset(new CommandBufferService);
+ {
+ TransferBufferManager* manager = new TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ EXPECT_TRUE(manager->Initialize());
+ }
+ command_buffer_.reset(
+ new CommandBufferService(transfer_buffer_manager_.get()));
if (!command_buffer_->Initialize()) {
return false;
}
diff --git a/gpu/demos/framework/window.h b/gpu/demos/framework/window.h
index e9c9802..651498d 100644
--- a/gpu/demos/framework/window.h
+++ b/gpu/demos/framework/window.h
@@ -17,6 +17,7 @@
namespace gpu {
class TransferBuffer;
+class TransferBufferManagerInterface;
namespace gles2 {
@@ -55,6 +56,7 @@ class Window {
gfx::NativeWindow window_handle_;
scoped_ptr<Demo> demo_;
+ scoped_ptr<TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<gpu::CommandBufferService> command_buffer_;
scoped_ptr<gpu::GpuScheduler> gpu_scheduler_;
scoped_ptr<gpu::gles2::GLES2Decoder> decoder_;
diff --git a/gpu/gles2_conform_support/egl/display.cc b/gpu/gles2_conform_support/egl/display.cc
index a81b2b1..4c1c59d 100644
--- a/gpu/gles2_conform_support/egl/display.cc
+++ b/gpu/gles2_conform_support/egl/display.cc
@@ -10,6 +10,7 @@
#include "gpu/command_buffer/client/gles2_lib.h"
#include "gpu/command_buffer/client/transfer_buffer.h"
#include "gpu/command_buffer/service/context_group.h"
+#include "gpu/command_buffer/service/transfer_buffer_manager.h"
#include "gpu/gles2_conform_support/egl/config.h"
#include "gpu/gles2_conform_support/egl/surface.h"
@@ -82,8 +83,13 @@ EGLSurface Display::CreateWindowSurface(EGLConfig config,
return EGL_NO_SURFACE;
}
+ {
+ gpu::TransferBufferManager* manager = new gpu::TransferBufferManager();
+ transfer_buffer_manager_.reset(manager);
+ manager->Initialize();
+ }
scoped_ptr<gpu::CommandBufferService> command_buffer(
- new gpu::CommandBufferService);
+ new gpu::CommandBufferService(transfer_buffer_manager_.get()));
if (!command_buffer->Initialize())
return NULL;
diff --git a/gpu/gles2_conform_support/egl/display.h b/gpu/gles2_conform_support/egl/display.h
index 1138fdf..1cec2f9 100644
--- a/gpu/gles2_conform_support/egl/display.h
+++ b/gpu/gles2_conform_support/egl/display.h
@@ -20,6 +20,7 @@ namespace gpu {
class CommandBufferService;
class GpuScheduler;
class TransferBuffer;
+class TransferBufferManagerInterface;
namespace gles2 {
class GLES2CmdHelper;
@@ -66,6 +67,7 @@ class Display {
EGLNativeDisplayType display_id_;
bool is_initialized_;
+ scoped_ptr<gpu::TransferBufferManagerInterface> transfer_buffer_manager_;
scoped_ptr<gpu::CommandBufferService> command_buffer_;
scoped_ptr<gpu::GpuScheduler> gpu_scheduler_;
scoped_ptr<gpu::gles2::GLES2Decoder> decoder_;