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

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

Issue 6883179: Rework FlushSync to return early if commands have been processed since the last update (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: style Created 9 years, 8 months 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
« no previous file with comments | « gpu/command_buffer/service/gpu_scheduler_mock.h ('k') | gpu/demos/framework/Plugin_Info.plist » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 #include "base/mac/scoped_nsautorelease_pool.h" 5 #include "base/mac/scoped_nsautorelease_pool.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/gpu_scheduler.h" 8 #include "gpu/command_buffer/service/gpu_scheduler.h"
9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h" 9 #include "gpu/command_buffer/service/gles2_cmd_decoder.h"
10 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h" 10 #include "gpu/command_buffer/service/gles2_cmd_decoder_mock.h"
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
85 CommandParser* parser_; 85 CommandParser* parser_;
86 scoped_ptr<AsyncAPIMock> async_api_; 86 scoped_ptr<AsyncAPIMock> async_api_;
87 scoped_ptr<GpuScheduler> scheduler_; 87 scoped_ptr<GpuScheduler> scheduler_;
88 }; 88 };
89 89
90 TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) { 90 TEST_F(GpuSchedulerTest, SchedulerDoesNothingIfRingBufferIsEmpty) {
91 CommandBuffer::State state; 91 CommandBuffer::State state;
92 92
93 state.put_offset = 0; 93 state.put_offset = 0;
94 EXPECT_CALL(*command_buffer_, GetState()) 94 EXPECT_CALL(*command_buffer_, GetState())
95 .WillOnce(Return(state)); 95 .WillRepeatedly(Return(state));
96 EXPECT_CALL(*command_buffer_, SetGetOffset(0)); 96 EXPECT_CALL(*command_buffer_, SetGetOffset(0));
97 97
98 EXPECT_CALL(*command_buffer_, SetParseError(_)) 98 EXPECT_CALL(*command_buffer_, SetParseError(_))
99 .Times(0); 99 .Times(0);
100 100
101 scheduler_->ProcessCommands(); 101 scheduler_->PutChanged(true);
102 } 102 }
103 103
104 TEST_F(GpuSchedulerTest, ProcessesOneCommand) { 104 TEST_F(GpuSchedulerTest, ProcessesOneCommand) {
105 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 105 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
106 header[0].command = 7; 106 header[0].command = 7;
107 header[0].size = 2; 107 header[0].size = 2;
108 buffer_[1] = 123; 108 buffer_[1] = 123;
109 109
110 CommandBuffer::State state; 110 CommandBuffer::State state;
111 111
112 state.put_offset = 2; 112 state.put_offset = 2;
113 EXPECT_CALL(*command_buffer_, GetState()) 113 EXPECT_CALL(*command_buffer_, GetState())
114 .WillOnce(Return(state)); 114 .WillRepeatedly(Return(state));
115 EXPECT_CALL(*command_buffer_, SetGetOffset(2)); 115 EXPECT_CALL(*command_buffer_, SetGetOffset(2));
116 116
117 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 117 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
118 .WillOnce(Return(error::kNoError)); 118 .WillOnce(Return(error::kNoError));
119 119
120 EXPECT_CALL(*command_buffer_, SetParseError(_)) 120 EXPECT_CALL(*command_buffer_, SetParseError(_))
121 .Times(0); 121 .Times(0);
122 122
123 scheduler_->ProcessCommands(); 123 scheduler_->PutChanged(true);
124 } 124 }
125 125
126 TEST_F(GpuSchedulerTest, ProcessesTwoCommands) { 126 TEST_F(GpuSchedulerTest, ProcessesTwoCommands) {
127 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 127 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
128 header[0].command = 7; 128 header[0].command = 7;
129 header[0].size = 2; 129 header[0].size = 2;
130 buffer_[1] = 123; 130 buffer_[1] = 123;
131 header[2].command = 8; 131 header[2].command = 8;
132 header[2].size = 1; 132 header[2].size = 1;
133 133
134 CommandBuffer::State state; 134 CommandBuffer::State state;
135 135
136 state.put_offset = 3; 136 state.put_offset = 3;
137 EXPECT_CALL(*command_buffer_, GetState()) 137 EXPECT_CALL(*command_buffer_, GetState())
138 .WillOnce(Return(state)); 138 .WillRepeatedly(Return(state));
139 EXPECT_CALL(*command_buffer_, SetGetOffset(3)); 139 EXPECT_CALL(*command_buffer_, SetGetOffset(3));
140 140
141 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 141 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
142 .WillOnce(Return(error::kNoError)); 142 .WillOnce(Return(error::kNoError));
143 143
144 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2])) 144 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2]))
145 .WillOnce(Return(error::kNoError)); 145 .WillOnce(Return(error::kNoError));
146 146
147 scheduler_->ProcessCommands(); 147 scheduler_->PutChanged(true);
148 } 148 }
149 149
150 TEST_F(GpuSchedulerTest, SchedulerSetsTheGLContext) { 150 TEST_F(GpuSchedulerTest, SchedulerSetsTheGLContext) {
151 EXPECT_CALL(*decoder_, MakeCurrent()) 151 EXPECT_CALL(*decoder_, MakeCurrent())
152 .WillOnce(Return(true)) 152 .WillOnce(Return(true))
153 .WillOnce(Return(true)); 153 .WillOnce(Return(true));
154 154
155 CommandBuffer::State state; 155 CommandBuffer::State state;
156 state.put_offset = 0; 156 state.put_offset = 0;
157 EXPECT_CALL(*command_buffer_, GetState()) 157 EXPECT_CALL(*command_buffer_, GetState())
158 .WillOnce(Return(state)); 158 .WillRepeatedly(Return(state));
159 159
160 EXPECT_CALL(*command_buffer_, SetGetOffset(0)); 160 EXPECT_CALL(*command_buffer_, SetGetOffset(0));
161 161
162 scheduler_->ProcessCommands(); 162 scheduler_->PutChanged(true);
163 } 163 }
164 164
165 TEST_F(GpuSchedulerTest, PostsTaskToFinishRemainingCommands) { 165 TEST_F(GpuSchedulerTest, PostsTaskToFinishRemainingCommands) {
166 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 166 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
167 header[0].command = 7; 167 header[0].command = 7;
168 header[0].size = 2; 168 header[0].size = 2;
169 buffer_[1] = 123; 169 buffer_[1] = 123;
170 header[2].command = 8; 170 header[2].command = 8;
171 header[2].size = 1; 171 header[2].size = 1;
172 header[3].command = 9; 172 header[3].command = 9;
173 header[3].size = 1; 173 header[3].size = 1;
174 174
175 CommandBuffer::State state; 175 CommandBuffer::State state;
176 176
177 state.put_offset = 4; 177 state.put_offset = 4;
178 EXPECT_CALL(*command_buffer_, GetState()) 178 EXPECT_CALL(*command_buffer_, GetState())
179 .WillOnce(Return(state)); 179 .WillRepeatedly(Return(state));
180 180
181 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0])) 181 EXPECT_CALL(*async_api_, DoCommand(7, 1, &buffer_[0]))
182 .WillOnce(Return(error::kNoError)); 182 .WillOnce(Return(error::kNoError));
183 183
184 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2])) 184 EXPECT_CALL(*async_api_, DoCommand(8, 0, &buffer_[2]))
185 .WillOnce(Return(error::kNoError)); 185 .WillOnce(Return(error::kNoError));
186 186
187 EXPECT_CALL(*command_buffer_, SetGetOffset(3)); 187 EXPECT_CALL(*command_buffer_, SetGetOffset(3));
188 188
189 scheduler_->ProcessCommands(); 189 scheduler_->PutChanged(true);
190 190
191 // ProcessCommands is called a second time when the pending task is run. 191 // ProcessCommands is called a second time when the pending task is run.
192 192
193 state.put_offset = 4; 193 state.put_offset = 4;
194 EXPECT_CALL(*command_buffer_, GetState()) 194 EXPECT_CALL(*command_buffer_, GetState())
195 .WillOnce(Return(state)); 195 .WillRepeatedly(Return(state));
196 196
197 EXPECT_CALL(*async_api_, DoCommand(9, 0, &buffer_[3])) 197 EXPECT_CALL(*async_api_, DoCommand(9, 0, &buffer_[3]))
198 .WillOnce(Return(error::kNoError)); 198 .WillOnce(Return(error::kNoError));
199 199
200 EXPECT_CALL(*command_buffer_, SetGetOffset(4)); 200 EXPECT_CALL(*command_buffer_, SetGetOffset(4));
201 201
202 MessageLoop::current()->RunAllPending(); 202 MessageLoop::current()->RunAllPending();
203 } 203 }
204 204
205 TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) { 205 TEST_F(GpuSchedulerTest, SetsErrorCodeOnCommandBuffer) {
206 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]); 206 CommandHeader* header = reinterpret_cast<CommandHeader*>(&buffer_[0]);
207 header[0].command = 7; 207 header[0].command = 7;
208 header[0].size = 1; 208 header[0].size = 1;
209 209
210 CommandBuffer::State state; 210 CommandBuffer::State state;
211 211
212 state.put_offset = 1; 212 state.put_offset = 1;
213 EXPECT_CALL(*command_buffer_, GetState()) 213 EXPECT_CALL(*command_buffer_, GetState())
214 .WillOnce(Return(state)); 214 .WillRepeatedly(Return(state));
215 215
216 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0])) 216 EXPECT_CALL(*async_api_, DoCommand(7, 0, &buffer_[0]))
217 .WillOnce(Return( 217 .WillOnce(Return(
218 error::kUnknownCommand)); 218 error::kUnknownCommand));
219 219
220 EXPECT_CALL(*command_buffer_, 220 EXPECT_CALL(*command_buffer_,
221 SetParseError(error::kUnknownCommand)); 221 SetParseError(error::kUnknownCommand));
222 222
223 scheduler_->ProcessCommands(); 223 scheduler_->PutChanged(true);
224 } 224 }
225 225
226 TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) { 226 TEST_F(GpuSchedulerTest, ProcessCommandsDoesNothingAfterError) {
227 CommandBuffer::State state; 227 CommandBuffer::State state;
228 state.error = error::kGenericError; 228 state.error = error::kGenericError;
229 229
230 EXPECT_CALL(*command_buffer_, GetState()) 230 EXPECT_CALL(*command_buffer_, GetState())
231 .WillOnce(Return(state)); 231 .WillRepeatedly(Return(state));
232 232
233 scheduler_->ProcessCommands(); 233 scheduler_->PutChanged(true);
234 } 234 }
235 235
236 TEST_F(GpuSchedulerTest, CanGetAddressOfSharedMemory) { 236 TEST_F(GpuSchedulerTest, CanGetAddressOfSharedMemory) {
237 EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7)) 237 EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7))
238 .WillOnce(Return(shared_memory_buffer_)); 238 .WillOnce(Return(shared_memory_buffer_));
239 239
240 EXPECT_EQ(&buffer_[0], scheduler_->GetSharedMemoryBuffer(7).ptr); 240 EXPECT_EQ(&buffer_[0], scheduler_->GetSharedMemoryBuffer(7).ptr);
241 } 241 }
242 242
243 ACTION_P2(SetPointee, address, value) { 243 ACTION_P2(SetPointee, address, value) {
244 *address = value; 244 *address = value;
245 } 245 }
246 246
247 TEST_F(GpuSchedulerTest, CanGetSizeOfSharedMemory) { 247 TEST_F(GpuSchedulerTest, CanGetSizeOfSharedMemory) {
248 EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7)) 248 EXPECT_CALL(*command_buffer_.get(), GetTransferBuffer(7))
249 .WillOnce(Return(shared_memory_buffer_)); 249 .WillOnce(Return(shared_memory_buffer_));
250 250
251 EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7).size); 251 EXPECT_EQ(kRingBufferSize, scheduler_->GetSharedMemoryBuffer(7).size);
252 } 252 }
253 253
254 TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) { 254 TEST_F(GpuSchedulerTest, SetTokenForwardsToCommandBuffer) {
255 EXPECT_CALL(*command_buffer_, SetToken(7)); 255 EXPECT_CALL(*command_buffer_, SetToken(7));
256 scheduler_->set_token(7); 256 scheduler_->set_token(7);
257 } 257 }
258 258
259 } // namespace gpu 259 } // namespace gpu
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/gpu_scheduler_mock.h ('k') | gpu/demos/framework/Plugin_Info.plist » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698