| Index: cc/resources/raster_worker_pool.cc
|
| diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc
|
| index dba3fc2ba02d60d2d7b17715f0f5a131adf0446c..a5cac410e7d09a89189cc135284bbc2171028501 100644
|
| --- a/cc/resources/raster_worker_pool.cc
|
| +++ b/cc/resources/raster_worker_pool.cc
|
| @@ -12,22 +12,53 @@ namespace {
|
|
|
| class RasterWorkerPoolTaskImpl : public internal::WorkerPoolTask {
|
| public:
|
| - RasterWorkerPoolTaskImpl(PicturePileImpl* picture_pile,
|
| - const RasterWorkerPool::RasterCallback& task,
|
| - const base::Closure& reply)
|
| - : internal::WorkerPoolTask(reply),
|
| - picture_pile_(picture_pile),
|
| - task_(task) {
|
| + RasterWorkerPoolTaskImpl(const base::Closure& callback,
|
| + const RasterWorkerPool::Task::Reply& reply)
|
| + : callback_(callback),
|
| + reply_(reply) {
|
| + }
|
| +
|
| + // Overridden from internal::WorkerPoolTask:
|
| + virtual void RunOnThread(unsigned thread_index) OVERRIDE {
|
| + callback_.Run();
|
| + }
|
| + virtual void DispatchCompletionCallback() OVERRIDE {
|
| + reply_.Run(!HasFinished());
|
| + }
|
| +
|
| + private:
|
| + virtual ~RasterWorkerPoolTaskImpl() {}
|
| +
|
| + const base::Closure callback_;
|
| + const RasterWorkerPool::Task::Reply reply_;
|
| +};
|
| +
|
| +class RasterWorkerPoolPictureTaskImpl : public internal::WorkerPoolTask {
|
| + public:
|
| + RasterWorkerPoolPictureTaskImpl(
|
| + PicturePileImpl* picture_pile,
|
| + const RasterWorkerPool::PictureTask::Callback& callback,
|
| + const RasterWorkerPool::Task::Reply& reply)
|
| + : picture_pile_(picture_pile),
|
| + callback_(callback),
|
| + reply_(reply) {
|
| DCHECK(picture_pile_);
|
| }
|
|
|
| + // Overridden from internal::WorkerPoolTask:
|
| virtual void RunOnThread(unsigned thread_index) OVERRIDE {
|
| - task_.Run(picture_pile_->GetCloneForDrawingOnThread(thread_index));
|
| + callback_.Run(picture_pile_->GetCloneForDrawingOnThread(thread_index));
|
| + }
|
| + virtual void DispatchCompletionCallback() OVERRIDE {
|
| + reply_.Run(!HasFinished());
|
| }
|
|
|
| private:
|
| + virtual ~RasterWorkerPoolPictureTaskImpl() {}
|
| +
|
| scoped_refptr<PicturePileImpl> picture_pile_;
|
| - RasterWorkerPool::RasterCallback task_;
|
| + const RasterWorkerPool::PictureTask::Callback callback_;
|
| + const RasterWorkerPool::Task::Reply reply_;
|
| };
|
|
|
| const char* kWorkerThreadNamePrefix = "CompositorRaster";
|
| @@ -36,23 +67,71 @@ const int kCheckForCompletedTasksDelayMs = 6;
|
|
|
| } // namespace
|
|
|
| -RasterWorkerPool::RasterWorkerPool(size_t num_threads)
|
| - : WorkerPool(
|
| - num_threads,
|
| - base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs),
|
| - kWorkerThreadNamePrefix) {
|
| +RasterWorkerPool::Task::Schedule::Schedule() {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Schedule::~Schedule() {
|
| +}
|
| +
|
| +void RasterWorkerPool::Task::Schedule::Append(const Task& task) {
|
| + DCHECK(!task.is_null());
|
| + internal::WorkerPoolTaskDependency::Create(
|
| + task.internal_, &task_graph_, NULL);
|
| +}
|
| +
|
| +void RasterWorkerPool::Task::Schedule::AppendWithDependencies(
|
| + const Task& task, Schedule* dependencies) {
|
| + DCHECK(!task.is_null());
|
| + internal::WorkerPoolTaskDependency::Create(
|
| + task.internal_, &task_graph_, &dependencies->task_graph_);
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Task() {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Task(const base::Closure& callback,
|
| + const Reply& reply)
|
| + : internal_(new RasterWorkerPoolTaskImpl(callback, reply)) {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::Task(scoped_refptr<internal::WorkerPoolTask> internal)
|
| + : internal_(internal) {
|
| +}
|
| +
|
| +RasterWorkerPool::Task::~Task() {
|
| +}
|
| +
|
| +void RasterWorkerPool::Task::Reset() {
|
| + internal_ = NULL;
|
| +}
|
| +
|
| +RasterWorkerPool::PictureTask::PictureTask(PicturePileImpl* picture_pile,
|
| + const Callback& callback,
|
| + const Reply& reply)
|
| + : RasterWorkerPool::Task(new RasterWorkerPoolPictureTaskImpl(picture_pile,
|
| + callback,
|
| + reply)) {
|
| +}
|
| +
|
| +RasterWorkerPool::RasterWorkerPool(size_t num_threads) : WorkerPool(
|
| + num_threads,
|
| + base::TimeDelta::FromMilliseconds(kCheckForCompletedTasksDelayMs),
|
| + kWorkerThreadNamePrefix) {
|
| }
|
|
|
| RasterWorkerPool::~RasterWorkerPool() {
|
| }
|
|
|
| -void RasterWorkerPool::PostRasterTaskAndReply(PicturePileImpl* picture_pile,
|
| - const RasterCallback& task,
|
| - const base::Closure& reply) {
|
| - PostTask(make_scoped_ptr(new RasterWorkerPoolTaskImpl(
|
| - picture_pile,
|
| - task,
|
| - reply)).PassAs<internal::WorkerPoolTask>());
|
| +void RasterWorkerPool::Shutdown() {
|
| + // Cancel all previously scheduled tasks.
|
| + Task::Schedule empty_schedule;
|
| + ScheduleTasks(&empty_schedule);
|
| +
|
| + WorkerPool::Shutdown();
|
| +}
|
| +
|
| +void RasterWorkerPool::ScheduleTasks(Task::Schedule* schedule) {
|
| + WorkerPool::ScheduleTasks(&schedule->task_graph_);
|
| }
|
|
|
| } // namespace cc
|
|
|