Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Side by Side Diff: gpu/command_buffer/service/gpu_processor_unittest.cc

Issue 465040: Added CommandBufferClient, CommandBufferStub and some IPC messages.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 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 #include "base/at_exit.h" 5 #include "base/at_exit.h"
6 #include "base/message_loop.h" 6 #include "base/message_loop.h"
7 #include "gpu/command_buffer/common/command_buffer_mock.h" 7 #include "gpu/command_buffer/common/command_buffer_mock.h"
8 #include "gpu/command_buffer/service/mocks.h" 8 #include "gpu/command_buffer/service/mocks.h"
9 #include "gpu/command_buffer/service/gpu_processor.h" 9 #include "gpu/command_buffer/service/gpu_processor.h"
10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 10 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
11 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
12 #include "testing/gmock/include/gmock/gmock.h" 12 #include "testing/gmock/include/gmock/gmock.h"
13 13
14 using testing::_; 14 using testing::_;
15 using testing::DoAll; 15 using testing::DoAll;
16 using testing::Invoke; 16 using testing::Invoke;
17 using testing::NiceMock; 17 using testing::NiceMock;
18 using testing::Return; 18 using testing::Return;
19 using testing::SetArgumentPointee; 19 using testing::SetArgumentPointee;
20 using testing::StrictMock; 20 using testing::StrictMock;
21 21
22 namespace command_buffer { 22 namespace gpu {
23 23
24 const size_t kRingBufferSize = 1024; 24 const size_t kRingBufferSize = 1024;
25 const size_t kRingBufferEntries = kRingBufferSize / sizeof(int32); 25 const size_t kRingBufferEntries = kRingBufferSize / sizeof(CommandBufferEntry);
26 26
27 class GPUProcessorTest : public testing::Test { 27 class GPUProcessorTest : public testing::Test {
28 protected: 28 protected:
29 virtual void SetUp() { 29 virtual void SetUp() {
30 shared_memory_.reset(new ::base::SharedMemory); 30 shared_memory_.reset(new ::base::SharedMemory);
31 shared_memory_->Create(std::wstring(), false, false, kRingBufferSize); 31 shared_memory_->Create(std::wstring(), false, false, kRingBufferSize);
32 shared_memory_->Map(kRingBufferSize); 32 shared_memory_->Map(kRingBufferSize);
33 buffer_ = static_cast<int32*>(shared_memory_->memory()); 33 buffer_ = static_cast<int32*>(shared_memory_->memory());
34 34
35 memset(buffer_, 0, kRingBufferSize); 35 memset(buffer_, 0, kRingBufferSize);
36 36
37 command_buffer_.reset(new MockCommandBuffer); 37 command_buffer_.reset(new MockCommandBuffer);
38 ON_CALL(*command_buffer_.get(), GetRingBuffer()) 38 ON_CALL(*command_buffer_.get(), GetRingBuffer())
39 .WillByDefault(Return(shared_memory_.get())); 39 .WillByDefault(Return(shared_memory_.get()));
40 ON_CALL(*command_buffer_.get(), GetSize()) 40 ON_CALL(*command_buffer_.get(), GetSize())
41 .WillByDefault(Return(kRingBufferEntries)); 41 .WillByDefault(Return(kRingBufferEntries));
42 42
43 async_api_.reset(new StrictMock<command_buffer::AsyncAPIMock>); 43 async_api_.reset(new StrictMock<gpu::AsyncAPIMock>);
44 44
45 decoder_ = gles2::GLES2Decoder::Create(); 45 decoder_ = gles2::GLES2Decoder::Create();
46 46
47 parser_ = new command_buffer::CommandParser(buffer_, 47 parser_ = new gpu::CommandParser(buffer_,
48 kRingBufferEntries, 48 kRingBufferEntries,
49 0, 49 0,
50 kRingBufferEntries, 50 kRingBufferEntries,
51 0, 51 0,
52 async_api_.get()); 52 async_api_.get());
53 53
54 processor_ = new GPUProcessor(command_buffer_.get(), 54 processor_ = new GPUProcessor(command_buffer_.get(),
55 decoder_, 55 decoder_,
56 parser_, 56 parser_,
57 2); 57 2);
58 } 58 }
59 59
60 virtual void TearDown() { 60 virtual void TearDown() {
61 // Ensure that any unexpected tasks posted by the GPU processor are executed 61 // Ensure that any unexpected tasks posted by the GPU processor are executed
62 // in order to fail the test. 62 // in order to fail the test.
63 MessageLoop::current()->RunAllPending(); 63 MessageLoop::current()->RunAllPending();
64 } 64 }
65 65
66 base::AtExitManager at_exit_manager; 66 base::AtExitManager at_exit_manager;
67 MessageLoop message_loop; 67 MessageLoop message_loop;
68 scoped_ptr<MockCommandBuffer> command_buffer_; 68 scoped_ptr<MockCommandBuffer> command_buffer_;
69 scoped_ptr<::base::SharedMemory> shared_memory_; 69 scoped_ptr<::base::SharedMemory> shared_memory_;
70 int32* buffer_; 70 int32* buffer_;
71 command_buffer::gles2::GLES2Decoder* decoder_; 71 gpu::gles2::GLES2Decoder* decoder_;
72 command_buffer::CommandParser* parser_; 72 gpu::CommandParser* parser_;
73 scoped_ptr<command_buffer::AsyncAPIMock> async_api_; 73 scoped_ptr<gpu::AsyncAPIMock> async_api_;
74 scoped_refptr<GPUProcessor> processor_; 74 scoped_refptr<GPUProcessor> processor_;
75 }; 75 };
76 76
77 TEST_F(GPUProcessorTest, ProcessorDoesNothingIfRingBufferIsEmpty) { 77 TEST_F(GPUProcessorTest, ProcessorDoesNothingIfRingBufferIsEmpty) {
78 EXPECT_CALL(*command_buffer_, GetPutOffset()) 78 EXPECT_CALL(*command_buffer_, GetPutOffset())
79 .WillOnce(Return(0)); 79 .WillOnce(Return(0));
80 EXPECT_CALL(*command_buffer_, SetGetOffset(0)); 80 EXPECT_CALL(*command_buffer_, SetGetOffset(0));
81 81
82 processor_->ProcessCommands(); 82 processor_->ProcessCommands();
83 83
84 EXPECT_EQ(command_buffer::parse_error::kParseNoError, 84 EXPECT_EQ(gpu::parse_error::kParseNoError,
85 command_buffer_->ResetParseError()); 85 command_buffer_->ResetParseError());
86 EXPECT_FALSE(command_buffer_->GetErrorStatus()); 86 EXPECT_FALSE(command_buffer_->GetErrorStatus());
87 } 87 }
88 88
89 TEST_F(GPUProcessorTest, ProcessesOneCommand) { 89 TEST_F(GPUProcessorTest, ProcessesOneCommand) {
90 command_buffer::CommandHeader* header = 90 gpu::CommandHeader* header =
91 reinterpret_cast<command_buffer::CommandHeader*>(&buffer_[0]); 91 reinterpret_cast<gpu::CommandHeader*>(&buffer_[0]);
92 header[0].command = 7; 92 header[0].command = 7;
93 header[0].size = 2; 93 header[0].size = 2;
94 buffer_[1] = 123; 94 buffer_[1] = 123;
95 95
96 EXPECT_CALL(*command_buffer_, GetPutOffset()) 96 EXPECT_CALL(*command_buffer_, GetPutOffset())
97 .WillOnce(Return(2)); 97 .WillOnce(Return(2));
98 EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 98 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
99 99
100 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 100 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
101 .WillOnce(Return(command_buffer::parse_error::kParseNoError)); 101 .WillOnce(Return(gpu::parse_error::kParseNoError));
102 102
103 processor_->ProcessCommands(); 103 processor_->ProcessCommands();
104 104
105 EXPECT_EQ(command_buffer::parse_error::kParseNoError, 105 EXPECT_EQ(gpu::parse_error::kParseNoError,
106 command_buffer_->ResetParseError()); 106 command_buffer_->ResetParseError());
107 EXPECT_FALSE(command_buffer_->GetErrorStatus()); 107 EXPECT_FALSE(command_buffer_->GetErrorStatus());
108 } 108 }
109 109
110 TEST_F(GPUProcessorTest, ProcessesTwoCommands) { 110 TEST_F(GPUProcessorTest, ProcessesTwoCommands) {
111 command_buffer::CommandHeader* header = 111 gpu::CommandHeader* header =
112 reinterpret_cast<command_buffer::CommandHeader*>(&buffer_[0]); 112 reinterpret_cast<gpu::CommandHeader*>(&buffer_[0]);
113 header[0].command = 7; 113 header[0].command = 7;
114 header[0].size = 2; 114 header[0].size = 2;
115 buffer_[1] = 123; 115 buffer_[1] = 123;
116 header[2].command = 8; 116 header[2].command = 8;
117 header[2].size = 1; 117 header[2].size = 1;
118 118
119 EXPECT_CALL(*command_buffer_, GetPutOffset()) 119 EXPECT_CALL(*command_buffer_, GetPutOffset())
120 .WillOnce(Return(3)); 120 .WillOnce(Return(3));
121 EXPECT_CALL(*command_buffer_, SetGetOffset(3)); 121 EXPECT_CALL(*command_buffer_, SetGetOffset(3));
122 122
123 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 123 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
124 .WillOnce(Return(command_buffer::parse_error::kParseNoError)); 124 .WillOnce(Return(gpu::parse_error::kParseNoError));
125 125
126 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2])) 126 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2]))
127 .WillOnce(Return(command_buffer::parse_error::kParseNoError)); 127 .WillOnce(Return(gpu::parse_error::kParseNoError));
128 128
129 processor_->ProcessCommands(); 129 processor_->ProcessCommands();
130 } 130 }
131 131
132 TEST_F(GPUProcessorTest, PostsTaskToFinishRemainingCommands) { 132 TEST_F(GPUProcessorTest, PostsTaskToFinishRemainingCommands) {
133 command_buffer::CommandHeader* header = 133 gpu::CommandHeader* header =
134 reinterpret_cast<command_buffer::CommandHeader*>(&buffer_[0]); 134 reinterpret_cast<gpu::CommandHeader*>(&buffer_[0]);
135 header[0].command = 7; 135 header[0].command = 7;
136 header[0].size = 2; 136 header[0].size = 2;
137 buffer_[1] = 123; 137 buffer_[1] = 123;
138 header[2].command = 8; 138 header[2].command = 8;
139 header[2].size = 1; 139 header[2].size = 1;
140 header[3].command = 9; 140 header[3].command = 9;
141 header[3].size = 1; 141 header[3].size = 1;
142 142
143 EXPECT_CALL(*command_buffer_, GetPutOffset()) 143 EXPECT_CALL(*command_buffer_, GetPutOffset())
144 .WillOnce(Return(4)); 144 .WillOnce(Return(4));
145 145
146 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 146 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
147 .WillOnce(Return(command_buffer::parse_error::kParseNoError)); 147 .WillOnce(Return(gpu::parse_error::kParseNoError));
148 148
149 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2])) 149 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2]))
150 .WillOnce(Return(command_buffer::parse_error::kParseNoError)); 150 .WillOnce(Return(gpu::parse_error::kParseNoError));
151 151
152 EXPECT_CALL(*command_buffer_, SetGetOffset(3)); 152 EXPECT_CALL(*command_buffer_, SetGetOffset(3));
153 153
154 processor_->ProcessCommands(); 154 processor_->ProcessCommands();
155 155
156 // ProcessCommands is called a second time when the pending task is run. 156 // ProcessCommands is called a second time when the pending task is run.
157 157
158 EXPECT_CALL(*command_buffer_, GetPutOffset()) 158 EXPECT_CALL(*command_buffer_, GetPutOffset())
159 .WillOnce(Return(4)); 159 .WillOnce(Return(4));
160 160
161 EXPECT_CALL(*async_api_, DoCommand(9, 0, &buffer_[3])) 161 EXPECT_CALL(*async_api_, DoCommand(9, 0, &buffer_[3]))
162 .WillOnce(Return(command_buffer::parse_error::kParseNoError)); 162 .WillOnce(Return(gpu::parse_error::kParseNoError));
163 163
164 EXPECT_CALL(*command_buffer_, SetGetOffset(4)); 164 EXPECT_CALL(*command_buffer_, SetGetOffset(4));
165 165
166 MessageLoop::current()->RunAllPending(); 166 MessageLoop::current()->RunAllPending();
167 } 167 }
168 168
169 TEST_F(GPUProcessorTest, SetsErrorCodeOnCommandBuffer) { 169 TEST_F(GPUProcessorTest, SetsErrorCodeOnCommandBuffer) {
170 command_buffer::CommandHeader* header = 170 gpu::CommandHeader* header =
171 reinterpret_cast<command_buffer::CommandHeader*>(&buffer_[0]); 171 reinterpret_cast<gpu::CommandHeader*>(&buffer_[0]);
172 header[0].command = 7; 172 header[0].command = 7;
173 header[0].size = 1; 173 header[0].size = 1;
174 174
175 EXPECT_CALL(*command_buffer_, GetPutOffset()) 175 EXPECT_CALL(*command_buffer_, GetPutOffset())
176 .WillOnce(Return(1)); 176 .WillOnce(Return(1));
177 EXPECT_CALL(*command_buffer_, SetGetOffset(1)); 177 EXPECT_CALL(*command_buffer_, SetGetOffset(1));
178 178
179 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0])) 179 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0]))
180 .WillOnce(Return( 180 .WillOnce(Return(
181 command_buffer::parse_error::kParseUnknownCommand)); 181 gpu::parse_error::kParseUnknownCommand));
182 182
183 EXPECT_CALL(*command_buffer_, 183 EXPECT_CALL(*command_buffer_,
184 SetParseError(command_buffer::parse_error::kParseUnknownCommand)); 184 SetParseError(gpu::parse_error::kParseUnknownCommand));
185 185
186 processor_->ProcessCommands(); 186 processor_->ProcessCommands();
187 } 187 }
188 188
189 TEST_F(GPUProcessorTest, 189 TEST_F(GPUProcessorTest,
190 RecoverableParseErrorsAreNotClearedByFollowingSuccessfulCommands) { 190 RecoverableParseErrorsAreNotClearedByFollowingSuccessfulCommands) {
191 command_buffer::CommandHeader* header = 191 gpu::CommandHeader* header =
192 reinterpret_cast<command_buffer::CommandHeader*>(&buffer_[0]); 192 reinterpret_cast<gpu::CommandHeader*>(&buffer_[0]);
193 header[0].command = 7; 193 header[0].command = 7;
194 header[0].size = 1; 194 header[0].size = 1;
195 header[1].command = 8; 195 header[1].command = 8;
196 header[1].size = 1; 196 header[1].size = 1;
197 197
198 EXPECT_CALL(*command_buffer_, GetPutOffset()) 198 EXPECT_CALL(*command_buffer_, GetPutOffset())
199 .WillOnce(Return(2)); 199 .WillOnce(Return(2));
200 EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 200 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
201 201
202 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0])) 202 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0]))
203 .WillOnce(Return( 203 .WillOnce(Return(
204 command_buffer::parse_error::kParseUnknownCommand)); 204 gpu::parse_error::kParseUnknownCommand));
205 205
206 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[1])) 206 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[1]))
207 .WillOnce(Return(command_buffer::parse_error::kParseNoError)); 207 .WillOnce(Return(gpu::parse_error::kParseNoError));
208 208
209 EXPECT_CALL(*command_buffer_, 209 EXPECT_CALL(*command_buffer_,
210 SetParseError(command_buffer::parse_error::kParseUnknownCommand)); 210 SetParseError(gpu::parse_error::kParseUnknownCommand));
211 211
212 processor_->ProcessCommands(); 212 processor_->ProcessCommands();
213 } 213 }
214 214
215 TEST_F(GPUProcessorTest, UnrecoverableParseErrorsRaiseTheErrorStatus) { 215 TEST_F(GPUProcessorTest, UnrecoverableParseErrorsRaiseTheErrorStatus) {
216 command_buffer::CommandHeader* header = 216 gpu::CommandHeader* header =
217 reinterpret_cast<command_buffer::CommandHeader*>(&buffer_[0]); 217 reinterpret_cast<gpu::CommandHeader*>(&buffer_[0]);
218 header[0].command = 7; 218 header[0].command = 7;
219 header[0].size = 1; 219 header[0].size = 1;
220 header[1].command = 8; 220 header[1].command = 8;
221 header[1].size = 1; 221 header[1].size = 1;
222 222
223 EXPECT_CALL(*command_buffer_, GetPutOffset()) 223 EXPECT_CALL(*command_buffer_, GetPutOffset())
224 .WillOnce(Return(2)); 224 .WillOnce(Return(2));
225 225
226 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0])) 226 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0]))
227 .WillOnce(Return(command_buffer::parse_error::kParseInvalidSize)); 227 .WillOnce(Return(gpu::parse_error::kParseInvalidSize));
228 228
229 EXPECT_CALL(*command_buffer_, 229 EXPECT_CALL(*command_buffer_,
230 SetParseError(command_buffer::parse_error::kParseInvalidSize)); 230 SetParseError(gpu::parse_error::kParseInvalidSize));
231 231
232 EXPECT_CALL(*command_buffer_, RaiseErrorStatus()); 232 EXPECT_CALL(*command_buffer_, RaiseErrorStatus());
233 233
234 processor_->ProcessCommands(); 234 processor_->ProcessCommands();
235 } 235 }
236 236
237 TEST_F(GPUProcessorTest, ProcessCommandsDoesNothingAfterUnrecoverableError) { 237 TEST_F(GPUProcessorTest, ProcessCommandsDoesNothingAfterUnrecoverableError) {
238 EXPECT_CALL(*command_buffer_, GetErrorStatus()) 238 EXPECT_CALL(*command_buffer_, GetErrorStatus())
239 .WillOnce(Return(true)); 239 .WillOnce(Return(true));
240 240
(...skipping 26 matching lines...) Expand all
267 .WillOnce(Return(shared_memory_.get())); 267 .WillOnce(Return(shared_memory_.get()));
268 268
269 EXPECT_EQ(kRingBufferSize, processor_->GetSharedMemorySize(7)); 269 EXPECT_EQ(kRingBufferSize, processor_->GetSharedMemorySize(7));
270 } 270 }
271 271
272 TEST_F(GPUProcessorTest, SetTokenForwardsToCommandBuffer) { 272 TEST_F(GPUProcessorTest, SetTokenForwardsToCommandBuffer) {
273 EXPECT_CALL(*command_buffer_, SetToken(7)); 273 EXPECT_CALL(*command_buffer_, SetToken(7));
274 processor_->set_token(7); 274 processor_->set_token(7);
275 } 275 }
276 276
277 } // namespace command_buffer 277 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gpu_processor_mock.h ('k') | gpu/command_buffer/service/gpu_processor_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698