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

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

Issue 228173002: cc: Separate RasterWorkerPool interface from implementation details. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: address review feedback Created 6 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
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 "base/time/time.h" 7 #include "base/time/time.h"
8 #include "cc/output/context_provider.h" 8 #include "cc/output/context_provider.h"
9 #include "cc/resources/direct_raster_worker_pool.h" 9 #include "cc/resources/direct_raster_worker_pool.h"
10 #include "cc/resources/image_raster_worker_pool.h" 10 #include "cc/resources/image_raster_worker_pool.h"
11 #include "cc/resources/pixel_buffer_raster_worker_pool.h" 11 #include "cc/resources/pixel_buffer_raster_worker_pool.h"
12 #include "cc/resources/rasterizer.h"
12 #include "cc/resources/resource_provider.h" 13 #include "cc/resources/resource_provider.h"
13 #include "cc/resources/scoped_resource.h" 14 #include "cc/resources/scoped_resource.h"
14 #include "cc/test/fake_output_surface.h" 15 #include "cc/test/fake_output_surface.h"
15 #include "cc/test/fake_output_surface_client.h" 16 #include "cc/test/fake_output_surface_client.h"
16 #include "cc/test/lap_timer.h" 17 #include "cc/test/lap_timer.h"
17 #include "cc/test/test_context_support.h" 18 #include "cc/test/test_context_support.h"
18 #include "cc/test/test_shared_bitmap_manager.h" 19 #include "cc/test/test_shared_bitmap_manager.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 #include "testing/perf/perf_test.h" 22 #include "testing/perf/perf_test.h"
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
73 enum RasterWorkerPoolType { 74 enum RasterWorkerPoolType {
74 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 75 RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
75 RASTER_WORKER_POOL_TYPE_IMAGE, 76 RASTER_WORKER_POOL_TYPE_IMAGE,
76 RASTER_WORKER_POOL_TYPE_DIRECT 77 RASTER_WORKER_POOL_TYPE_DIRECT
77 }; 78 };
78 79
79 static const int kTimeLimitMillis = 2000; 80 static const int kTimeLimitMillis = 2000;
80 static const int kWarmupRuns = 5; 81 static const int kWarmupRuns = 5;
81 static const int kTimeCheckInterval = 10; 82 static const int kTimeCheckInterval = 10;
82 83
83 class PerfWorkerPoolTaskImpl : public internal::WorkerPoolTask { 84 class PerfImageDecodeTaskImpl : public internal::ImageDecodeTask {
84 public: 85 public:
85 PerfWorkerPoolTaskImpl() {} 86 PerfImageDecodeTaskImpl() {}
86 87
87 // Overridden from internal::Task: 88 // Overridden from internal::Task:
88 virtual void RunOnWorkerThread() OVERRIDE {} 89 virtual void RunOnWorkerThread() OVERRIDE {}
89 90
90 // Overridden from internal::WorkerPoolTask: 91 // Overridden from internal::RasterizerTask:
91 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) 92 virtual void ScheduleOnOriginThread(internal::RasterizerTaskClient* client)
92 OVERRIDE {} 93 OVERRIDE {}
93 virtual void RunOnOriginThread() OVERRIDE {} 94 virtual void RunOnOriginThread() OVERRIDE {}
94 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) 95 virtual void CompleteOnOriginThread(internal::RasterizerTaskClient* client)
95 OVERRIDE {} 96 OVERRIDE {}
96 virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); } 97 virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); }
97 98
98 void Reset() { 99 void Reset() {
99 did_run_ = false; 100 did_run_ = false;
100 did_complete_ = false; 101 did_complete_ = false;
101 } 102 }
102 103
103 protected: 104 protected:
104 virtual ~PerfWorkerPoolTaskImpl() {} 105 virtual ~PerfImageDecodeTaskImpl() {}
105 106
106 private: 107 private:
107 DISALLOW_COPY_AND_ASSIGN(PerfWorkerPoolTaskImpl); 108 DISALLOW_COPY_AND_ASSIGN(PerfImageDecodeTaskImpl);
108 }; 109 };
109 110
110 class PerfRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { 111 class PerfRasterTaskImpl : public internal::RasterTask {
111 public: 112 public:
112 PerfRasterWorkerPoolTaskImpl(scoped_ptr<ScopedResource> resource, 113 PerfRasterTaskImpl(scoped_ptr<ScopedResource> resource,
113 internal::WorkerPoolTask::Vector* dependencies) 114 internal::ImageDecodeTask::Vector* dependencies)
114 : internal::RasterWorkerPoolTask(resource.get(), dependencies), 115 : internal::RasterTask(resource.get(), dependencies),
115 resource_(resource.Pass()) {} 116 resource_(resource.Pass()) {}
116 117
117 // Overridden from internal::Task: 118 // Overridden from internal::Task:
118 virtual void RunOnWorkerThread() OVERRIDE {} 119 virtual void RunOnWorkerThread() OVERRIDE {}
119 120
120 // Overridden from internal::WorkerPoolTask: 121 // Overridden from internal::RasterizerTask:
121 virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) 122 virtual void ScheduleOnOriginThread(internal::RasterizerTaskClient* client)
122 OVERRIDE { 123 OVERRIDE {
123 client->AcquireCanvasForRaster(this, resource()); 124 client->AcquireCanvasForRaster(this);
124 } 125 }
125 virtual void RunOnOriginThread() OVERRIDE {} 126 virtual void RunOnOriginThread() OVERRIDE {}
126 virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) 127 virtual void CompleteOnOriginThread(internal::RasterizerTaskClient* client)
127 OVERRIDE { 128 OVERRIDE {
128 client->ReleaseCanvasForRaster(this, resource()); 129 client->ReleaseCanvasForRaster(this);
129 } 130 }
130 virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); } 131 virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); }
131 132
132 void Reset() { 133 void Reset() {
133 did_run_ = false; 134 did_run_ = false;
134 did_complete_ = false; 135 did_complete_ = false;
135 } 136 }
136 137
137 protected: 138 protected:
138 virtual ~PerfRasterWorkerPoolTaskImpl() {} 139 virtual ~PerfRasterTaskImpl() {}
139 140
140 private: 141 private:
141 scoped_ptr<ScopedResource> resource_; 142 scoped_ptr<ScopedResource> resource_;
142 143
143 DISALLOW_COPY_AND_ASSIGN(PerfRasterWorkerPoolTaskImpl); 144 DISALLOW_COPY_AND_ASSIGN(PerfRasterTaskImpl);
144 };
145
146 class PerfPixelBufferRasterWorkerPoolImpl : public PixelBufferRasterWorkerPool {
147 public:
148 PerfPixelBufferRasterWorkerPoolImpl(
149 internal::TaskGraphRunner* task_graph_runner,
150 ResourceProvider* resource_provider)
151 : PixelBufferRasterWorkerPool(base::MessageLoopProxy::current().get(),
152 task_graph_runner,
153 resource_provider,
154 std::numeric_limits<size_t>::max()) {}
155 };
156
157 class PerfImageRasterWorkerPoolImpl : public ImageRasterWorkerPool {
158 public:
159 PerfImageRasterWorkerPoolImpl(internal::TaskGraphRunner* task_graph_runner,
160 ResourceProvider* resource_provider)
161 : ImageRasterWorkerPool(base::MessageLoopProxy::current().get(),
162 task_graph_runner,
163 resource_provider,
164 GL_TEXTURE_2D) {}
165 };
166
167 class PerfDirectRasterWorkerPoolImpl : public DirectRasterWorkerPool {
168 public:
169 PerfDirectRasterWorkerPoolImpl(ResourceProvider* resource_provider,
170 ContextProvider* context_provider)
171 : DirectRasterWorkerPool(base::MessageLoopProxy::current().get(),
172 resource_provider,
173 context_provider) {}
174 }; 145 };
175 146
176 class RasterWorkerPoolPerfTestBase { 147 class RasterWorkerPoolPerfTestBase {
177 public: 148 public:
178 typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> > 149 typedef std::vector<scoped_refptr<internal::RasterTask> > RasterTaskVector;
179 RasterTaskVector;
180 150
181 RasterWorkerPoolPerfTestBase() 151 RasterWorkerPoolPerfTestBase()
182 : context_provider_(make_scoped_refptr(new PerfContextProvider)), 152 : context_provider_(make_scoped_refptr(new PerfContextProvider)),
183 task_graph_runner_(new internal::TaskGraphRunner), 153 task_graph_runner_(new internal::TaskGraphRunner),
184 timer_(kWarmupRuns, 154 timer_(kWarmupRuns,
185 base::TimeDelta::FromMilliseconds(kTimeLimitMillis), 155 base::TimeDelta::FromMilliseconds(kTimeLimitMillis),
186 kTimeCheckInterval) { 156 kTimeCheckInterval) {
187 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass(); 157 output_surface_ = FakeOutputSurface::Create3d(context_provider_).Pass();
188 CHECK(output_surface_->BindToClient(&output_surface_client_)); 158 CHECK(output_surface_->BindToClient(&output_surface_client_));
189 159
190 shared_bitmap_manager_.reset(new TestSharedBitmapManager()); 160 shared_bitmap_manager_.reset(new TestSharedBitmapManager());
191 resource_provider_ = 161 resource_provider_ =
192 ResourceProvider::Create( 162 ResourceProvider::Create(
193 output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1) 163 output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1)
194 .Pass(); 164 .Pass();
195 pixel_buffer_raster_worker_pool_.reset(
196 new PerfPixelBufferRasterWorkerPoolImpl(task_graph_runner_.get(),
197 resource_provider_.get()));
198 image_raster_worker_pool_.reset(new PerfImageRasterWorkerPoolImpl(
199 task_graph_runner_.get(), resource_provider_.get()));
200 direct_raster_worker_pool_.reset(new PerfDirectRasterWorkerPoolImpl(
201 resource_provider_.get(), context_provider_));
202 } 165 }
203 166
204 void CreateImageDecodeTasks( 167 void CreateImageDecodeTasks(
205 unsigned num_image_decode_tasks, 168 unsigned num_image_decode_tasks,
206 internal::WorkerPoolTask::Vector* image_decode_tasks) { 169 internal::ImageDecodeTask::Vector* image_decode_tasks) {
207 for (unsigned i = 0; i < num_image_decode_tasks; ++i) 170 for (unsigned i = 0; i < num_image_decode_tasks; ++i)
208 image_decode_tasks->push_back(new PerfWorkerPoolTaskImpl); 171 image_decode_tasks->push_back(new PerfImageDecodeTaskImpl);
209 } 172 }
210 173
211 void CreateRasterTasks( 174 void CreateRasterTasks(
212 unsigned num_raster_tasks, 175 unsigned num_raster_tasks,
213 const internal::WorkerPoolTask::Vector& image_decode_tasks, 176 const internal::ImageDecodeTask::Vector& image_decode_tasks,
214 RasterTaskVector* raster_tasks) { 177 RasterTaskVector* raster_tasks) {
215 const gfx::Size size(1, 1); 178 const gfx::Size size(1, 1);
216 179
217 for (unsigned i = 0; i < num_raster_tasks; ++i) { 180 for (unsigned i = 0; i < num_raster_tasks; ++i) {
218 scoped_ptr<ScopedResource> resource( 181 scoped_ptr<ScopedResource> resource(
219 ScopedResource::Create(resource_provider_.get())); 182 ScopedResource::Create(resource_provider_.get()));
220 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); 183 resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
221 184
222 internal::WorkerPoolTask::Vector dependencies = image_decode_tasks; 185 internal::ImageDecodeTask::Vector dependencies = image_decode_tasks;
223 raster_tasks->push_back( 186 raster_tasks->push_back(
224 new PerfRasterWorkerPoolTaskImpl(resource.Pass(), &dependencies)); 187 new PerfRasterTaskImpl(resource.Pass(), &dependencies));
225 } 188 }
226 } 189 }
227 190
228 void BuildRasterTaskQueue(RasterTaskQueue* queue, 191 void BuildRasterTaskQueue(RasterTaskQueue* queue,
229 const RasterTaskVector& raster_tasks) { 192 const RasterTaskVector& raster_tasks) {
230 for (size_t i = 0u; i < raster_tasks.size(); ++i) { 193 for (size_t i = 0u; i < raster_tasks.size(); ++i) {
231 bool required_for_activation = (i % 2) == 0; 194 bool required_for_activation = (i % 2) == 0;
232 queue->items.push_back(RasterTaskQueue::Item(raster_tasks[i].get(), 195 queue->items.push_back(RasterTaskQueue::Item(raster_tasks[i].get(),
233 required_for_activation)); 196 required_for_activation));
234 queue->required_for_activation_count += required_for_activation; 197 queue->required_for_activation_count += required_for_activation;
235 } 198 }
236 } 199 }
237 200
238 protected: 201 protected:
239 scoped_refptr<ContextProvider> context_provider_; 202 scoped_refptr<ContextProvider> context_provider_;
240 FakeOutputSurfaceClient output_surface_client_; 203 FakeOutputSurfaceClient output_surface_client_;
241 scoped_ptr<FakeOutputSurface> output_surface_; 204 scoped_ptr<FakeOutputSurface> output_surface_;
242 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; 205 scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
243 scoped_ptr<ResourceProvider> resource_provider_; 206 scoped_ptr<ResourceProvider> resource_provider_;
244 scoped_ptr<internal::TaskGraphRunner> task_graph_runner_; 207 scoped_ptr<internal::TaskGraphRunner> task_graph_runner_;
245 scoped_ptr<PixelBufferRasterWorkerPool> pixel_buffer_raster_worker_pool_;
246 scoped_ptr<ImageRasterWorkerPool> image_raster_worker_pool_;
247 scoped_ptr<DirectRasterWorkerPool> direct_raster_worker_pool_;
248 LapTimer timer_; 208 LapTimer timer_;
249 }; 209 };
250 210
251 class RasterWorkerPoolPerfTest 211 class RasterWorkerPoolPerfTest
252 : public RasterWorkerPoolPerfTestBase, 212 : public RasterWorkerPoolPerfTestBase,
253 public testing::TestWithParam<RasterWorkerPoolType>, 213 public testing::TestWithParam<RasterWorkerPoolType>,
254 public RasterWorkerPoolClient { 214 public RasterizerClient {
255 public: 215 public:
256 RasterWorkerPoolPerfTest() : raster_worker_pool_(NULL) { 216 RasterWorkerPoolPerfTest() {
257 switch (GetParam()) { 217 switch (GetParam()) {
258 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: 218 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
259 raster_worker_pool_ = pixel_buffer_raster_worker_pool_.get(); 219 raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
220 base::MessageLoopProxy::current().get(),
221 task_graph_runner_.get(),
222 resource_provider_.get(),
223 std::numeric_limits<size_t>::max());
260 break; 224 break;
261 case RASTER_WORKER_POOL_TYPE_IMAGE: 225 case RASTER_WORKER_POOL_TYPE_IMAGE:
262 raster_worker_pool_ = image_raster_worker_pool_.get(); 226 raster_worker_pool_ = ImageRasterWorkerPool::Create(
227 base::MessageLoopProxy::current().get(),
228 task_graph_runner_.get(),
229 resource_provider_.get(),
230 GL_TEXTURE_2D);
263 break; 231 break;
264 case RASTER_WORKER_POOL_TYPE_DIRECT: 232 case RASTER_WORKER_POOL_TYPE_DIRECT:
265 raster_worker_pool_ = direct_raster_worker_pool_.get(); 233 raster_worker_pool_ = DirectRasterWorkerPool::Create(
234 base::MessageLoopProxy::current().get(),
235 resource_provider_.get(),
236 context_provider_.get());
266 break; 237 break;
267 } 238 }
268 239
269 DCHECK(raster_worker_pool_); 240 DCHECK(raster_worker_pool_);
270 raster_worker_pool_->SetClient(this); 241 raster_worker_pool_->AsRasterizer()->SetClient(this);
271 } 242 }
272 243
273 // Overridden from testing::Test: 244 // Overridden from testing::Test:
274 virtual void TearDown() OVERRIDE { 245 virtual void TearDown() OVERRIDE {
275 raster_worker_pool_->Shutdown(); 246 raster_worker_pool_->AsRasterizer()->Shutdown();
276 raster_worker_pool_->CheckForCompletedTasks(); 247 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
277 } 248 }
278 249
279 // Overriden from RasterWorkerPoolClient: 250 // Overriden from RasterizerClient:
280 virtual bool ShouldForceTasksRequiredForActivationToComplete() 251 virtual bool ShouldForceTasksRequiredForActivationToComplete() const
281 const OVERRIDE { 252 OVERRIDE {
282 return false; 253 return false;
283 } 254 }
284 virtual void DidFinishRunningTasks() OVERRIDE { 255 virtual void DidFinishRunningTasks() OVERRIDE {
285 raster_worker_pool_->CheckForCompletedTasks(); 256 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
286 base::MessageLoop::current()->Quit(); 257 base::MessageLoop::current()->Quit();
287 } 258 }
288 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {} 259 virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {}
289 260
290 void RunMessageLoopUntilAllTasksHaveCompleted() { 261 void RunMessageLoopUntilAllTasksHaveCompleted() {
291 task_graph_runner_->RunUntilIdle(); 262 task_graph_runner_->RunUntilIdle();
292 base::MessageLoop::current()->Run(); 263 base::MessageLoop::current()->Run();
293 } 264 }
294 265
295 void RunScheduleTasksTest(const std::string& test_name, 266 void RunScheduleTasksTest(const std::string& test_name,
296 unsigned num_raster_tasks, 267 unsigned num_raster_tasks,
297 unsigned num_image_decode_tasks) { 268 unsigned num_image_decode_tasks) {
298 internal::WorkerPoolTask::Vector image_decode_tasks; 269 internal::ImageDecodeTask::Vector image_decode_tasks;
299 RasterTaskVector raster_tasks; 270 RasterTaskVector raster_tasks;
300 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 271 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
301 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 272 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
302 273
303 // Avoid unnecessary heap allocations by reusing the same queue. 274 // Avoid unnecessary heap allocations by reusing the same queue.
304 RasterTaskQueue queue; 275 RasterTaskQueue queue;
305 276
306 timer_.Reset(); 277 timer_.Reset();
307 do { 278 do {
308 queue.Reset(); 279 queue.Reset();
309 BuildRasterTaskQueue(&queue, raster_tasks); 280 BuildRasterTaskQueue(&queue, raster_tasks);
310 raster_worker_pool_->ScheduleTasks(&queue); 281 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue);
311 raster_worker_pool_->CheckForCompletedTasks(); 282 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
312 timer_.NextLap(); 283 timer_.NextLap();
313 } while (!timer_.HasTimeLimitExpired()); 284 } while (!timer_.HasTimeLimitExpired());
314 285
315 RasterTaskQueue empty; 286 RasterTaskQueue empty;
316 raster_worker_pool_->ScheduleTasks(&empty); 287 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&empty);
317 RunMessageLoopUntilAllTasksHaveCompleted(); 288 RunMessageLoopUntilAllTasksHaveCompleted();
318 289
319 perf_test::PrintResult("schedule_tasks", 290 perf_test::PrintResult("schedule_tasks",
320 TestModifierString(), 291 TestModifierString(),
321 test_name, 292 test_name,
322 timer_.LapsPerSecond(), 293 timer_.LapsPerSecond(),
323 "runs/s", 294 "runs/s",
324 true); 295 true);
325 } 296 }
326 297
327 void RunScheduleAlternateTasksTest(const std::string& test_name, 298 void RunScheduleAlternateTasksTest(const std::string& test_name,
328 unsigned num_raster_tasks, 299 unsigned num_raster_tasks,
329 unsigned num_image_decode_tasks) { 300 unsigned num_image_decode_tasks) {
330 const size_t kNumVersions = 2; 301 const size_t kNumVersions = 2;
331 internal::WorkerPoolTask::Vector image_decode_tasks[kNumVersions]; 302 internal::ImageDecodeTask::Vector image_decode_tasks[kNumVersions];
332 RasterTaskVector raster_tasks[kNumVersions]; 303 RasterTaskVector raster_tasks[kNumVersions];
333 for (size_t i = 0; i < kNumVersions; ++i) { 304 for (size_t i = 0; i < kNumVersions; ++i) {
334 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]); 305 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks[i]);
335 CreateRasterTasks( 306 CreateRasterTasks(
336 num_raster_tasks, image_decode_tasks[i], &raster_tasks[i]); 307 num_raster_tasks, image_decode_tasks[i], &raster_tasks[i]);
337 } 308 }
338 309
339 // Avoid unnecessary heap allocations by reusing the same queue. 310 // Avoid unnecessary heap allocations by reusing the same queue.
340 RasterTaskQueue queue; 311 RasterTaskQueue queue;
341 312
342 size_t count = 0; 313 size_t count = 0;
343 timer_.Reset(); 314 timer_.Reset();
344 do { 315 do {
345 queue.Reset(); 316 queue.Reset();
346 BuildRasterTaskQueue(&queue, raster_tasks[count % kNumVersions]); 317 BuildRasterTaskQueue(&queue, raster_tasks[count % kNumVersions]);
347 raster_worker_pool_->ScheduleTasks(&queue); 318 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue);
348 raster_worker_pool_->CheckForCompletedTasks(); 319 raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
349 ++count; 320 ++count;
350 timer_.NextLap(); 321 timer_.NextLap();
351 } while (!timer_.HasTimeLimitExpired()); 322 } while (!timer_.HasTimeLimitExpired());
352 323
353 RasterTaskQueue empty; 324 RasterTaskQueue empty;
354 raster_worker_pool_->ScheduleTasks(&empty); 325 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&empty);
355 RunMessageLoopUntilAllTasksHaveCompleted(); 326 RunMessageLoopUntilAllTasksHaveCompleted();
356 327
357 perf_test::PrintResult("schedule_alternate_tasks", 328 perf_test::PrintResult("schedule_alternate_tasks",
358 TestModifierString(), 329 TestModifierString(),
359 test_name, 330 test_name,
360 timer_.LapsPerSecond(), 331 timer_.LapsPerSecond(),
361 "runs/s", 332 "runs/s",
362 true); 333 true);
363 } 334 }
364 335
365 void RunScheduleAndExecuteTasksTest(const std::string& test_name, 336 void RunScheduleAndExecuteTasksTest(const std::string& test_name,
366 unsigned num_raster_tasks, 337 unsigned num_raster_tasks,
367 unsigned num_image_decode_tasks) { 338 unsigned num_image_decode_tasks) {
368 internal::WorkerPoolTask::Vector image_decode_tasks; 339 internal::ImageDecodeTask::Vector image_decode_tasks;
369 RasterTaskVector raster_tasks; 340 RasterTaskVector raster_tasks;
370 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 341 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
371 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 342 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
372 343
373 // Avoid unnecessary heap allocations by reusing the same queue. 344 // Avoid unnecessary heap allocations by reusing the same queue.
374 RasterTaskQueue queue; 345 RasterTaskQueue queue;
375 346
376 timer_.Reset(); 347 timer_.Reset();
377 do { 348 do {
378 queue.Reset(); 349 queue.Reset();
379 BuildRasterTaskQueue(&queue, raster_tasks); 350 BuildRasterTaskQueue(&queue, raster_tasks);
380 raster_worker_pool_->ScheduleTasks(&queue); 351 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue);
381 RunMessageLoopUntilAllTasksHaveCompleted(); 352 RunMessageLoopUntilAllTasksHaveCompleted();
382 timer_.NextLap(); 353 timer_.NextLap();
383 } while (!timer_.HasTimeLimitExpired()); 354 } while (!timer_.HasTimeLimitExpired());
384 355
385 RasterTaskQueue empty; 356 RasterTaskQueue empty;
386 raster_worker_pool_->ScheduleTasks(&empty); 357 raster_worker_pool_->AsRasterizer()->ScheduleTasks(&empty);
387 RunMessageLoopUntilAllTasksHaveCompleted(); 358 RunMessageLoopUntilAllTasksHaveCompleted();
388 359
389 perf_test::PrintResult("schedule_and_execute_tasks", 360 perf_test::PrintResult("schedule_and_execute_tasks",
390 TestModifierString(), 361 TestModifierString(),
391 test_name, 362 test_name,
392 timer_.LapsPerSecond(), 363 timer_.LapsPerSecond(),
393 "runs/s", 364 "runs/s",
394 true); 365 true);
395 } 366 }
396 367
397 private: 368 private:
398 std::string TestModifierString() const { 369 std::string TestModifierString() const {
399 switch (GetParam()) { 370 switch (GetParam()) {
400 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: 371 case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
401 return std::string("_pixel_raster_worker_pool"); 372 return std::string("_pixel_raster_worker_pool");
402 case RASTER_WORKER_POOL_TYPE_IMAGE: 373 case RASTER_WORKER_POOL_TYPE_IMAGE:
403 return std::string("_image_raster_worker_pool"); 374 return std::string("_image_raster_worker_pool");
404 case RASTER_WORKER_POOL_TYPE_DIRECT: 375 case RASTER_WORKER_POOL_TYPE_DIRECT:
405 return std::string("_direct_raster_worker_pool"); 376 return std::string("_direct_raster_worker_pool");
406 } 377 }
407 NOTREACHED(); 378 NOTREACHED();
408 return std::string(); 379 return std::string();
409 } 380 }
410 381
411 RasterWorkerPool* raster_worker_pool_; 382 scoped_ptr<RasterWorkerPool> raster_worker_pool_;
412 }; 383 };
413 384
414 TEST_P(RasterWorkerPoolPerfTest, ScheduleTasks) { 385 TEST_P(RasterWorkerPoolPerfTest, ScheduleTasks) {
415 RunScheduleTasksTest("1_0", 1, 0); 386 RunScheduleTasksTest("1_0", 1, 0);
416 RunScheduleTasksTest("32_0", 32, 0); 387 RunScheduleTasksTest("32_0", 32, 0);
417 RunScheduleTasksTest("1_1", 1, 1); 388 RunScheduleTasksTest("1_1", 1, 1);
418 RunScheduleTasksTest("32_1", 32, 1); 389 RunScheduleTasksTest("32_1", 32, 1);
419 RunScheduleTasksTest("1_4", 1, 4); 390 RunScheduleTasksTest("1_4", 1, 4);
420 RunScheduleTasksTest("32_4", 32, 4); 391 RunScheduleTasksTest("32_4", 32, 4);
421 } 392 }
(...skipping 21 matching lines...) Expand all
443 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, 414 ::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER,
444 RASTER_WORKER_POOL_TYPE_IMAGE, 415 RASTER_WORKER_POOL_TYPE_IMAGE,
445 RASTER_WORKER_POOL_TYPE_DIRECT)); 416 RASTER_WORKER_POOL_TYPE_DIRECT));
446 417
447 class RasterWorkerPoolCommonPerfTest : public RasterWorkerPoolPerfTestBase, 418 class RasterWorkerPoolCommonPerfTest : public RasterWorkerPoolPerfTestBase,
448 public testing::Test { 419 public testing::Test {
449 public: 420 public:
450 void RunBuildRasterTaskQueueTest(const std::string& test_name, 421 void RunBuildRasterTaskQueueTest(const std::string& test_name,
451 unsigned num_raster_tasks, 422 unsigned num_raster_tasks,
452 unsigned num_image_decode_tasks) { 423 unsigned num_image_decode_tasks) {
453 internal::WorkerPoolTask::Vector image_decode_tasks; 424 internal::ImageDecodeTask::Vector image_decode_tasks;
454 RasterTaskVector raster_tasks; 425 RasterTaskVector raster_tasks;
455 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks); 426 CreateImageDecodeTasks(num_image_decode_tasks, &image_decode_tasks);
456 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); 427 CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks);
457 428
458 // Avoid unnecessary heap allocations by reusing the same queue. 429 // Avoid unnecessary heap allocations by reusing the same queue.
459 RasterTaskQueue queue; 430 RasterTaskQueue queue;
460 431
461 timer_.Reset(); 432 timer_.Reset();
462 do { 433 do {
463 queue.Reset(); 434 queue.Reset();
(...skipping 14 matching lines...) Expand all
478 RunBuildRasterTaskQueueTest("1_0", 1, 0); 449 RunBuildRasterTaskQueueTest("1_0", 1, 0);
479 RunBuildRasterTaskQueueTest("32_0", 32, 0); 450 RunBuildRasterTaskQueueTest("32_0", 32, 0);
480 RunBuildRasterTaskQueueTest("1_1", 1, 1); 451 RunBuildRasterTaskQueueTest("1_1", 1, 1);
481 RunBuildRasterTaskQueueTest("32_1", 32, 1); 452 RunBuildRasterTaskQueueTest("32_1", 32, 1);
482 RunBuildRasterTaskQueueTest("1_4", 1, 4); 453 RunBuildRasterTaskQueueTest("1_4", 1, 4);
483 RunBuildRasterTaskQueueTest("32_4", 32, 4); 454 RunBuildRasterTaskQueueTest("32_4", 32, 4);
484 } 455 }
485 456
486 } // namespace 457 } // namespace
487 } // namespace cc 458 } // namespace cc
OLDNEW
« no previous file with comments | « cc/resources/raster_worker_pool_delegate.cc ('k') | cc/resources/raster_worker_pool_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698