diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-01 06:13:40 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-06-01 06:13:40 +0000 |
commit | 1d471e85257d65758aa9bf6b8b0ba8ed38de9e1b (patch) | |
tree | 969a3ae1c9531d6f0c3ec561b6ac0459b175f6df /gpu | |
parent | d4554ceb907a41b5e8134e3b66d446c0567870bc (diff) | |
download | chromium_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.cc | 12 | ||||
-rw-r--r-- | gpu/command_buffer/client/fenced_allocator_test.cc | 12 | ||||
-rw-r--r-- | gpu/command_buffer/client/mapped_memory_unittest.cc | 15 | ||||
-rw-r--r-- | gpu/command_buffer/client/ring_buffer_test.cc | 14 | ||||
-rw-r--r-- | gpu/command_buffer/service/command_buffer_service.cc | 8 | ||||
-rw-r--r-- | gpu/command_buffer/service/command_buffer_service.h | 9 | ||||
-rw-r--r-- | gpu/command_buffer/service/command_buffer_service_unittest.cc | 10 | ||||
-rw-r--r-- | gpu/command_buffer/service/context_group.cc | 12 | ||||
-rw-r--r-- | gpu/command_buffer/service/context_group.h | 11 | ||||
-rw-r--r-- | gpu/command_buffer/tests/gl_manager.cc | 15 | ||||
-rw-r--r-- | gpu/demos/framework/window.cc | 9 | ||||
-rw-r--r-- | gpu/demos/framework/window.h | 2 | ||||
-rw-r--r-- | gpu/gles2_conform_support/egl/display.cc | 8 | ||||
-rw-r--r-- | gpu/gles2_conform_support/egl/display.h | 2 |
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_; |