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

Side by Side Diff: cc/resources/raster_worker_pool_unittest.cc

Issue 143693007: cc: Refactor and cleanup RasterWorkerPool unit tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address review feedback Created 6 years, 11 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 | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "cc/resources/raster_worker_pool.h" 5 #include "cc/resources/raster_worker_pool.h"
6 6
7 #include <limits> 7 #include <limits>
8 #include <vector> 8 #include <vector>
9 9
10 #include "cc/resources/image_raster_worker_pool.h" 10 #include "cc/resources/image_raster_worker_pool.h"
11 #include "cc/resources/picture_pile.h" 11 #include "cc/resources/picture_pile.h"
12 #include "cc/resources/picture_pile_impl.h" 12 #include "cc/resources/picture_pile_impl.h"
13 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 13 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
14 #include "cc/resources/resource_provider.h" 14 #include "cc/resources/resource_provider.h"
15 #include "cc/resources/scoped_resource.h" 15 #include "cc/resources/scoped_resource.h"
16 #include "cc/test/fake_output_surface.h" 16 #include "cc/test/fake_output_surface.h"
17 #include "cc/test/fake_output_surface_client.h" 17 #include "cc/test/fake_output_surface_client.h"
18 #include "cc/test/test_web_graphics_context_3d.h" 18 #include "cc/test/test_web_graphics_context_3d.h"
19 #include "testing/gtest/include/gtest/gtest.h" 19 #include "testing/gtest/include/gtest/gtest.h"
20 20
21 namespace cc { 21 namespace cc {
22 namespace {
23
24 enum RasterThread {
25 RASTER_THREAD_NONE,
26 RASTER_THREAD_ORIGIN,
27 RASTER_THREAD_WORKER
28 };
29
30 enum RasterWorkerPoolType {
31 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
32 RASTER_WORKER_POOL_TYPE_IMAGE
33 };
22 34
23 class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { 35 class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
24 public: 36 public:
25 enum RasterThread {
26 RASTER_THREAD_NONE,
27 RASTER_THREAD_ORIGIN,
28 RASTER_THREAD_WORKER
29 };
30 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, 37 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis,
31 bool was_canceled, 38 bool was_canceled,
32 RasterThread raster_thread)> Reply; 39 RasterThread raster_thread)> Reply;
33 40
34 TestRasterWorkerPoolTaskImpl(const Resource* resource, 41 TestRasterWorkerPoolTaskImpl(const Resource* resource,
35 const Reply& reply, 42 const Reply& reply,
36 internal::Task::Vector* dependencies, 43 internal::Task::Vector* dependencies,
37 bool use_gpu_rasterization) 44 bool use_gpu_rasterization)
38 : internal::RasterWorkerPoolTask(resource, 45 : internal::RasterWorkerPoolTask(resource,
39 dependencies, 46 dependencies,
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 108
102 protected: 109 protected:
103 virtual ~BlockingRasterWorkerPoolTaskImpl() {} 110 virtual ~BlockingRasterWorkerPoolTaskImpl() {}
104 111
105 private: 112 private:
106 base::Lock* lock_; 113 base::Lock* lock_;
107 114
108 DISALLOW_COPY_AND_ASSIGN(BlockingRasterWorkerPoolTaskImpl); 115 DISALLOW_COPY_AND_ASSIGN(BlockingRasterWorkerPoolTaskImpl);
109 }; 116 };
110 117
111 class RasterWorkerPoolTest : public testing::Test, 118 } // namespace
112 public RasterWorkerPoolClient { 119
120 class RasterWorkerPoolTest
121 : public testing::TestWithParam<RasterWorkerPoolType>,
122 public RasterWorkerPoolClient {
113 public: 123 public:
124 struct RasterTaskResult {
125 unsigned id;
126 bool canceled;
127 RasterThread raster_thread;
128 };
129
114 RasterWorkerPoolTest() 130 RasterWorkerPoolTest()
115 : context_provider_(TestContextProvider::Create()), 131 : context_provider_(TestContextProvider::Create()),
116 check_interval_milliseconds_(1),
117 timeout_seconds_(5), 132 timeout_seconds_(5),
118 timed_out_(false) { 133 timed_out_(false) {
119 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); 134 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
120 CHECK(output_surface_->BindToClient(&output_surface_client_)); 135 CHECK(output_surface_->BindToClient(&output_surface_client_));
121 136
122 resource_provider_ = ResourceProvider::Create( 137 resource_provider_ = ResourceProvider::Create(
123 output_surface_.get(), NULL, 0, false, 1).Pass(); 138 output_surface_.get(), NULL, 0, false, 1).Pass();
139
140 switch (GetParam()) {
141 case RASTER_WORKER_POOL_TYPE_IMAGE:
142 raster_worker_pool_ = ImageRasterWorkerPool::Create(
143 resource_provider_.get(), context_provider_.get(), GL_TEXTURE_2D);
144 break;
145 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
146 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
147 resource_provider_.get(),
148 context_provider_.get(),
149 std::numeric_limits<size_t>::max());
150 break;
151 }
152
153 DCHECK(raster_worker_pool_);
154 raster_worker_pool_->SetClient(this);
124 } 155 }
125 virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); } 156 virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); }
126 157
127 // Overridden from testing::Test: 158 // Overridden from testing::Test:
128 virtual void TearDown() OVERRIDE { 159 virtual void TearDown() OVERRIDE {
129 if (!raster_worker_pool_)
130 return;
131 raster_worker_pool_->Shutdown(); 160 raster_worker_pool_->Shutdown();
132 raster_worker_pool_->CheckForCompletedTasks(); 161 raster_worker_pool_->CheckForCompletedTasks();
133 } 162 }
134 163
135 // Overriden from RasterWorkerPoolClient: 164 // Overriden from RasterWorkerPoolClient:
136 virtual bool ShouldForceTasksRequiredForActivationToComplete() 165 virtual bool ShouldForceTasksRequiredForActivationToComplete()
137 const OVERRIDE { 166 const OVERRIDE {
138 return false; 167 return false;
139 } 168 }
140 virtual void DidFinishRunningTasks() OVERRIDE {} 169 virtual void DidFinishRunningTasks() OVERRIDE {
170 raster_worker_pool_->CheckForCompletedTasks();
171 base::MessageLoop::current()->Quit();
172 }
141 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {} 173 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {}
142 174
143 virtual void BeginTest() = 0; 175 void RunMessageLoopUntilAllTasksHaveCompleted() {
144 virtual void AfterTest() = 0;
145
146 ResourceProvider* resource_provider() const {
147 return resource_provider_.get();
148 }
149
150 RasterWorkerPool* worker_pool() { return raster_worker_pool_.get(); }
151
152 void RunTest(bool use_map_image) {
153 if (use_map_image) {
154 raster_worker_pool_ = ImageRasterWorkerPool::Create(
155 resource_provider(), context_provider_.get(), GL_TEXTURE_2D);
156 } else {
157 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
158 resource_provider(),
159 context_provider_.get(),
160 std::numeric_limits<size_t>::max());
161 }
162
163 raster_worker_pool_->SetClient(this);
164
165 BeginTest();
166
167 ScheduleCheckForCompletedTasks();
168
169 if (timeout_seconds_) { 176 if (timeout_seconds_) {
170 timeout_.Reset( 177 timeout_.Reset(
171 base::Bind(&RasterWorkerPoolTest::OnTimeout, base::Unretained(this))); 178 base::Bind(&RasterWorkerPoolTest::OnTimeout, base::Unretained(this)));
172 base::MessageLoopProxy::current()->PostDelayedTask( 179 base::MessageLoopProxy::current()->PostDelayedTask(
173 FROM_HERE, 180 FROM_HERE,
174 timeout_.callback(), 181 timeout_.callback(),
175 base::TimeDelta::FromSeconds(timeout_seconds_)); 182 base::TimeDelta::FromSeconds(timeout_seconds_));
176 } 183 }
177 184
178 base::MessageLoop::current()->Run(); 185 base::MessageLoop::current()->Run();
179 186
180 check_.Cancel();
181 timeout_.Cancel(); 187 timeout_.Cancel();
182 188
183 if (timed_out_) { 189 ASSERT_FALSE(timed_out_) << "Test timed out";
184 FAIL() << "Test timed out";
185 return;
186 }
187 AfterTest();
188 } 190 }
189 191
190 void EndTest() { base::MessageLoop::current()->Quit(); }
191
192 void ScheduleTasks() { 192 void ScheduleTasks() {
193 RasterWorkerPool::RasterTask::Queue tasks; 193 RasterWorkerPool::RasterTask::Queue tasks;
194 194
195 for (std::vector<RasterWorkerPool::RasterTask>::iterator it = 195 for (std::vector<RasterWorkerPool::RasterTask>::iterator it =
196 tasks_.begin(); 196 tasks_.begin();
197 it != tasks_.end(); 197 it != tasks_.end();
198 ++it) 198 ++it)
199 tasks.Append(*it, false); 199 tasks.Append(*it, false);
200 200
201 worker_pool()->ScheduleTasks(&tasks); 201 raster_worker_pool_->ScheduleTasks(&tasks);
202 } 202 }
203 203
204 void AppendTask(unsigned id, bool use_gpu_rasterization) { 204 void AppendTask(unsigned id, bool use_gpu_rasterization) {
205 const gfx::Size size(1, 1); 205 const gfx::Size size(1, 1);
206 206
207 scoped_ptr<ScopedResource> resource( 207 scoped_ptr<ScopedResource> resource(
208 ScopedResource::Create(resource_provider())); 208 ScopedResource::Create(resource_provider_.get()));
209 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); 209 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
210 const Resource* const_resource = resource.get(); 210 const Resource* const_resource = resource.get();
211 211
212 RasterWorkerPool::Task::Set empty; 212 RasterWorkerPool::Task::Set empty;
213 tasks_.push_back( 213 tasks_.push_back(
214 RasterWorkerPool::RasterTask(new TestRasterWorkerPoolTaskImpl( 214 RasterWorkerPool::RasterTask(new TestRasterWorkerPoolTaskImpl(
215 const_resource, 215 const_resource,
216 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, 216 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
217 base::Unretained(this), 217 base::Unretained(this),
218 base::Passed(&resource), 218 base::Passed(&resource),
219 id), 219 id),
220 &empty.tasks_, 220 &empty.tasks_,
221 use_gpu_rasterization))); 221 use_gpu_rasterization)));
222 } 222 }
223 223
224 void AppendBlockingTask(unsigned id, base::Lock* lock) { 224 void AppendBlockingTask(unsigned id, base::Lock* lock) {
225 const gfx::Size size(1, 1); 225 const gfx::Size size(1, 1);
226 226
227 scoped_ptr<ScopedResource> resource( 227 scoped_ptr<ScopedResource> resource(
228 ScopedResource::Create(resource_provider())); 228 ScopedResource::Create(resource_provider_.get()));
229 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); 229 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
230 const Resource* const_resource = resource.get(); 230 const Resource* const_resource = resource.get();
231 231
232 RasterWorkerPool::Task::Set empty; 232 RasterWorkerPool::Task::Set empty;
233 tasks_.push_back( 233 tasks_.push_back(
234 RasterWorkerPool::RasterTask(new BlockingRasterWorkerPoolTaskImpl( 234 RasterWorkerPool::RasterTask(new BlockingRasterWorkerPoolTaskImpl(
235 const_resource, 235 const_resource,
236 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, 236 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
237 base::Unretained(this), 237 base::Unretained(this),
238 base::Passed(&resource), 238 base::Passed(&resource),
239 id), 239 id),
240 lock, 240 lock,
241 &empty.tasks_, 241 &empty.tasks_,
242 false))); 242 false)));
243 } 243 }
244 244
245 virtual void OnTaskCompleted( 245 const std::vector<RasterTaskResult>& completed_tasks() const {
246 scoped_ptr<ScopedResource> resource, 246 return completed_tasks_;
247 unsigned id, 247 }
248 const PicturePileImpl::Analysis& analysis,
249 bool was_canceled,
250 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) {}
251 248
252 private: 249 private:
253 void ScheduleCheckForCompletedTasks() { 250 void OnTaskCompleted(scoped_ptr<ScopedResource> resource,
254 check_.Reset(base::Bind(&RasterWorkerPoolTest::OnCheckForCompletedTasks, 251 unsigned id,
255 base::Unretained(this))); 252 const PicturePileImpl::Analysis& analysis,
256 base::MessageLoopProxy::current()->PostDelayedTask( 253 bool was_canceled,
257 FROM_HERE, 254 RasterThread raster_thread) {
258 check_.callback(), 255 RasterTaskResult result;
259 base::TimeDelta::FromMilliseconds(check_interval_milliseconds_)); 256 result.id = id;
260 } 257 result.canceled = was_canceled;
261 258 result.raster_thread = raster_thread;
262 void OnCheckForCompletedTasks() { 259 completed_tasks_.push_back(result);
263 raster_worker_pool_->CheckForCompletedTasks();
264 ScheduleCheckForCompletedTasks();
265 } 260 }
266 261
267 void OnTimeout() { 262 void OnTimeout() {
268 timed_out_ = true; 263 timed_out_ = true;
269 base::MessageLoop::current()->Quit(); 264 base::MessageLoop::current()->Quit();
270 } 265 }
271 266
272 protected: 267 protected:
273 scoped_refptr<TestContextProvider> context_provider_; 268 scoped_refptr<TestContextProvider> context_provider_;
274 FakeOutputSurfaceClient output_surface_client_; 269 FakeOutputSurfaceClient output_surface_client_;
275 scoped_ptr<FakeOutputSurface> output_surface_; 270 scoped_ptr<FakeOutputSurface> output_surface_;
276 scoped_ptr<ResourceProvider> resource_provider_; 271 scoped_ptr<ResourceProvider> resource_provider_;
277 scoped_ptr<RasterWorkerPool> raster_worker_pool_; 272 scoped_ptr<RasterWorkerPool> raster_worker_pool_;
278 base::CancelableClosure check_;
279 int check_interval_milliseconds_;
280 base::CancelableClosure timeout_; 273 base::CancelableClosure timeout_;
281 int timeout_seconds_; 274 int timeout_seconds_;
282 bool timed_out_; 275 bool timed_out_;
283 std::vector<RasterWorkerPool::RasterTask> tasks_; 276 std::vector<RasterWorkerPool::RasterTask> tasks_;
277 std::vector<RasterTaskResult> completed_tasks_;
284 }; 278 };
285 279
286 namespace { 280 namespace {
287 281
288 #define PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME) \ 282 TEST_P(RasterWorkerPoolTest, Basic) {
289 TEST_F(TEST_FIXTURE_NAME, RunPixelBuffer) { RunTest(false); } 283 AppendTask(0u, false);
284 AppendTask(1u, false);
285 ScheduleTasks();
290 286
291 #define IMAGE_TEST_F(TEST_FIXTURE_NAME) \ 287 RunMessageLoopUntilAllTasksHaveCompleted();
292 TEST_F(TEST_FIXTURE_NAME, RunImage) { RunTest(true); }
293 288
294 #define PIXEL_BUFFER_AND_IMAGE_TEST_F(TEST_FIXTURE_NAME) \ 289 ASSERT_EQ(2u, completed_tasks().size());
295 PIXEL_BUFFER_TEST_F(TEST_FIXTURE_NAME); \ 290 EXPECT_FALSE(completed_tasks()[0].canceled);
296 IMAGE_TEST_F(TEST_FIXTURE_NAME) 291 EXPECT_FALSE(completed_tasks()[1].canceled);
292 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[0].raster_thread);
293 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[1].raster_thread);
294 }
297 295
298 class RasterWorkerPoolTestSofwareRaster : public RasterWorkerPoolTest { 296 TEST_P(RasterWorkerPoolTest, GpuRaster) {
299 public: 297 AppendTask(0u, true); // GPU raster.
300 virtual void OnTaskCompleted( 298 ScheduleTasks();
301 scoped_ptr<ScopedResource> resource,
302 unsigned id,
303 const PicturePileImpl::Analysis& analysis,
304 bool was_canceled,
305 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
306 EXPECT_FALSE(was_canceled);
307 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_WORKER,
308 raster_thread);
309 on_task_completed_ids_.push_back(id);
310 if (on_task_completed_ids_.size() == 2)
311 EndTest();
312 }
313 299
314 // Overridden from RasterWorkerPoolTest: 300 RunMessageLoopUntilAllTasksHaveCompleted();
315 virtual void BeginTest() OVERRIDE {
316 AppendTask(0u, false);
317 AppendTask(1u, false);
318 ScheduleTasks();
319 }
320 virtual void AfterTest() OVERRIDE {
321 EXPECT_EQ(2u, on_task_completed_ids_.size());
322 tasks_.clear();
323 }
324 301
325 std::vector<unsigned> on_task_completed_ids_; 302 ASSERT_EQ(1u, completed_tasks().size());
326 }; 303 EXPECT_EQ(0u, completed_tasks()[0].id);
304 EXPECT_FALSE(completed_tasks()[0].canceled);
305 EXPECT_EQ(RASTER_THREAD_ORIGIN, completed_tasks()[0].raster_thread);
306 }
327 307
328 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestSofwareRaster); 308 TEST_P(RasterWorkerPoolTest, HybridRaster) {
309 AppendTask(0u, false); // Software raster.
310 AppendTask(1u, true); // GPU raster.
311 ScheduleTasks();
329 312
330 class RasterWorkerPoolTestGpuRaster : public RasterWorkerPoolTest { 313 RunMessageLoopUntilAllTasksHaveCompleted();
331 public:
332 virtual void OnTaskCompleted(
333 scoped_ptr<ScopedResource> resource,
334 unsigned id,
335 const PicturePileImpl::Analysis& analysis,
336 bool was_canceled,
337 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
338 EXPECT_EQ(0u, id);
339 EXPECT_FALSE(was_canceled);
340 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_ORIGIN,
341 raster_thread);
342 EndTest();
343 }
344 314
345 // Overridden from RasterWorkerPoolTest: 315 ASSERT_EQ(2u, completed_tasks().size());
346 virtual void BeginTest() OVERRIDE { 316 for (int i = 0; i < 2; ++i) {
347 AppendTask(0u, true); // GPU raster. 317 EXPECT_FALSE(completed_tasks()[i].canceled);
348 ScheduleTasks(); 318 switch (completed_tasks()[i].id) {
349 }
350
351 virtual void AfterTest() OVERRIDE { EXPECT_EQ(1u, tasks_.size()); }
352 };
353 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestGpuRaster);
354
355 class RasterWorkerPoolTestHybridRaster : public RasterWorkerPoolTest {
356 public:
357 virtual void OnTaskCompleted(
358 scoped_ptr<ScopedResource> resource,
359 unsigned id,
360 const PicturePileImpl::Analysis& analysis,
361 bool was_canceled,
362 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
363 EXPECT_FALSE(was_canceled);
364 switch (id) {
365 case 0u: 319 case 0u:
366 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_WORKER, 320 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[i].raster_thread);
367 raster_thread);
368 break; 321 break;
369 case 1u: 322 case 1u:
370 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_ORIGIN, 323 EXPECT_EQ(RASTER_THREAD_ORIGIN, completed_tasks()[i].raster_thread);
371 raster_thread);
372 break; 324 break;
373 default: 325 default:
374 NOTREACHED(); 326 NOTREACHED();
375 } 327 }
376 completed_task_ids_.push_back(id);
377 if (completed_task_ids_.size() == 2)
378 EndTest();
379 } 328 }
329 }
380 330
381 // Overridden from RasterWorkerPoolTest: 331 TEST_P(RasterWorkerPoolTest, FailedMapResource) {
382 virtual void BeginTest() OVERRIDE { 332 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d();
383 AppendTask(0u, false); // Software raster. 333 context3d->set_times_map_image_chromium_succeeds(0);
384 AppendTask(1u, true); // GPU raster. 334 context3d->set_times_map_buffer_chromium_succeeds(0);
385 ScheduleTasks(); 335 AppendTask(0u, false);
386 } 336 ScheduleTasks();
387 337
388 virtual void AfterTest() OVERRIDE { 338 RunMessageLoopUntilAllTasksHaveCompleted();
389 EXPECT_EQ(2u, tasks_.size());
390 EXPECT_EQ(2u, completed_task_ids_.size());
391 }
392 339
393 std::vector<unsigned> completed_task_ids_; 340 ASSERT_EQ(1u, completed_tasks().size());
394 }; 341 EXPECT_FALSE(completed_tasks()[0].canceled);
395 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestHybridRaster); 342 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[0].raster_thread);
343 }
396 344
397 class RasterWorkerPoolTestFailedMapResource : public RasterWorkerPoolTest { 345 // This test checks that replacing a pending raster task with another does
398 public: 346 // not prevent the DidFinishRunningTasks notification from being sent.
399 virtual void OnTaskCompleted( 347 TEST_P(RasterWorkerPoolTest, FalseThrottling) {
400 scoped_ptr<ScopedResource> resource, 348 base::Lock lock;
401 unsigned id,
402 const PicturePileImpl::Analysis& analysis,
403 bool was_canceled,
404 TestRasterWorkerPoolTaskImpl::RasterThread raster_thread) OVERRIDE {
405 EXPECT_FALSE(was_canceled);
406 EXPECT_EQ(TestRasterWorkerPoolTaskImpl::RASTER_THREAD_WORKER,
407 raster_thread);
408 EndTest();
409 }
410 349
411 // Overridden from RasterWorkerPoolTest: 350 // Schedule a task that is prevented from completing with a lock.
412 virtual void BeginTest() OVERRIDE { 351 lock.Acquire();
413 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); 352 AppendBlockingTask(0u, &lock);
414 context3d->set_times_map_image_chromium_succeeds(0); 353 ScheduleTasks();
415 context3d->set_times_map_buffer_chromium_succeeds(0);
416 AppendTask(0u, false);
417 ScheduleTasks();
418 }
419 354
420 virtual void AfterTest() OVERRIDE { 355 // Schedule another task to replace the still-pending task. Because the old
421 ASSERT_EQ(1u, tasks_.size()); 356 // task is not a throttled task in the new task set, it should not prevent
422 tasks_.clear(); 357 // DidFinishRunningTasks from getting signaled.
423 } 358 tasks_.clear();
424 }; 359 AppendTask(1u, false);
360 ScheduleTasks();
425 361
426 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestFailedMapResource); 362 // Unblock the first task to allow the second task to complete.
363 lock.Release();
427 364
428 class RasterWorkerPoolTestFalseThrottling : public RasterWorkerPoolTest { 365 RunMessageLoopUntilAllTasksHaveCompleted();
429 public: 366 }
430 // Overridden from RasterWorkerPoolTest:
431 virtual void BeginTest() OVERRIDE {
432 // This test checks that replacing a pending raster task with another does
433 // not prevent the DidFinishRunningTasks notification from being sent.
434 367
435 // Schedule a task that is prevented from completing with a lock. 368 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests,
436 lock_.Acquire(); 369 RasterWorkerPoolTest,
437 AppendBlockingTask(0u, &lock_); 370 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
438 ScheduleTasks(); 371 RASTER_WORKER_POOL_TYPE_IMAGE));
439
440 // Schedule another task to replace the still-pending task. Because the old
441 // task is not a throttled task in the new task set, it should not prevent
442 // DidFinishRunningTasks from getting signaled.
443 tasks_.clear();
444 AppendTask(1u, false);
445 ScheduleTasks();
446
447 // Unblock the first task to allow the second task to complete.
448 lock_.Release();
449 }
450
451 virtual void AfterTest() OVERRIDE {}
452
453 virtual void DidFinishRunningTasks() OVERRIDE { EndTest(); }
454
455 base::Lock lock_;
456 };
457
458 PIXEL_BUFFER_AND_IMAGE_TEST_F(RasterWorkerPoolTestFalseThrottling);
459 372
460 } // namespace 373 } // namespace
461 } // namespace cc 374 } // namespace cc
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698