Index: gpu/command_buffer/client/cmd_buffer_helper_test.cc |
diff --git a/gpu/command_buffer/client/cmd_buffer_helper_test.cc b/gpu/command_buffer/client/cmd_buffer_helper_test.cc |
index 216bb608802121d3f2bcd73de6912dff5ee9ac56..2fa1fee0bc76b9a5a35df163fad9a175f5a8df11 100644 |
--- a/gpu/command_buffer/client/cmd_buffer_helper_test.cc |
+++ b/gpu/command_buffer/client/cmd_buffer_helper_test.cc |
@@ -41,8 +41,8 @@ class CommandBufferHelperTest : public testing::Test { |
// Helper so mock can handle the Jump command. |
class DoJumpCommand { |
public: |
- explicit DoJumpCommand(CommandParser* parser) |
- : parser_(parser) { |
+ explicit DoJumpCommand(GpuScheduler* gpu_scheduler) |
+ : gpu_scheduler_(gpu_scheduler) { |
} |
error::Error DoCommand( |
@@ -50,12 +50,12 @@ class CommandBufferHelperTest : public testing::Test { |
unsigned int arg_count, |
const void* cmd_data) { |
const cmd::Jump* jump_cmd = static_cast<const cmd::Jump*>(cmd_data); |
- parser_->set_get(jump_cmd->offset); |
+ gpu_scheduler_->parser()->set_get(jump_cmd->offset); |
return error::kNoError; |
}; |
private: |
- CommandParser* parser_; |
+ GpuScheduler* gpu_scheduler_; |
}; |
virtual void SetUp() { |
@@ -68,28 +68,23 @@ class CommandBufferHelperTest : public testing::Test { |
command_buffer_.reset(new CommandBufferService); |
command_buffer_->Initialize(); |
- parser_ = new CommandParser(api_mock_.get()); |
+ gpu_scheduler_.reset(new GpuScheduler( |
+ command_buffer_.get(), api_mock_.get(), NULL)); |
+ command_buffer_->SetPutOffsetChangeCallback(base::Bind( |
+ &GpuScheduler::PutChanged, base::Unretained(gpu_scheduler_.get()))); |
+ command_buffer_->SetGetBufferChangeCallback(base::Bind( |
+ &GpuScheduler::SetGetBuffer, base::Unretained(gpu_scheduler_.get()))); |
- do_jump_command_.reset(new DoJumpCommand(parser_)); |
+ do_jump_command_.reset(new DoJumpCommand(gpu_scheduler_.get())); |
EXPECT_CALL(*api_mock_, DoCommand(cmd::kJump, _, _)) |
.WillRepeatedly( |
Invoke(do_jump_command_.get(), &DoJumpCommand::DoCommand)); |
- gpu_scheduler_.reset(new GpuScheduler( |
- command_buffer_.get(), NULL, parser_)); |
- command_buffer_->SetPutOffsetChangeCallback(base::Bind( |
- &GpuScheduler::PutChanged, base::Unretained(gpu_scheduler_.get()))); |
api_mock_->set_engine(gpu_scheduler_.get()); |
helper_.reset(new CommandBufferHelper(command_buffer_.get())); |
helper_->Initialize(kCommandBufferSizeBytes); |
- |
- // Note: parser->SetBuffer would normally be called through |
- // helper_->Initialize but currently it needs a GpuCommandBufferStub as the |
- // CommandBuffer instead of the CommandBufferService for that to happen. |
- Buffer ring_buffer = helper_->get_ring_buffer(); |
- parser_->SetBuffer(ring_buffer.ptr, ring_buffer.size, 0, ring_buffer.size); |
} |
virtual void TearDown() { |
@@ -97,6 +92,10 @@ class CommandBufferHelperTest : public testing::Test { |
MessageLoop::current()->RunAllPending(); |
} |
+ const CommandParser* GetParser() const { |
+ return gpu_scheduler_->parser(); |
+ } |
+ |
// Adds a command to the buffer through the helper, while adding it as an |
// expected call on the API mock. |
void AddCommandWithExpect(error::Error _return, |
@@ -121,8 +120,8 @@ class CommandBufferHelperTest : public testing::Test { |
// Checks that the buffer from put to put+size is free in the parser. |
void CheckFreeSpace(CommandBufferOffset put, unsigned int size) { |
- CommandBufferOffset parser_put = parser_->put(); |
- CommandBufferOffset parser_get = parser_->get(); |
+ CommandBufferOffset parser_put = GetParser()->put(); |
+ CommandBufferOffset parser_get = GetParser()->get(); |
CommandBufferOffset limit = put + size; |
if (parser_get > parser_put) { |
// "busy" buffer wraps, so "free" buffer is between put (inclusive) and |
@@ -163,7 +162,6 @@ class CommandBufferHelperTest : public testing::Test { |
scoped_ptr<AsyncAPIMock> api_mock_; |
scoped_ptr<CommandBufferService> command_buffer_; |
scoped_ptr<GpuScheduler> gpu_scheduler_; |
- CommandParser* parser_; |
scoped_ptr<CommandBufferHelper> helper_; |
Sequence sequence_; |
scoped_ptr<DoJumpCommand> do_jump_command_; |
@@ -174,7 +172,7 @@ class CommandBufferHelperTest : public testing::Test { |
TEST_F(CommandBufferHelperTest, TestCommandProcessing) { |
// Check initial state of the engine - it should have been configured by the |
// helper. |
- EXPECT_TRUE(parser_ != NULL); |
+ EXPECT_TRUE(GetParser() != NULL); |
EXPECT_EQ(error::kNoError, GetError()); |
EXPECT_EQ(0, GetGetOffset()); |
@@ -194,7 +192,7 @@ TEST_F(CommandBufferHelperTest, TestCommandProcessing) { |
// Wait until it's done. |
helper_->Finish(); |
// Check that the engine has no more work to do. |
- EXPECT_TRUE(parser_->IsEmpty()); |
+ EXPECT_TRUE(GetParser()->IsEmpty()); |
// Check that the commands did happen. |
Mock::VerifyAndClearExpectations(api_mock_.get()); |
@@ -309,4 +307,32 @@ TEST_F(CommandBufferHelperTest, TestToken) { |
EXPECT_EQ(error::kNoError, GetError()); |
} |
+TEST_F(CommandBufferHelperTest, FreeRingBuffer) { |
+ EXPECT_TRUE(helper_->HaveRingBuffer()); |
+ |
+ // Test freeing ring buffer. |
+ helper_->FreeRingBuffer(); |
+ EXPECT_FALSE(helper_->HaveRingBuffer()); |
+ |
+ // Test that InsertToken allocates a new one |
+ int32 token = helper_->InsertToken(); |
+ EXPECT_TRUE(helper_->HaveRingBuffer()); |
+ EXPECT_CALL(*api_mock_.get(), DoCommand(cmd::kSetToken, 1, _)) |
+ .WillOnce(DoAll(Invoke(api_mock_.get(), &AsyncAPIMock::SetToken), |
+ Return(error::kNoError))); |
+ helper_->WaitForToken(token); |
+ helper_->FreeRingBuffer(); |
+ EXPECT_FALSE(helper_->HaveRingBuffer()); |
+ |
+ // Test that WaitForAvailableEntries allocates a new one |
+ AddCommandWithExpect(error::kNoError, kUnusedCommandId, 0, NULL); |
+ EXPECT_TRUE(helper_->HaveRingBuffer()); |
+ helper_->Finish(); |
+ helper_->FreeRingBuffer(); |
+ EXPECT_FALSE(helper_->HaveRingBuffer()); |
+ |
+ // Check that the commands did happen. |
+ Mock::VerifyAndClearExpectations(api_mock_.get()); |
+} |
+ |
} // namespace gpu |