diff options
author | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 19:31:09 +0000 |
---|---|---|
committer | gman@chromium.org <gman@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-12-06 19:31:09 +0000 |
commit | 41f31d14541d147658b5f2c4b85a8046ab602062 (patch) | |
tree | 47dd585acc505fc4377b6469cb27ca3accf0b8bc /gpu/command_buffer/service/gpu_scheduler_unittest.cc | |
parent | 8ebf9b135df2b2a79cf130d39a48185b8f851338 (diff) | |
download | chromium_src-41f31d14541d147658b5f2c4b85a8046ab602062.zip chromium_src-41f31d14541d147658b5f2c4b85a8046ab602062.tar.gz chromium_src-41f31d14541d147658b5f2c4b85a8046ab602062.tar.bz2 |
Add CommandBuffer::SetGetBuffer
As well as remove CommandBuffer::GetRingBuffer and
change CommandBuffer::Initialize
Before this change the service allocated and managed the command buffer.
After this change the client uses CreateTransferBuffer, GetTransferBuffer,
end potentially DeleteTransferBufffer to manage the command buffer.
Another CL will actually make the client delete the command buffer
on demand.
TEST=unit tests and run some samples and a NaCl 3D game
BUG=103989
Review URL: http://codereview.chromium.org/8566059
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@113250 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'gpu/command_buffer/service/gpu_scheduler_unittest.cc')
-rw-r--r-- | gpu/command_buffer/service/gpu_scheduler_unittest.cc | 51 |
1 files changed, 32 insertions, 19 deletions
diff --git a/gpu/command_buffer/service/gpu_scheduler_unittest.cc b/gpu/command_buffer/service/gpu_scheduler_unittest.cc index 2d230ec..e9d64c8 100644 --- a/gpu/command_buffer/service/gpu_scheduler_unittest.cc +++ b/gpu/command_buffer/service/gpu_scheduler_unittest.cc @@ -30,6 +30,8 @@ const size_t kRingBufferEntries = kRingBufferSize / sizeof(CommandBufferEntry); class GpuSchedulerTest : public testing::Test { protected: + static const int32 kTransferBufferId = 123; + virtual void SetUp() { shared_memory_.reset(new ::base::SharedMemory); shared_memory_->CreateAndMapAnonymous(kRingBufferSize); @@ -39,28 +41,21 @@ class GpuSchedulerTest : public testing::Test { memset(buffer_, 0, kRingBufferSize); command_buffer_.reset(new MockCommandBuffer); - ON_CALL(*command_buffer_.get(), GetRingBuffer()) - .WillByDefault(Return(shared_memory_buffer_)); CommandBuffer::State default_state; default_state.num_entries = kRingBufferEntries; ON_CALL(*command_buffer_.get(), GetState()) .WillByDefault(Return(default_state)); - async_api_.reset(new StrictMock<AsyncAPIMock>); - decoder_.reset(new gles2::MockGLES2Decoder()); - - parser_ = new CommandParser(buffer_, - kRingBufferEntries, - 0, - kRingBufferEntries, - 0, - async_api_.get()); - scheduler_.reset(new gpu::GpuScheduler(command_buffer_.get(), decoder_.get(), - parser_)); + NULL)); + EXPECT_CALL(*command_buffer_, GetTransferBuffer(kTransferBufferId)) + .WillOnce(Return(shared_memory_buffer_)); + EXPECT_CALL(*command_buffer_, SetGetBuffer(kTransferBufferId)); + EXPECT_CALL(*command_buffer_, SetGetOffset(0)); + EXPECT_TRUE(scheduler_->SetGetBuffer(kTransferBufferId)); } virtual void TearDown() { @@ -82,8 +77,6 @@ class GpuSchedulerTest : public testing::Test { Buffer shared_memory_buffer_; int32* buffer_; scoped_ptr<gles2::MockGLES2Decoder> decoder_; - CommandParser* parser_; - scoped_ptr<AsyncAPIMock> async_api_; scoped_ptr<GpuScheduler> scheduler_; }; @@ -100,6 +93,25 @@ TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) { scheduler_->PutChanged(); } +TEST_F(GpuSchedulerTest, GetSetBuffer) { + CommandBuffer::State state; + + // Set the get offset to something not 0. + EXPECT_CALL(*command_buffer_, SetGetOffset(2)); + scheduler_->SetGetOffset(2); + EXPECT_EQ(2, scheduler_->GetGetOffset()); + + // Set the buffer. + EXPECT_CALL(*command_buffer_, GetTransferBuffer(kTransferBufferId)) + .WillOnce(Return(shared_memory_buffer_)); + EXPECT_CALL(*command_buffer_, SetGetBuffer(kTransferBufferId)); + EXPECT_CALL(*command_buffer_, SetGetOffset(0)); + EXPECT_TRUE(scheduler_->SetGetBuffer(kTransferBufferId)); + + // Check the get offset was reset. + EXPECT_EQ(0, scheduler_->GetGetOffset()); +} + TEST_F(GpuSchedulerTest, ProcessesOneCommand) { CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); header[0].command = 7; @@ -113,7 +125,7 @@ TEST_F(GpuSchedulerTest, ProcessesOneCommand) { .WillRepeatedly(Return(state)); EXPECT_CALL(*command_buffer_, SetGetOffset(2)); - EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) + EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0])) .WillOnce(Return(error::kNoError)); EXPECT_CALL(*command_buffer_, SetParseError(_)) @@ -136,11 +148,11 @@ TEST_F(GpuSchedulerTest, ProcessesTwoCommands) { EXPECT_CALL(*command_buffer_, GetState()) .WillRepeatedly(Return(state)); - EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) + EXPECT_CALL(*decoder_, DoCommand(7, 1, &buffer_[0])) .WillOnce(Return(error::kNoError)); EXPECT_CALL(*command_buffer_, SetGetOffset(2)); - EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2])) + EXPECT_CALL(*decoder_, DoCommand(8, 0, &buffer_[2])) .WillOnce(Return(error::kNoError)); EXPECT_CALL(*command_buffer_, SetGetOffset(3)); @@ -158,11 +170,12 @@ TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) { EXPECT_CALL(*command_buffer_, GetState()) .WillRepeatedly(Return(state)); - EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0])) + EXPECT_CALL(*decoder_, DoCommand(7, 0, &buffer_[0])) .WillOnce(Return( error::kUnknownCommand)); EXPECT_CALL(*command_buffer_, SetGetOffset(1)); + EXPECT_CALL(*command_buffer_, SetContextLostReason(_)); EXPECT_CALL(*decoder_, GetContextLostReason()) .WillOnce(Return(error::kUnknown)); EXPECT_CALL(*command_buffer_, |