Index: cc/resources/raster_worker_pool_perftest.cc |
diff --git a/cc/resources/raster_worker_pool_perftest.cc b/cc/resources/raster_worker_pool_perftest.cc |
index 703a95da911ee4be93a66461d4e5943306761386..70e667ac7d179e7a0dfa239a464193a29f45ca79 100644 |
--- a/cc/resources/raster_worker_pool_perftest.cc |
+++ b/cc/resources/raster_worker_pool_perftest.cc |
@@ -5,6 +5,7 @@ |
#include "cc/resources/raster_worker_pool.h" |
#include "base/time/time.h" |
+#include "cc/resources/direct_raster_worker_pool.h" |
#include "cc/resources/image_raster_worker_pool.h" |
#include "cc/resources/pixel_buffer_raster_worker_pool.h" |
#include "cc/resources/resource_provider.h" |
@@ -22,7 +23,8 @@ namespace { |
enum RasterWorkerPoolType { |
RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
- RASTER_WORKER_POOL_TYPE_IMAGE |
+ RASTER_WORKER_POOL_TYPE_IMAGE, |
+ RASTER_WORKER_POOL_TYPE_DIRECT |
}; |
static const int kTimeLimitMillis = 2000; |
@@ -39,6 +41,7 @@ class PerfWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
// Overridden from internal::WorkerPoolTask: |
virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) |
OVERRIDE {} |
+ virtual void RunOnOriginThread() OVERRIDE {} |
virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) |
OVERRIDE {} |
virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); } |
@@ -58,8 +61,8 @@ class PerfWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
class PerfRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
public: |
PerfRasterWorkerPoolTaskImpl(scoped_ptr<ScopedResource> resource, |
- internal::Task::Vector* dependencies) |
- : internal::RasterWorkerPoolTask(resource.get(), dependencies, false), |
+ internal::WorkerPoolTask::Vector* dependencies) |
+ : internal::RasterWorkerPoolTask(resource.get(), dependencies), |
resource_(resource.Pass()) {} |
// Overridden from internal::Task: |
@@ -70,16 +73,13 @@ class PerfRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { |
OVERRIDE { |
client->AcquireCanvasForRaster(this); |
} |
+ virtual void RunOnOriginThread() OVERRIDE {} |
virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) |
OVERRIDE { |
client->OnRasterCompleted(this, PicturePileImpl::Analysis()); |
} |
virtual void RunReplyOnOriginThread() OVERRIDE { Reset(); } |
- // Overridden from internal::RasterWorkerPoolTask: |
- virtual void RunOnOriginThread(ResourceProvider* resource_provider, |
- ContextProvider* context_provider) OVERRIDE {} |
- |
void Reset() { |
did_run_ = false; |
did_complete_ = false; |
@@ -106,7 +106,6 @@ class PerfPixelBufferRasterWorkerPoolImpl : public PixelBufferRasterWorkerPool { |
ResourceProvider* resource_provider) |
: PixelBufferRasterWorkerPool(task_graph_runner, |
resource_provider, |
- NULL, |
std::numeric_limits<size_t>::max()) {} |
}; |
@@ -116,10 +115,16 @@ class PerfImageRasterWorkerPoolImpl : public ImageRasterWorkerPool { |
ResourceProvider* resource_provider) |
: ImageRasterWorkerPool(task_graph_runner, |
resource_provider, |
- NULL, |
GL_TEXTURE_2D) {} |
}; |
+class PerfDirectRasterWorkerPoolImpl : public DirectRasterWorkerPool { |
+ public: |
+ PerfDirectRasterWorkerPoolImpl(ResourceProvider* resource_provider, |
+ ContextProvider* context_provider) |
+ : DirectRasterWorkerPool(resource_provider, context_provider) {} |
+}; |
+ |
class RasterWorkerPoolPerfTest |
: public testing::TestWithParam<RasterWorkerPoolType>, |
public RasterWorkerPoolClient { |
@@ -130,7 +135,7 @@ class RasterWorkerPoolPerfTest |
static Task Create() { return Task(new PerfWorkerPoolTaskImpl); } |
- void AppendTo(internal::Task::Vector* dependencies) const { |
+ void AppendTo(internal::WorkerPoolTask::Vector* dependencies) const { |
dependencies->push_back(internal_); |
} |
@@ -145,7 +150,7 @@ class RasterWorkerPoolPerfTest |
static RasterTask Create(scoped_ptr<ScopedResource> resource, |
const Task::Vector& image_decode_tasks) { |
- internal::Task::Vector dependencies; |
+ internal::WorkerPoolTask::Vector dependencies; |
for (Task::Vector::const_iterator it = image_decode_tasks.begin(); |
it != image_decode_tasks.end(); |
++it) |
@@ -181,6 +186,10 @@ class RasterWorkerPoolPerfTest |
raster_worker_pool_.reset(new PerfImageRasterWorkerPoolImpl( |
task_graph_runner_.get(), resource_provider_.get())); |
break; |
+ case RASTER_WORKER_POOL_TYPE_DIRECT: |
+ raster_worker_pool_.reset(new PerfDirectRasterWorkerPoolImpl( |
+ resource_provider_.get(), context_provider_)); |
+ break; |
} |
DCHECK(raster_worker_pool_); |
@@ -199,9 +208,18 @@ class RasterWorkerPoolPerfTest |
const OVERRIDE { |
return false; |
} |
- virtual void DidFinishRunningTasks() OVERRIDE {} |
+ virtual void DidFinishRunningTasks() OVERRIDE { |
+ raster_worker_pool_->CheckForCompletedTasks(); |
+ base::MessageLoop::current()->Quit(); |
+ } |
virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {} |
+ void RunMessageLoopUntilAllTasksHaveCompleted() { |
+ while (task_graph_runner_->RunTaskForTesting()) |
+ continue; |
+ base::MessageLoop::current()->Run(); |
+ } |
+ |
void CreateImageDecodeTasks(unsigned num_image_decode_tasks, |
Task::Vector* image_decode_tasks) { |
for (unsigned i = 0; i < num_image_decode_tasks; ++i) |
@@ -223,8 +241,8 @@ class RasterWorkerPoolPerfTest |
} |
} |
- void AppendRasterTasks(RasterWorkerPool::RasterTask::Queue* tasks, |
- const RasterTask::Vector& raster_tasks) { |
+ void BuildTaskQueue(RasterWorkerPool::RasterTask::Queue* tasks, |
+ const RasterTask::Vector& raster_tasks) { |
for (RasterTask::Vector::const_iterator it = raster_tasks.begin(); |
it != raster_tasks.end(); |
++it) |
@@ -240,20 +258,20 @@ class RasterWorkerPoolPerfTest |
CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); |
// Avoid unnecessary heap allocations by reusing the same queue. |
- RasterWorkerPool::RasterTask::Queue tasks; |
+ RasterWorkerPool::RasterTask::Queue queue; |
timer_.Reset(); |
do { |
- tasks.Reset(); |
- AppendRasterTasks(&tasks, raster_tasks); |
- raster_worker_pool_->ScheduleTasks(&tasks); |
+ queue.Reset(); |
+ BuildTaskQueue(&queue, raster_tasks); |
+ raster_worker_pool_->ScheduleTasks(&queue); |
raster_worker_pool_->CheckForCompletedTasks(); |
timer_.NextLap(); |
} while (!timer_.HasTimeLimitExpired()); |
RasterWorkerPool::RasterTask::Queue empty; |
raster_worker_pool_->ScheduleTasks(&empty); |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ RunMessageLoopUntilAllTasksHaveCompleted(); |
perf_test::PrintResult("schedule_tasks", |
"", |
@@ -276,14 +294,14 @@ class RasterWorkerPoolPerfTest |
} |
// Avoid unnecessary heap allocations by reusing the same queue. |
- RasterWorkerPool::RasterTask::Queue tasks; |
+ RasterWorkerPool::RasterTask::Queue queue; |
size_t count = 0; |
timer_.Reset(); |
do { |
- tasks.Reset(); |
- AppendRasterTasks(&tasks, raster_tasks[count % kNumVersions]); |
- raster_worker_pool_->ScheduleTasks(&tasks); |
+ queue.Reset(); |
+ BuildTaskQueue(&queue, raster_tasks[count % kNumVersions]); |
+ raster_worker_pool_->ScheduleTasks(&queue); |
raster_worker_pool_->CheckForCompletedTasks(); |
++count; |
timer_.NextLap(); |
@@ -291,7 +309,7 @@ class RasterWorkerPoolPerfTest |
RasterWorkerPool::RasterTask::Queue empty; |
raster_worker_pool_->ScheduleTasks(&empty); |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ RunMessageLoopUntilAllTasksHaveCompleted(); |
perf_test::PrintResult("schedule_alternate_tasks", |
"", |
@@ -310,22 +328,20 @@ class RasterWorkerPoolPerfTest |
CreateRasterTasks(num_raster_tasks, image_decode_tasks, &raster_tasks); |
// Avoid unnecessary heap allocations by reusing the same queue. |
- RasterWorkerPool::RasterTask::Queue tasks; |
+ RasterWorkerPool::RasterTask::Queue queue; |
timer_.Reset(); |
do { |
- tasks.Reset(); |
- AppendRasterTasks(&tasks, raster_tasks); |
- raster_worker_pool_->ScheduleTasks(&tasks); |
- while (task_graph_runner_->RunTaskForTesting()) |
- continue; |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ queue.Reset(); |
+ BuildTaskQueue(&queue, raster_tasks); |
+ raster_worker_pool_->ScheduleTasks(&queue); |
+ RunMessageLoopUntilAllTasksHaveCompleted(); |
timer_.NextLap(); |
} while (!timer_.HasTimeLimitExpired()); |
RasterWorkerPool::RasterTask::Queue empty; |
raster_worker_pool_->ScheduleTasks(&empty); |
- raster_worker_pool_->CheckForCompletedTasks(); |
+ RunMessageLoopUntilAllTasksHaveCompleted(); |
perf_test::PrintResult("schedule_and_execute_tasks", |
"", |
@@ -342,7 +358,6 @@ class RasterWorkerPoolPerfTest |
scoped_ptr<ResourceProvider> resource_provider_; |
scoped_ptr<internal::TaskGraphRunner> task_graph_runner_; |
scoped_ptr<RasterWorkerPool> raster_worker_pool_; |
- std::vector<RasterWorkerPool::RasterTask> tasks_; |
LapTimer timer_; |
}; |
@@ -376,7 +391,8 @@ TEST_P(RasterWorkerPoolPerfTest, ScheduleAndExecuteTasks) { |
INSTANTIATE_TEST_CASE_P(RasterWorkerPoolPerfTests, |
RasterWorkerPoolPerfTest, |
::testing::Values(RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER, |
- RASTER_WORKER_POOL_TYPE_IMAGE)); |
+ RASTER_WORKER_POOL_TYPE_IMAGE, |
+ RASTER_WORKER_POOL_TYPE_DIRECT)); |
} // namespace |
} // namespace cc |