| Index: gpu/command_buffer/service/cmd_parser_test.cc
|
| diff --git a/gpu/command_buffer/service/cmd_parser_test.cc b/gpu/command_buffer/service/cmd_parser_test.cc
|
| index 232ebe7dd09c1b5edaf28de3a355d74c0d8bf3b2..d880830f661c23edc4f3bf10001c14fa7f5d16ed 100644
|
| --- a/gpu/command_buffer/service/cmd_parser_test.cc
|
| +++ b/gpu/command_buffer/service/cmd_parser_test.cc
|
| @@ -12,11 +12,13 @@
|
|
|
| namespace gpu {
|
|
|
| -using testing::Return;
|
| +using testing::_;
|
| +using testing::Invoke;
|
| using testing::Mock;
|
| -using testing::Truly;
|
| +using testing::Return;
|
| using testing::Sequence;
|
| -using testing::_;
|
| +using testing::SetArgPointee;
|
| +using testing::Truly;
|
|
|
| // Test fixture for CommandParser test - Creates a mock AsyncAPIInterface, and
|
| // a fixed size memory buffer. Also provides a simple API to create a
|
| @@ -24,21 +26,19 @@ using testing::_;
|
| class CommandParserTest : public testing::Test {
|
| protected:
|
| virtual void SetUp() {
|
| - api_mock_.reset(new AsyncAPIMock);
|
| + api_mock_.reset(new AsyncAPIMock(false));
|
| buffer_entry_count_ = 20;
|
| buffer_.reset(new CommandBufferEntry[buffer_entry_count_]);
|
| }
|
| virtual void TearDown() {}
|
|
|
| - // Adds a DoCommand expectation in the mock.
|
| - void AddDoCommandExpect(error::Error _return,
|
| - unsigned int command,
|
| - unsigned int arg_count,
|
| - CommandBufferEntry *args) {
|
| - EXPECT_CALL(*api_mock(), DoCommand(command, arg_count,
|
| - Truly(AsyncAPIMock::IsArgs(arg_count, args))))
|
| + void AddDoCommandsExpect(error::Error _return,
|
| + unsigned int num_commands,
|
| + int num_entries,
|
| + int num_processed) {
|
| + EXPECT_CALL(*api_mock_, DoCommands(num_commands, _, num_entries, _))
|
| .InSequence(sequence_)
|
| - .WillOnce(Return(_return));
|
| + .WillOnce(DoAll(SetArgPointee<3>(num_processed), Return(_return)));
|
| }
|
|
|
| // Creates a parser, with a buffer of the specified size (in entries).
|
| @@ -82,12 +82,11 @@ TEST_F(CommandParserTest, TestSimple) {
|
| header.size = 1;
|
| header.command = 123;
|
| buffer()[put++].value_header = header;
|
| -
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
|
|
| - AddDoCommandExpect(error::kNoError, 123, 0, NULL);
|
| - EXPECT_EQ(error::kNoError, parser->ProcessCommand());
|
| + AddDoCommandsExpect(error::kNoError, 1, 1, 1);
|
| + EXPECT_EQ(error::kNoError, parser->ProcessCommands(1));
|
| EXPECT_EQ(put, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
|
|
| @@ -97,15 +96,11 @@ TEST_F(CommandParserTest, TestSimple) {
|
| buffer()[put++].value_header = header;
|
| buffer()[put++].value_int32 = 2134;
|
| buffer()[put++].value_float = 1.f;
|
| -
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
|
|
| - CommandBufferEntry param_array[2];
|
| - param_array[0].value_int32 = 2134;
|
| - param_array[1].value_float = 1.f;
|
| - AddDoCommandExpect(error::kNoError, 456, 2, param_array);
|
| - EXPECT_EQ(error::kNoError, parser->ProcessCommand());
|
| + AddDoCommandsExpect(error::kNoError, 1, 3, 3);
|
| + EXPECT_EQ(error::kNoError, parser->ProcessCommands(1));
|
| EXPECT_EQ(put, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
| }
|
| @@ -116,7 +111,7 @@ TEST_F(CommandParserTest, TestMultipleCommands) {
|
| CommandBufferOffset put = parser->put();
|
| CommandHeader header;
|
|
|
| - // add 2 commands, test with single ProcessCommand()
|
| + // add 2 commands, test with single ProcessCommands()
|
| header.size = 2;
|
| header.command = 789;
|
| buffer()[put++].value_header = header;
|
| @@ -127,20 +122,17 @@ TEST_F(CommandParserTest, TestMultipleCommands) {
|
| header.command = 876;
|
| buffer()[put++].value_header = header;
|
| buffer()[put++].value_int32 = 3434;
|
| -
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
|
|
| - CommandBufferEntry param_array[2];
|
| - param_array[0].value_int32 = 5151;
|
| - AddDoCommandExpect(error::kNoError, 789, 1, param_array);
|
| - param_array[1].value_int32 = 3434;
|
| - AddDoCommandExpect(error::kNoError, 876, 1,
|
| - param_array+1);
|
| -
|
| - EXPECT_EQ(error::kNoError, parser->ProcessCommand());
|
| + // Process up to 1 command. 4 entries remaining.
|
| + AddDoCommandsExpect(error::kNoError, 1, 4, 2);
|
| + EXPECT_EQ(error::kNoError, parser->ProcessCommands(1));
|
| EXPECT_EQ(put_cmd2, parser->get());
|
| - EXPECT_EQ(error::kNoError, parser->ProcessCommand());
|
| +
|
| + // Process up to 1 command. 2 entries remaining.
|
| + AddDoCommandsExpect(error::kNoError, 1, 2, 2);
|
| + EXPECT_EQ(error::kNoError, parser->ProcessCommands(1));
|
| EXPECT_EQ(put, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
|
|
| @@ -154,16 +146,12 @@ TEST_F(CommandParserTest, TestMultipleCommands) {
|
| header.command = 321;
|
| buffer()[put++].value_header = header;
|
| buffer()[put++].value_int32 = 7878;
|
| -
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
|
|
| - param_array[0].value_int32 = 5656;
|
| - AddDoCommandExpect(error::kNoError, 123, 1, param_array);
|
| - param_array[1].value_int32 = 7878;
|
| - AddDoCommandExpect(error::kNoError, 321, 1,
|
| - param_array+1);
|
| -
|
| + // 4 entries remaining.
|
| + AddDoCommandsExpect(
|
| + error::kNoError, CommandParser::kParseCommandsSlice, 4, 4);
|
| EXPECT_EQ(error::kNoError, parser->ProcessAllCommands());
|
| EXPECT_EQ(put, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
| @@ -180,11 +168,13 @@ TEST_F(CommandParserTest, TestWrap) {
|
| header.size = 1;
|
| header.command = i;
|
| buffer()[put++].value_header = header;
|
| - AddDoCommandExpect(error::kNoError, i, 0, NULL);
|
| }
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
| - EXPECT_EQ(error::kNoError, parser->ProcessAllCommands());
|
| +
|
| + // Process up to 10 commands. 3 entries remaining to put.
|
| + AddDoCommandsExpect(error::kNoError, 10, 3, 3);
|
| + EXPECT_EQ(error::kNoError, parser->ProcessCommands(10));
|
| EXPECT_EQ(put, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
|
|
| @@ -194,27 +184,25 @@ TEST_F(CommandParserTest, TestWrap) {
|
| header.command = 3;
|
| buffer()[put++].value_header = header;
|
| buffer()[put++].value_int32 = 5;
|
| - CommandBufferEntry param;
|
| - param.value_int32 = 5;
|
| - AddDoCommandExpect(error::kNoError, 3, 1, ¶m);
|
|
|
| DCHECK_EQ(5, put);
|
| put = 0;
|
| - parser->set_put(put);
|
| - EXPECT_EQ(put, parser->put());
|
| - EXPECT_EQ(error::kNoError, parser->ProcessAllCommands());
|
| - EXPECT_EQ(put, parser->get());
|
| - Mock::VerifyAndClearExpectations(api_mock());
|
|
|
| // add 1 command with 1 arg (2 words).
|
| header.size = 2;
|
| header.command = 4;
|
| buffer()[put++].value_header = header;
|
| buffer()[put++].value_int32 = 6;
|
| - param.value_int32 = 6;
|
| - AddDoCommandExpect(error::kNoError, 4, 1, ¶m);
|
| +
|
| + // 2 entries remaining to end of buffer.
|
| + AddDoCommandsExpect(
|
| + error::kNoError, CommandParser::kParseCommandsSlice, 2, 2);
|
| + // 2 entries remaining to put.
|
| + AddDoCommandsExpect(
|
| + error::kNoError, CommandParser::kParseCommandsSlice, 2, 2);
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
| +
|
| EXPECT_EQ(error::kNoError, parser->ProcessAllCommands());
|
| EXPECT_EQ(put, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
| @@ -237,6 +225,9 @@ TEST_F(CommandParserTest, TestError) {
|
|
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
| +
|
| + AddDoCommandsExpect(
|
| + error::kInvalidSize, CommandParser::kParseCommandsSlice, 1, 0);
|
| EXPECT_EQ(error::kInvalidSize,
|
| parser->ProcessAllCommands());
|
| // check that no DoCommand call was made.
|
| @@ -252,6 +243,9 @@ TEST_F(CommandParserTest, TestError) {
|
|
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
| +
|
| + AddDoCommandsExpect(
|
| + error::kOutOfBounds, CommandParser::kParseCommandsSlice, 1, 0);
|
| EXPECT_EQ(error::kOutOfBounds,
|
| parser->ProcessAllCommands());
|
| // check that no DoCommand call was made.
|
| @@ -272,7 +266,8 @@ TEST_F(CommandParserTest, TestError) {
|
| parser->set_put(put);
|
| EXPECT_EQ(put, parser->put());
|
| // have the first command fail to parse.
|
| - AddDoCommandExpect(error::kUnknownCommand, 3, 0, NULL);
|
| + AddDoCommandsExpect(
|
| + error::kUnknownCommand, CommandParser::kParseCommandsSlice, 2, 1);
|
| EXPECT_EQ(error::kUnknownCommand,
|
| parser->ProcessAllCommands());
|
| // check that only one command was executed, and that get reflects that
|
| @@ -280,7 +275,8 @@ TEST_F(CommandParserTest, TestError) {
|
| EXPECT_EQ(put_post_fail, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
| // make the second one succeed, and check that the parser recovered fine.
|
| - AddDoCommandExpect(error::kNoError, 4, 0, NULL);
|
| + AddDoCommandsExpect(
|
| + error::kNoError, CommandParser::kParseCommandsSlice, 1, 1);
|
| EXPECT_EQ(error::kNoError, parser->ProcessAllCommands());
|
| EXPECT_EQ(put, parser->get());
|
| Mock::VerifyAndClearExpectations(api_mock());
|
| @@ -296,12 +292,10 @@ TEST_F(CommandParserTest, SetBuffer) {
|
| header.command = 123;
|
| buffer()[put++].value_header = header;
|
| buffer()[put++].value_int32 = 456;
|
| -
|
| - CommandBufferEntry param_array[1];
|
| - param_array[0].value_int32 = 456;
|
| -
|
| parser->set_put(put);
|
| - AddDoCommandExpect(error::kNoError, 123, 1, param_array);
|
| +
|
| + AddDoCommandsExpect(
|
| + error::kNoError, CommandParser::kParseCommandsSlice, 2, 2);
|
| EXPECT_EQ(error::kNoError, parser->ProcessAllCommands());
|
| // We should have advanced 2 entries
|
| EXPECT_EQ(2, parser->get());
|
|
|