| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 // Tests for the command parser. | 5 // Tests for the command parser. |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 9 #include "gpu/command_buffer/service/cmd_parser.h" | 9 #include "gpu/command_buffer/service/cmd_parser.h" |
| 10 #include "gpu/command_buffer/service/mocks.h" | 10 #include "gpu/command_buffer/service/mocks.h" |
| 11 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
| 12 | 12 |
| 13 namespace gpu { | 13 namespace gpu { |
| 14 | 14 |
| 15 using testing::_; |
| 16 using testing::Invoke; |
| 17 using testing::Mock; |
| 15 using testing::Return; | 18 using testing::Return; |
| 16 using testing::Mock; | 19 using testing::Sequence; |
| 20 using testing::SetArgPointee; |
| 17 using testing::Truly; | 21 using testing::Truly; |
| 18 using testing::Sequence; | |
| 19 using testing::_; | |
| 20 | 22 |
| 21 // Test fixture for CommandParser test - Creates a mock AsyncAPIInterface, and | 23 // Test fixture for CommandParser test - Creates a mock AsyncAPIInterface, and |
| 22 // a fixed size memory buffer. Also provides a simple API to create a | 24 // a fixed size memory buffer. Also provides a simple API to create a |
| 23 // CommandParser. | 25 // CommandParser. |
| 24 class CommandParserTest : public testing::Test { | 26 class CommandParserTest : public testing::Test { |
| 25 protected: | 27 protected: |
| 26 virtual void SetUp() { | 28 virtual void SetUp() { |
| 27 api_mock_.reset(new AsyncAPIMock); | 29 api_mock_.reset(new AsyncAPIMock(false)); |
| 28 buffer_entry_count_ = 20; | 30 buffer_entry_count_ = 20; |
| 29 buffer_.reset(new CommandBufferEntry[buffer_entry_count_]); | 31 buffer_.reset(new CommandBufferEntry[buffer_entry_count_]); |
| 30 } | 32 } |
| 31 virtual void TearDown() {} | 33 virtual void TearDown() {} |
| 32 | 34 |
| 33 // Adds a DoCommand expectation in the mock. | 35 void AddDoCommandsExpect(error::Error _return, |
| 34 void AddDoCommandExpect(error::Error _return, | 36 unsigned int num_commands, |
| 35 unsigned int command, | 37 int num_entries, |
| 36 unsigned int arg_count, | 38 int num_processed) { |
| 37 CommandBufferEntry *args) { | 39 EXPECT_CALL(*api_mock_, DoCommands(num_commands, _, num_entries, _)) |
| 38 EXPECT_CALL(*api_mock(), DoCommand(command, arg_count, | |
| 39 Truly(AsyncAPIMock::IsArgs(arg_count, args)))) | |
| 40 .InSequence(sequence_) | 40 .InSequence(sequence_) |
| 41 .WillOnce(Return(_return)); | 41 .WillOnce(DoAll(SetArgPointee<3>(num_processed), Return(_return))); |
| 42 } | 42 } |
| 43 | 43 |
| 44 // Creates a parser, with a buffer of the specified size (in entries). | 44 // Creates a parser, with a buffer of the specified size (in entries). |
| 45 CommandParser *MakeParser(unsigned int entry_count) { | 45 CommandParser *MakeParser(unsigned int entry_count) { |
| 46 size_t shm_size = buffer_entry_count_ * | 46 size_t shm_size = buffer_entry_count_ * |
| 47 sizeof(CommandBufferEntry); // NOLINT | 47 sizeof(CommandBufferEntry); // NOLINT |
| 48 size_t command_buffer_size = entry_count * | 48 size_t command_buffer_size = entry_count * |
| 49 sizeof(CommandBufferEntry); // NOLINT | 49 sizeof(CommandBufferEntry); // NOLINT |
| 50 DCHECK_LE(command_buffer_size, shm_size); | 50 DCHECK_LE(command_buffer_size, shm_size); |
| 51 CommandParser* parser = new CommandParser(api_mock()); | 51 CommandParser* parser = new CommandParser(api_mock()); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 75 // Tests simple commands. | 75 // Tests simple commands. |
| 76 TEST_F(CommandParserTest, TestSimple) { | 76 TEST_F(CommandParserTest, TestSimple) { |
| 77 scoped_ptr<CommandParser> parser(MakeParser(10)); | 77 scoped_ptr<CommandParser> parser(MakeParser(10)); |
| 78 CommandBufferOffset put = parser->put(); | 78 CommandBufferOffset put = parser->put(); |
| 79 CommandHeader header; | 79 CommandHeader header; |
| 80 | 80 |
| 81 // add a single command, no args | 81 // add a single command, no args |
| 82 header.size = 1; | 82 header.size = 1; |
| 83 header.command = 123; | 83 header.command = 123; |
| 84 buffer()[put++].value_header = header; | 84 buffer()[put++].value_header = header; |
| 85 | |
| 86 parser->set_put(put); | 85 parser->set_put(put); |
| 87 EXPECT_EQ(put, parser->put()); | 86 EXPECT_EQ(put, parser->put()); |
| 88 | 87 |
| 89 AddDoCommandExpect(error::kNoError, 123, 0, NULL); | 88 AddDoCommandsExpect(error::kNoError, 1, 1, 1); |
| 90 EXPECT_EQ(error::kNoError, parser->ProcessCommand()); | 89 EXPECT_EQ(error::kNoError, parser->ProcessCommands(1)); |
| 91 EXPECT_EQ(put, parser->get()); | 90 EXPECT_EQ(put, parser->get()); |
| 92 Mock::VerifyAndClearExpectations(api_mock()); | 91 Mock::VerifyAndClearExpectations(api_mock()); |
| 93 | 92 |
| 94 // add a single command, 2 args | 93 // add a single command, 2 args |
| 95 header.size = 3; | 94 header.size = 3; |
| 96 header.command = 456; | 95 header.command = 456; |
| 97 buffer()[put++].value_header = header; | 96 buffer()[put++].value_header = header; |
| 98 buffer()[put++].value_int32 = 2134; | 97 buffer()[put++].value_int32 = 2134; |
| 99 buffer()[put++].value_float = 1.f; | 98 buffer()[put++].value_float = 1.f; |
| 100 | |
| 101 parser->set_put(put); | 99 parser->set_put(put); |
| 102 EXPECT_EQ(put, parser->put()); | 100 EXPECT_EQ(put, parser->put()); |
| 103 | 101 |
| 104 CommandBufferEntry param_array[2]; | 102 AddDoCommandsExpect(error::kNoError, 1, 3, 3); |
| 105 param_array[0].value_int32 = 2134; | 103 EXPECT_EQ(error::kNoError, parser->ProcessCommands(1)); |
| 106 param_array[1].value_float = 1.f; | |
| 107 AddDoCommandExpect(error::kNoError, 456, 2, param_array); | |
| 108 EXPECT_EQ(error::kNoError, parser->ProcessCommand()); | |
| 109 EXPECT_EQ(put, parser->get()); | 104 EXPECT_EQ(put, parser->get()); |
| 110 Mock::VerifyAndClearExpectations(api_mock()); | 105 Mock::VerifyAndClearExpectations(api_mock()); |
| 111 } | 106 } |
| 112 | 107 |
| 113 // Tests having multiple commands in the buffer. | 108 // Tests having multiple commands in the buffer. |
| 114 TEST_F(CommandParserTest, TestMultipleCommands) { | 109 TEST_F(CommandParserTest, TestMultipleCommands) { |
| 115 scoped_ptr<CommandParser> parser(MakeParser(10)); | 110 scoped_ptr<CommandParser> parser(MakeParser(10)); |
| 116 CommandBufferOffset put = parser->put(); | 111 CommandBufferOffset put = parser->put(); |
| 117 CommandHeader header; | 112 CommandHeader header; |
| 118 | 113 |
| 119 // add 2 commands, test with single ProcessCommand() | 114 // add 2 commands, test with single ProcessCommands() |
| 120 header.size = 2; | 115 header.size = 2; |
| 121 header.command = 789; | 116 header.command = 789; |
| 122 buffer()[put++].value_header = header; | 117 buffer()[put++].value_header = header; |
| 123 buffer()[put++].value_int32 = 5151; | 118 buffer()[put++].value_int32 = 5151; |
| 124 | 119 |
| 125 CommandBufferOffset put_cmd2 = put; | 120 CommandBufferOffset put_cmd2 = put; |
| 126 header.size = 2; | 121 header.size = 2; |
| 127 header.command = 876; | 122 header.command = 876; |
| 128 buffer()[put++].value_header = header; | 123 buffer()[put++].value_header = header; |
| 129 buffer()[put++].value_int32 = 3434; | 124 buffer()[put++].value_int32 = 3434; |
| 130 | |
| 131 parser->set_put(put); | 125 parser->set_put(put); |
| 132 EXPECT_EQ(put, parser->put()); | 126 EXPECT_EQ(put, parser->put()); |
| 133 | 127 |
| 134 CommandBufferEntry param_array[2]; | 128 // Process up to 1 command. 4 entries remaining. |
| 135 param_array[0].value_int32 = 5151; | 129 AddDoCommandsExpect(error::kNoError, 1, 4, 2); |
| 136 AddDoCommandExpect(error::kNoError, 789, 1, param_array); | 130 EXPECT_EQ(error::kNoError, parser->ProcessCommands(1)); |
| 137 param_array[1].value_int32 = 3434; | 131 EXPECT_EQ(put_cmd2, parser->get()); |
| 138 AddDoCommandExpect(error::kNoError, 876, 1, | |
| 139 param_array+1); | |
| 140 | 132 |
| 141 EXPECT_EQ(error::kNoError, parser->ProcessCommand()); | 133 // Process up to 1 command. 2 entries remaining. |
| 142 EXPECT_EQ(put_cmd2, parser->get()); | 134 AddDoCommandsExpect(error::kNoError, 1, 2, 2); |
| 143 EXPECT_EQ(error::kNoError, parser->ProcessCommand()); | 135 EXPECT_EQ(error::kNoError, parser->ProcessCommands(1)); |
| 144 EXPECT_EQ(put, parser->get()); | 136 EXPECT_EQ(put, parser->get()); |
| 145 Mock::VerifyAndClearExpectations(api_mock()); | 137 Mock::VerifyAndClearExpectations(api_mock()); |
| 146 | 138 |
| 147 // add 2 commands again, test with ProcessAllCommands() | 139 // add 2 commands again, test with ProcessAllCommands() |
| 148 header.size = 2; | 140 header.size = 2; |
| 149 header.command = 123; | 141 header.command = 123; |
| 150 buffer()[put++].value_header = header; | 142 buffer()[put++].value_header = header; |
| 151 buffer()[put++].value_int32 = 5656; | 143 buffer()[put++].value_int32 = 5656; |
| 152 | 144 |
| 153 header.size = 2; | 145 header.size = 2; |
| 154 header.command = 321; | 146 header.command = 321; |
| 155 buffer()[put++].value_header = header; | 147 buffer()[put++].value_header = header; |
| 156 buffer()[put++].value_int32 = 7878; | 148 buffer()[put++].value_int32 = 7878; |
| 157 | |
| 158 parser->set_put(put); | 149 parser->set_put(put); |
| 159 EXPECT_EQ(put, parser->put()); | 150 EXPECT_EQ(put, parser->put()); |
| 160 | 151 |
| 161 param_array[0].value_int32 = 5656; | 152 // 4 entries remaining. |
| 162 AddDoCommandExpect(error::kNoError, 123, 1, param_array); | 153 AddDoCommandsExpect( |
| 163 param_array[1].value_int32 = 7878; | 154 error::kNoError, CommandParser::kParseCommandsSlice, 4, 4); |
| 164 AddDoCommandExpect(error::kNoError, 321, 1, | |
| 165 param_array+1); | |
| 166 | |
| 167 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); | 155 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); |
| 168 EXPECT_EQ(put, parser->get()); | 156 EXPECT_EQ(put, parser->get()); |
| 169 Mock::VerifyAndClearExpectations(api_mock()); | 157 Mock::VerifyAndClearExpectations(api_mock()); |
| 170 } | 158 } |
| 171 | 159 |
| 172 // Tests that the parser will wrap correctly at the end of the buffer. | 160 // Tests that the parser will wrap correctly at the end of the buffer. |
| 173 TEST_F(CommandParserTest, TestWrap) { | 161 TEST_F(CommandParserTest, TestWrap) { |
| 174 scoped_ptr<CommandParser> parser(MakeParser(5)); | 162 scoped_ptr<CommandParser> parser(MakeParser(5)); |
| 175 CommandBufferOffset put = parser->put(); | 163 CommandBufferOffset put = parser->put(); |
| 176 CommandHeader header; | 164 CommandHeader header; |
| 177 | 165 |
| 178 // add 3 commands with no args (1 word each) | 166 // add 3 commands with no args (1 word each) |
| 179 for (unsigned int i = 0; i < 3; ++i) { | 167 for (unsigned int i = 0; i < 3; ++i) { |
| 180 header.size = 1; | 168 header.size = 1; |
| 181 header.command = i; | 169 header.command = i; |
| 182 buffer()[put++].value_header = header; | 170 buffer()[put++].value_header = header; |
| 183 AddDoCommandExpect(error::kNoError, i, 0, NULL); | |
| 184 } | 171 } |
| 185 parser->set_put(put); | 172 parser->set_put(put); |
| 186 EXPECT_EQ(put, parser->put()); | 173 EXPECT_EQ(put, parser->put()); |
| 187 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); | 174 |
| 175 // Process up to 10 commands. 3 entries remaining to put. |
| 176 AddDoCommandsExpect(error::kNoError, 10, 3, 3); |
| 177 EXPECT_EQ(error::kNoError, parser->ProcessCommands(10)); |
| 188 EXPECT_EQ(put, parser->get()); | 178 EXPECT_EQ(put, parser->get()); |
| 189 Mock::VerifyAndClearExpectations(api_mock()); | 179 Mock::VerifyAndClearExpectations(api_mock()); |
| 190 | 180 |
| 191 // add 1 command with 1 arg (2 words). That should put us at the end of the | 181 // add 1 command with 1 arg (2 words). That should put us at the end of the |
| 192 // buffer. | 182 // buffer. |
| 193 header.size = 2; | 183 header.size = 2; |
| 194 header.command = 3; | 184 header.command = 3; |
| 195 buffer()[put++].value_header = header; | 185 buffer()[put++].value_header = header; |
| 196 buffer()[put++].value_int32 = 5; | 186 buffer()[put++].value_int32 = 5; |
| 197 CommandBufferEntry param; | |
| 198 param.value_int32 = 5; | |
| 199 AddDoCommandExpect(error::kNoError, 3, 1, ¶m); | |
| 200 | 187 |
| 201 DCHECK_EQ(5, put); | 188 DCHECK_EQ(5, put); |
| 202 put = 0; | 189 put = 0; |
| 203 parser->set_put(put); | |
| 204 EXPECT_EQ(put, parser->put()); | |
| 205 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); | |
| 206 EXPECT_EQ(put, parser->get()); | |
| 207 Mock::VerifyAndClearExpectations(api_mock()); | |
| 208 | 190 |
| 209 // add 1 command with 1 arg (2 words). | 191 // add 1 command with 1 arg (2 words). |
| 210 header.size = 2; | 192 header.size = 2; |
| 211 header.command = 4; | 193 header.command = 4; |
| 212 buffer()[put++].value_header = header; | 194 buffer()[put++].value_header = header; |
| 213 buffer()[put++].value_int32 = 6; | 195 buffer()[put++].value_int32 = 6; |
| 214 param.value_int32 = 6; | 196 |
| 215 AddDoCommandExpect(error::kNoError, 4, 1, ¶m); | 197 // 2 entries remaining to end of buffer. |
| 198 AddDoCommandsExpect( |
| 199 error::kNoError, CommandParser::kParseCommandsSlice, 2, 2); |
| 200 // 2 entries remaining to put. |
| 201 AddDoCommandsExpect( |
| 202 error::kNoError, CommandParser::kParseCommandsSlice, 2, 2); |
| 216 parser->set_put(put); | 203 parser->set_put(put); |
| 217 EXPECT_EQ(put, parser->put()); | 204 EXPECT_EQ(put, parser->put()); |
| 205 |
| 218 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); | 206 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); |
| 219 EXPECT_EQ(put, parser->get()); | 207 EXPECT_EQ(put, parser->get()); |
| 220 Mock::VerifyAndClearExpectations(api_mock()); | 208 Mock::VerifyAndClearExpectations(api_mock()); |
| 221 } | 209 } |
| 222 | 210 |
| 223 // Tests error conditions. | 211 // Tests error conditions. |
| 224 TEST_F(CommandParserTest, TestError) { | 212 TEST_F(CommandParserTest, TestError) { |
| 225 const unsigned int kNumEntries = 5; | 213 const unsigned int kNumEntries = 5; |
| 226 scoped_ptr<CommandParser> parser(MakeParser(kNumEntries)); | 214 scoped_ptr<CommandParser> parser(MakeParser(kNumEntries)); |
| 227 CommandBufferOffset put = parser->put(); | 215 CommandBufferOffset put = parser->put(); |
| 228 CommandHeader header; | 216 CommandHeader header; |
| 229 | 217 |
| 230 EXPECT_FALSE(parser->set_get(-1)); | 218 EXPECT_FALSE(parser->set_get(-1)); |
| 231 EXPECT_FALSE(parser->set_get(kNumEntries)); | 219 EXPECT_FALSE(parser->set_get(kNumEntries)); |
| 232 | 220 |
| 233 // Generate a command with size 0. | 221 // Generate a command with size 0. |
| 234 header.size = 0; | 222 header.size = 0; |
| 235 header.command = 3; | 223 header.command = 3; |
| 236 buffer()[put++].value_header = header; | 224 buffer()[put++].value_header = header; |
| 237 | 225 |
| 238 parser->set_put(put); | 226 parser->set_put(put); |
| 239 EXPECT_EQ(put, parser->put()); | 227 EXPECT_EQ(put, parser->put()); |
| 228 |
| 229 AddDoCommandsExpect( |
| 230 error::kInvalidSize, CommandParser::kParseCommandsSlice, 1, 0); |
| 240 EXPECT_EQ(error::kInvalidSize, | 231 EXPECT_EQ(error::kInvalidSize, |
| 241 parser->ProcessAllCommands()); | 232 parser->ProcessAllCommands()); |
| 242 // check that no DoCommand call was made. | 233 // check that no DoCommand call was made. |
| 243 Mock::VerifyAndClearExpectations(api_mock()); | 234 Mock::VerifyAndClearExpectations(api_mock()); |
| 244 | 235 |
| 245 parser.reset(MakeParser(5)); | 236 parser.reset(MakeParser(5)); |
| 246 put = parser->put(); | 237 put = parser->put(); |
| 247 | 238 |
| 248 // Generate a command with size 6, extends beyond the end of the buffer. | 239 // Generate a command with size 6, extends beyond the end of the buffer. |
| 249 header.size = 6; | 240 header.size = 6; |
| 250 header.command = 3; | 241 header.command = 3; |
| 251 buffer()[put++].value_header = header; | 242 buffer()[put++].value_header = header; |
| 252 | 243 |
| 253 parser->set_put(put); | 244 parser->set_put(put); |
| 254 EXPECT_EQ(put, parser->put()); | 245 EXPECT_EQ(put, parser->put()); |
| 246 |
| 247 AddDoCommandsExpect( |
| 248 error::kOutOfBounds, CommandParser::kParseCommandsSlice, 1, 0); |
| 255 EXPECT_EQ(error::kOutOfBounds, | 249 EXPECT_EQ(error::kOutOfBounds, |
| 256 parser->ProcessAllCommands()); | 250 parser->ProcessAllCommands()); |
| 257 // check that no DoCommand call was made. | 251 // check that no DoCommand call was made. |
| 258 Mock::VerifyAndClearExpectations(api_mock()); | 252 Mock::VerifyAndClearExpectations(api_mock()); |
| 259 | 253 |
| 260 parser.reset(MakeParser(5)); | 254 parser.reset(MakeParser(5)); |
| 261 put = parser->put(); | 255 put = parser->put(); |
| 262 | 256 |
| 263 // Generates 2 commands. | 257 // Generates 2 commands. |
| 264 header.size = 1; | 258 header.size = 1; |
| 265 header.command = 3; | 259 header.command = 3; |
| 266 buffer()[put++].value_header = header; | 260 buffer()[put++].value_header = header; |
| 267 CommandBufferOffset put_post_fail = put; | 261 CommandBufferOffset put_post_fail = put; |
| 268 header.size = 1; | 262 header.size = 1; |
| 269 header.command = 4; | 263 header.command = 4; |
| 270 buffer()[put++].value_header = header; | 264 buffer()[put++].value_header = header; |
| 271 | 265 |
| 272 parser->set_put(put); | 266 parser->set_put(put); |
| 273 EXPECT_EQ(put, parser->put()); | 267 EXPECT_EQ(put, parser->put()); |
| 274 // have the first command fail to parse. | 268 // have the first command fail to parse. |
| 275 AddDoCommandExpect(error::kUnknownCommand, 3, 0, NULL); | 269 AddDoCommandsExpect( |
| 270 error::kUnknownCommand, CommandParser::kParseCommandsSlice, 2, 1); |
| 276 EXPECT_EQ(error::kUnknownCommand, | 271 EXPECT_EQ(error::kUnknownCommand, |
| 277 parser->ProcessAllCommands()); | 272 parser->ProcessAllCommands()); |
| 278 // check that only one command was executed, and that get reflects that | 273 // check that only one command was executed, and that get reflects that |
| 279 // correctly. | 274 // correctly. |
| 280 EXPECT_EQ(put_post_fail, parser->get()); | 275 EXPECT_EQ(put_post_fail, parser->get()); |
| 281 Mock::VerifyAndClearExpectations(api_mock()); | 276 Mock::VerifyAndClearExpectations(api_mock()); |
| 282 // make the second one succeed, and check that the parser recovered fine. | 277 // make the second one succeed, and check that the parser recovered fine. |
| 283 AddDoCommandExpect(error::kNoError, 4, 0, NULL); | 278 AddDoCommandsExpect( |
| 279 error::kNoError, CommandParser::kParseCommandsSlice, 1, 1); |
| 284 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); | 280 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); |
| 285 EXPECT_EQ(put, parser->get()); | 281 EXPECT_EQ(put, parser->get()); |
| 286 Mock::VerifyAndClearExpectations(api_mock()); | 282 Mock::VerifyAndClearExpectations(api_mock()); |
| 287 } | 283 } |
| 288 | 284 |
| 289 TEST_F(CommandParserTest, SetBuffer) { | 285 TEST_F(CommandParserTest, SetBuffer) { |
| 290 scoped_ptr<CommandParser> parser(MakeParser(3)); | 286 scoped_ptr<CommandParser> parser(MakeParser(3)); |
| 291 CommandBufferOffset put = parser->put(); | 287 CommandBufferOffset put = parser->put(); |
| 292 CommandHeader header; | 288 CommandHeader header; |
| 293 | 289 |
| 294 // add a single command, no args | 290 // add a single command, no args |
| 295 header.size = 2; | 291 header.size = 2; |
| 296 header.command = 123; | 292 header.command = 123; |
| 297 buffer()[put++].value_header = header; | 293 buffer()[put++].value_header = header; |
| 298 buffer()[put++].value_int32 = 456; | 294 buffer()[put++].value_int32 = 456; |
| 295 parser->set_put(put); |
| 299 | 296 |
| 300 CommandBufferEntry param_array[1]; | 297 AddDoCommandsExpect( |
| 301 param_array[0].value_int32 = 456; | 298 error::kNoError, CommandParser::kParseCommandsSlice, 2, 2); |
| 302 | |
| 303 parser->set_put(put); | |
| 304 AddDoCommandExpect(error::kNoError, 123, 1, param_array); | |
| 305 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); | 299 EXPECT_EQ(error::kNoError, parser->ProcessAllCommands()); |
| 306 // We should have advanced 2 entries | 300 // We should have advanced 2 entries |
| 307 EXPECT_EQ(2, parser->get()); | 301 EXPECT_EQ(2, parser->get()); |
| 308 Mock::VerifyAndClearExpectations(api_mock()); | 302 Mock::VerifyAndClearExpectations(api_mock()); |
| 309 | 303 |
| 310 scoped_ptr<CommandBufferEntry[]> buffer2(new CommandBufferEntry[2]); | 304 scoped_ptr<CommandBufferEntry[]> buffer2(new CommandBufferEntry[2]); |
| 311 parser->SetBuffer( | 305 parser->SetBuffer( |
| 312 buffer2.get(), sizeof(CommandBufferEntry) * 2, 0, | 306 buffer2.get(), sizeof(CommandBufferEntry) * 2, 0, |
| 313 sizeof(CommandBufferEntry) * 2); | 307 sizeof(CommandBufferEntry) * 2); |
| 314 // The put and get should have reset to 0. | 308 // The put and get should have reset to 0. |
| 315 EXPECT_EQ(0, parser->get()); | 309 EXPECT_EQ(0, parser->get()); |
| 316 EXPECT_EQ(0, parser->put()); | 310 EXPECT_EQ(0, parser->put()); |
| 317 } | 311 } |
| 318 | 312 |
| 319 } // namespace gpu | 313 } // namespace gpu |
| OLD | NEW |