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

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

Issue 165603002: cc: Move GPU raster to DirectRasterWorkerPool. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: remove rastertaskqueue changes and refactor worker pool delegate Created 6 years, 10 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
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 "base/cancelable_callback.h" 10 #include "base/cancelable_callback.h"
11 #include "cc/resources/direct_raster_worker_pool.h"
11 #include "cc/resources/image_raster_worker_pool.h" 12 #include "cc/resources/image_raster_worker_pool.h"
12 #include "cc/resources/picture_pile.h" 13 #include "cc/resources/picture_pile.h"
13 #include "cc/resources/picture_pile_impl.h" 14 #include "cc/resources/picture_pile_impl.h"
14 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 15 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
15 #include "cc/resources/resource_provider.h" 16 #include "cc/resources/resource_provider.h"
16 #include "cc/resources/scoped_resource.h" 17 #include "cc/resources/scoped_resource.h"
17 #include "cc/test/fake_output_surface.h" 18 #include "cc/test/fake_output_surface.h"
18 #include "cc/test/fake_output_surface_client.h" 19 #include "cc/test/fake_output_surface_client.h"
19 #include "cc/test/test_web_graphics_context_3d.h" 20 #include "cc/test/test_web_graphics_context_3d.h"
20 #include "testing/gtest/include/gtest/gtest.h" 21 #include "testing/gtest/include/gtest/gtest.h"
21 22
22 namespace cc { 23 namespace cc {
23 namespace { 24 namespace {
24 25
25 enum RasterThread { 26 enum RasterThread {
26 RASTER_THREAD_NONE, 27 RASTER_THREAD_NONE,
27 RASTER_THREAD_ORIGIN, 28 RASTER_THREAD_ORIGIN,
28 RASTER_THREAD_WORKER 29 RASTER_THREAD_WORKER
29 }; 30 };
30 31
31 enum RasterWorkerPoolType { 32 enum RasterWorkerPoolType {
32 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 33 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
33 RASTER_WORKER_POOL_TYPE_IMAGE 34 RASTER_WORKER_POOL_TYPE_IMAGE,
35 RASTER_WORKER_POOL_TYPE_DIRECT
34 }; 36 };
35 37
36 class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { 38 class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
37 public: 39 public:
38 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, 40 typedef base::Callback<void(const PicturePileImpl::Analysis& analysis,
39 bool was_canceled, 41 bool was_canceled,
40 RasterThread raster_thread)> Reply; 42 RasterThread raster_thread)> Reply;
41 43
42 TestRasterWorkerPoolTaskImpl(const Resource* resource, 44 TestRasterWorkerPoolTaskImpl(const Resource* resource,
43 const Reply& reply, 45 const Reply& reply,
44 internal::Task::Vector* dependencies, 46 internal::WorkerPoolTask::Vector* dependencies)
45 bool use_gpu_rasterization) 47 : internal::RasterWorkerPoolTask(resource, dependencies),
46 : internal::RasterWorkerPoolTask(resource,
47 dependencies,
48 use_gpu_rasterization),
49 reply_(reply), 48 reply_(reply),
50 raster_thread_(RASTER_THREAD_NONE) {} 49 raster_thread_(RASTER_THREAD_NONE) {}
51 50
52 // Overridden from internal::Task: 51 // Overridden from internal::Task:
53 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 52 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
54 raster_thread_ = RASTER_THREAD_WORKER; 53 raster_thread_ = RASTER_THREAD_WORKER;
55 } 54 }
56 55
57 // Overridden from internal::WorkerPoolTask: 56 // Overridden from internal::WorkerPoolTask:
58 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) 57 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client)
59 OVERRIDE { 58 OVERRIDE {
60 client->AcquireCanvasForRaster(this); 59 client->AcquireCanvasForRaster(this);
61 } 60 }
61 virtual void RunOnOriginThread() OVERRIDE {
62 raster_thread_ = RASTER_THREAD_ORIGIN;
63 }
62 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) 64 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client)
63 OVERRIDE { 65 OVERRIDE {
64 client->OnRasterCompleted(this, PicturePileImpl::Analysis()); 66 client->OnRasterCompleted(this, PicturePileImpl::Analysis());
65 } 67 }
66 virtual void RunReplyOnOriginThread() OVERRIDE { 68 virtual void RunReplyOnOriginThread() OVERRIDE {
67 reply_.Run( 69 reply_.Run(
68 PicturePileImpl::Analysis(), !HasFinishedRunning(), raster_thread_); 70 PicturePileImpl::Analysis(), !HasFinishedRunning(), raster_thread_);
69 } 71 }
70 72
71 // Overridden from internal::RasterWorkerPoolTask:
72 virtual void RunOnOriginThread(ResourceProvider* resource_provider,
73 ContextProvider* context_provider) OVERRIDE {
74 raster_thread_ = RASTER_THREAD_ORIGIN;
75 }
76
77 protected: 73 protected:
78 virtual ~TestRasterWorkerPoolTaskImpl() {} 74 virtual ~TestRasterWorkerPoolTaskImpl() {}
79 75
80 private: 76 private:
81 const Reply reply_; 77 const Reply reply_;
82 RasterThread raster_thread_; 78 RasterThread raster_thread_;
83 79
84 DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl); 80 DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl);
85 }; 81 };
86 82
87 class BlockingTestRasterWorkerPoolTaskImpl 83 class BlockingTestRasterWorkerPoolTaskImpl
88 : public TestRasterWorkerPoolTaskImpl { 84 : public TestRasterWorkerPoolTaskImpl {
89 public: 85 public:
90 BlockingTestRasterWorkerPoolTaskImpl(const Resource* resource, 86 BlockingTestRasterWorkerPoolTaskImpl(
91 const Reply& reply, 87 const Resource* resource,
92 base::Lock* lock, 88 const Reply& reply,
93 internal::Task::Vector* dependencies, 89 base::Lock* lock,
94 bool use_gpu_rasterization) 90 internal::WorkerPoolTask::Vector* dependencies)
95 : TestRasterWorkerPoolTaskImpl(resource, 91 : TestRasterWorkerPoolTaskImpl(resource, reply, dependencies),
96 reply,
97 dependencies,
98 use_gpu_rasterization),
99 lock_(lock) {} 92 lock_(lock) {}
100 93
101 // Overridden from internal::Task: 94 // Overridden from internal::Task:
102 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { 95 virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE {
103 base::AutoLock lock(*lock_); 96 base::AutoLock lock(*lock_);
104 TestRasterWorkerPoolTaskImpl::RunOnWorkerThread(thread_index); 97 TestRasterWorkerPoolTaskImpl::RunOnWorkerThread(thread_index);
105 } 98 }
106 99
107 // Overridden from internal::WorkerPoolTask: 100 // Overridden from internal::WorkerPoolTask:
108 virtual void RunReplyOnOriginThread() OVERRIDE {} 101 virtual void RunReplyOnOriginThread() OVERRIDE {}
109 102
110 protected: 103 protected:
111 virtual ~BlockingTestRasterWorkerPoolTaskImpl() {} 104 virtual ~BlockingTestRasterWorkerPoolTaskImpl() {}
112 105
113 private: 106 private:
114 base::Lock* lock_; 107 base::Lock* lock_;
115 108
116 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterWorkerPoolTaskImpl); 109 DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterWorkerPoolTaskImpl);
117 }; 110 };
118 111
119 class RasterWorkerPoolTest 112 class RasterWorkerPoolTest
120 : public testing::TestWithParam<RasterWorkerPoolType>, 113 : public testing::TestWithParam<RasterWorkerPoolType>,
121 public RasterWorkerPoolClient { 114 public RasterWorkerPoolClient {
122 public: 115 public:
123 class RasterTask : public RasterWorkerPool::RasterTask { 116 class RasterTask : public RasterWorkerPool::RasterTask {
124 public: 117 public:
125 typedef std::vector<RasterTask> Vector; 118 typedef std::vector<RasterTask> Vector;
126 119
127 static RasterTask Create(const Resource* resource, 120 static RasterTask Create(const Resource* resource,
128 const TestRasterWorkerPoolTaskImpl::Reply& reply, 121 const TestRasterWorkerPoolTaskImpl::Reply& reply) {
129 bool use_gpu_rasterization) { 122 internal::WorkerPoolTask::Vector dependencies;
130 internal::Task::Vector dependencies; 123 return RasterTask(
131 return RasterTask(new TestRasterWorkerPoolTaskImpl( 124 new TestRasterWorkerPoolTaskImpl(resource, reply, &dependencies));
132 resource, reply, &dependencies, use_gpu_rasterization));
133 } 125 }
134 126
135 static RasterTask CreateBlocking( 127 static RasterTask CreateBlocking(
136 const Resource* resource, 128 const Resource* resource,
137 const TestRasterWorkerPoolTaskImpl::Reply& reply, 129 const TestRasterWorkerPoolTaskImpl::Reply& reply,
138 base::Lock* lock, 130 base::Lock* lock) {
139 bool use_gpu_rasterization) { 131 internal::WorkerPoolTask::Vector dependencies;
140 internal::Task::Vector dependencies;
141 return RasterTask(new BlockingTestRasterWorkerPoolTaskImpl( 132 return RasterTask(new BlockingTestRasterWorkerPoolTaskImpl(
142 resource, reply, lock, &dependencies, use_gpu_rasterization)); 133 resource, reply, lock, &dependencies));
143 } 134 }
144 135
145 private: 136 private:
146 friend class RasterWorkerPoolTest; 137 friend class RasterWorkerPoolTest;
147 138
148 explicit RasterTask(internal::RasterWorkerPoolTask* task) 139 explicit RasterTask(internal::RasterWorkerPoolTask* task)
149 : RasterWorkerPool::RasterTask(task) {} 140 : RasterWorkerPool::RasterTask(task) {}
150 }; 141 };
151 142
152 struct RasterTaskResult { 143 struct RasterTaskResult {
153 unsigned id; 144 unsigned id;
154 bool canceled; 145 bool canceled;
155 RasterThread raster_thread; 146 RasterThread raster_thread;
156 }; 147 };
157 148
158 RasterWorkerPoolTest() 149 RasterWorkerPoolTest()
159 : context_provider_(TestContextProvider::Create()), 150 : context_provider_(TestContextProvider::Create()),
160 timeout_seconds_(5), 151 timeout_seconds_(5),
161 timed_out_(false) { 152 timed_out_(false) {
162 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); 153 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
163 CHECK(output_surface_->BindToClient(&output_surface_client_)); 154 CHECK(output_surface_->BindToClient(&output_surface_client_));
164 155
165 resource_provider_ = ResourceProvider::Create( 156 resource_provider_ = ResourceProvider::Create(
166 output_surface_.get(), NULL, 0, false, 1).Pass(); 157 output_surface_.get(), NULL, 0, false, 1).Pass();
167 158
168 switch (GetParam()) { 159 switch (GetParam()) {
169 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: 160 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
170 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( 161 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
171 resource_provider_.get(), 162 resource_provider_.get(),
172 context_provider_.get(),
173 std::numeric_limits<size_t>::max()); 163 std::numeric_limits<size_t>::max());
174 break; 164 break;
175 case RASTER_WORKER_POOL_TYPE_IMAGE: 165 case RASTER_WORKER_POOL_TYPE_IMAGE:
176 raster_worker_pool_ = ImageRasterWorkerPool::Create( 166 raster_worker_pool_ = ImageRasterWorkerPool::Create(
177 resource_provider_.get(), context_provider_.get(), GL_TEXTURE_2D); 167 resource_provider_.get(), GL_TEXTURE_2D);
168 break;
169 case RASTER_WORKER_POOL_TYPE_DIRECT:
170 raster_worker_pool_ = DirectRasterWorkerPool::Create(
171 resource_provider_.get(), context_provider_.get());
178 break; 172 break;
179 } 173 }
180 174
181 DCHECK(raster_worker_pool_); 175 DCHECK(raster_worker_pool_);
182 raster_worker_pool_->SetClient(this); 176 raster_worker_pool_->SetClient(this);
183 } 177 }
184 virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); } 178 virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); }
185 179
186 // Overridden from testing::Test: 180 // Overridden from testing::Test:
187 virtual void TearDown() OVERRIDE { 181 virtual void TearDown() OVERRIDE {
(...skipping 23 matching lines...) Expand all
211 } 205 }
212 206
213 base::MessageLoop::current()->Run(); 207 base::MessageLoop::current()->Run();
214 208
215 timeout_.Cancel(); 209 timeout_.Cancel();
216 210
217 ASSERT_FALSE(timed_out_) << "Test timed out"; 211 ASSERT_FALSE(timed_out_) << "Test timed out";
218 } 212 }
219 213
220 void ScheduleTasks() { 214 void ScheduleTasks() {
221 RasterWorkerPool::RasterTask::Queue tasks; 215 RasterWorkerPool::RasterTask::Queue queue;
222 216
223 for (RasterTask::Vector::iterator it = tasks_.begin(); it != tasks_.end(); 217 for (RasterTask::Vector::iterator it = tasks_.begin(); it != tasks_.end();
224 ++it) 218 ++it)
225 tasks.Append(*it, false); 219 queue.Append(*it, false);
226 220
227 raster_worker_pool_->ScheduleTasks(&tasks); 221 raster_worker_pool_->ScheduleTasks(&queue);
228 } 222 }
229 223
230 void AppendTask(unsigned id, bool use_gpu_rasterization) { 224 void AppendTask(unsigned id) {
231 const gfx::Size size(1, 1); 225 const gfx::Size size(1, 1);
232 226
233 scoped_ptr<ScopedResource> resource( 227 scoped_ptr<ScopedResource> resource(
234 ScopedResource::Create(resource_provider_.get())); 228 ScopedResource::Create(resource_provider_.get()));
235 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); 229 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
236 const Resource* const_resource = resource.get(); 230 const Resource* const_resource = resource.get();
237 231
238 tasks_.push_back( 232 tasks_.push_back(
239 RasterTask::Create(const_resource, 233 RasterTask::Create(const_resource,
240 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, 234 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
241 base::Unretained(this), 235 base::Unretained(this),
242 base::Passed(&resource), 236 base::Passed(&resource),
243 id), 237 id)));
244 use_gpu_rasterization));
245 } 238 }
246 239
247 void AppendBlockingTask(unsigned id, base::Lock* lock) { 240 void AppendBlockingTask(unsigned id, base::Lock* lock) {
248 const gfx::Size size(1, 1); 241 const gfx::Size size(1, 1);
249 242
250 scoped_ptr<ScopedResource> resource( 243 scoped_ptr<ScopedResource> resource(
251 ScopedResource::Create(resource_provider_.get())); 244 ScopedResource::Create(resource_provider_.get()));
252 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); 245 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
253 const Resource* const_resource = resource.get(); 246 const Resource* const_resource = resource.get();
254 247
255 tasks_.push_back(RasterTask::CreateBlocking( 248 tasks_.push_back(RasterTask::CreateBlocking(
256 const_resource, 249 const_resource,
257 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, 250 base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
258 base::Unretained(this), 251 base::Unretained(this),
259 base::Passed(&resource), 252 base::Passed(&resource),
260 id), 253 id),
261 lock, 254 lock));
262 false));
263 } 255 }
264 256
265 const std::vector<RasterTaskResult>& completed_tasks() const { 257 const std::vector<RasterTaskResult>& completed_tasks() const {
266 return completed_tasks_; 258 return completed_tasks_;
267 } 259 }
268 260
269 private: 261 private:
270 void OnTaskCompleted(scoped_ptr<ScopedResource> resource, 262 void OnTaskCompleted(scoped_ptr<ScopedResource> resource,
271 unsigned id, 263 unsigned id,
272 const PicturePileImpl::Analysis& analysis, 264 const PicturePileImpl::Analysis& analysis,
(...skipping 18 matching lines...) Expand all
291 scoped_ptr<ResourceProvider> resource_provider_; 283 scoped_ptr<ResourceProvider> resource_provider_;
292 scoped_ptr<RasterWorkerPool> raster_worker_pool_; 284 scoped_ptr<RasterWorkerPool> raster_worker_pool_;
293 base::CancelableClosure timeout_; 285 base::CancelableClosure timeout_;
294 int timeout_seconds_; 286 int timeout_seconds_;
295 bool timed_out_; 287 bool timed_out_;
296 std::vector<RasterTask> tasks_; 288 std::vector<RasterTask> tasks_;
297 std::vector<RasterTaskResult> completed_tasks_; 289 std::vector<RasterTaskResult> completed_tasks_;
298 }; 290 };
299 291
300 TEST_P(RasterWorkerPoolTest, Basic) { 292 TEST_P(RasterWorkerPoolTest, Basic) {
301 AppendTask(0u, false); 293 AppendTask(0u);
302 AppendTask(1u, false); 294 AppendTask(1u);
303 ScheduleTasks(); 295 ScheduleTasks();
304 296
305 RunMessageLoopUntilAllTasksHaveCompleted(); 297 RunMessageLoopUntilAllTasksHaveCompleted();
306 298
307 ASSERT_EQ(2u, completed_tasks().size()); 299 ASSERT_EQ(2u, completed_tasks().size());
308 EXPECT_FALSE(completed_tasks()[0].canceled); 300 EXPECT_FALSE(completed_tasks()[0].canceled);
309 EXPECT_FALSE(completed_tasks()[1].canceled); 301 EXPECT_FALSE(completed_tasks()[1].canceled);
310 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[0].raster_thread); 302 EXPECT_NE(RASTER_THREAD_NONE, completed_tasks()[0].raster_thread);
311 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[1].raster_thread); 303 EXPECT_NE(RASTER_THREAD_NONE, completed_tasks()[1].raster_thread);
312 }
313
314 TEST_P(RasterWorkerPoolTest, GpuRaster) {
315 AppendTask(0u, true); // GPU raster.
316 ScheduleTasks();
317
318 RunMessageLoopUntilAllTasksHaveCompleted();
319
320 ASSERT_EQ(1u, completed_tasks().size());
321 EXPECT_EQ(0u, completed_tasks()[0].id);
322 EXPECT_FALSE(completed_tasks()[0].canceled);
323 EXPECT_EQ(RASTER_THREAD_ORIGIN, completed_tasks()[0].raster_thread);
324 }
325
326 TEST_P(RasterWorkerPoolTest, HybridRaster) {
327 AppendTask(0u, false); // Software raster.
328 AppendTask(1u, true); // GPU raster.
329 ScheduleTasks();
330
331 RunMessageLoopUntilAllTasksHaveCompleted();
332
333 ASSERT_EQ(2u, completed_tasks().size());
334 for (int i = 0; i < 2; ++i) {
335 EXPECT_FALSE(completed_tasks()[i].canceled);
336 switch (completed_tasks()[i].id) {
337 case 0u:
338 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[i].raster_thread);
339 break;
340 case 1u:
341 EXPECT_EQ(RASTER_THREAD_ORIGIN, completed_tasks()[i].raster_thread);
342 break;
343 default:
344 NOTREACHED();
345 }
346 }
347 } 304 }
348 305
349 TEST_P(RasterWorkerPoolTest, FailedMapResource) { 306 TEST_P(RasterWorkerPoolTest, FailedMapResource) {
350 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d(); 307 TestWebGraphicsContext3D* context3d = context_provider_->TestContext3d();
351 context3d->set_times_map_image_chromium_succeeds(0); 308 context3d->set_times_map_image_chromium_succeeds(0);
352 context3d->set_times_map_buffer_chromium_succeeds(0); 309 context3d->set_times_map_buffer_chromium_succeeds(0);
353 AppendTask(0u, false); 310 AppendTask(0u);
354 ScheduleTasks(); 311 ScheduleTasks();
355 312
356 RunMessageLoopUntilAllTasksHaveCompleted(); 313 RunMessageLoopUntilAllTasksHaveCompleted();
357 314
358 ASSERT_EQ(1u, completed_tasks().size()); 315 ASSERT_EQ(1u, completed_tasks().size());
359 EXPECT_FALSE(completed_tasks()[0].canceled); 316 EXPECT_FALSE(completed_tasks()[0].canceled);
360 EXPECT_EQ(RASTER_THREAD_WORKER, completed_tasks()[0].raster_thread); 317 EXPECT_NE(RASTER_THREAD_NONE, completed_tasks()[0].raster_thread);
361 } 318 }
362 319
363 // This test checks that replacing a pending raster task with another does 320 // This test checks that replacing a pending raster task with another does
364 // not prevent the DidFinishRunningTasks notification from being sent. 321 // not prevent the DidFinishRunningTasks notification from being sent.
365 TEST_P(RasterWorkerPoolTest, FalseThrottling) { 322 TEST_P(RasterWorkerPoolTest, FalseThrottling) {
366 base::Lock lock; 323 base::Lock lock;
367 324
368 // Schedule a task that is prevented from completing with a lock. 325 // Schedule a task that is prevented from completing with a lock.
369 lock.Acquire(); 326 lock.Acquire();
370 AppendBlockingTask(0u, &lock); 327 AppendBlockingTask(0u, &lock);
371 ScheduleTasks(); 328 ScheduleTasks();
372 329
373 // Schedule another task to replace the still-pending task. Because the old 330 // Schedule another task to replace the still-pending task. Because the old
374 // task is not a throttled task in the new task set, it should not prevent 331 // task is not a throttled task in the new task set, it should not prevent
375 // DidFinishRunningTasks from getting signaled. 332 // DidFinishRunningTasks from getting signaled.
376 tasks_.clear(); 333 tasks_.clear();
377 AppendTask(1u, false); 334 AppendTask(1u);
378 ScheduleTasks(); 335 ScheduleTasks();
379 336
380 // Unblock the first task to allow the second task to complete. 337 // Unblock the first task to allow the second task to complete.
381 lock.Release(); 338 lock.Release();
382 339
383 RunMessageLoopUntilAllTasksHaveCompleted(); 340 RunMessageLoopUntilAllTasksHaveCompleted();
384 } 341 }
385 342
386 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests, 343 INSTANTIATE_TEST_CASE_P(RasterWorkerPoolTests,
387 RasterWorkerPoolTest, 344 RasterWorkerPoolTest,
388 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 345 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
389 RASTER_WORKER_POOL_TYPE_IMAGE)); 346 RASTER_WORKER_POOL_TYPE_IMAGE,
347 RASTER_WORKER_POOL_TYPE_DIRECT));
390 348
391 } // namespace 349 } // namespace
392 } // namespace cc 350 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698