Chromium Code Reviews| Index: cc/resources/rasterizer_delegate.cc |
| diff --git a/cc/resources/rasterizer_delegate.cc b/cc/resources/rasterizer_delegate.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..b5c794ee2798a92478acfcdf84e7e1812628814b |
| --- /dev/null |
| +++ b/cc/resources/rasterizer_delegate.cc |
| @@ -0,0 +1,77 @@ |
| +// Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "cc/resources/rasterizer_delegate.h" |
| + |
| +namespace cc { |
| + |
| +RasterizerDelegate::RasterizerDelegate(RasterizerClient* client, |
| + Rasterizer** rasterizers, |
| + size_t num_rasterizers) |
| + : client_(client), |
| + rasterizers_(rasterizers, rasterizers + num_rasterizers), |
| + did_finish_running_tasks_pending_count_(0u), |
| + did_finish_running_tasks_required_for_activation_pending_count_(0u) { |
| + DCHECK(client_); |
| + for (RasterizerVector::iterator it = rasterizers_.begin(); |
| + it != rasterizers_.end(); |
| + ++it) |
| + (*it)->SetClient(this); |
| +} |
| + |
| +RasterizerDelegate::~RasterizerDelegate() {} |
| + |
| +// static |
| +scoped_ptr<RasterizerDelegate> RasterizerDelegate::Create( |
| + RasterizerClient* client, |
| + Rasterizer** rasterizers, |
| + size_t num_rasterizers) { |
| + return make_scoped_ptr( |
| + new RasterizerDelegate(client, rasterizers, num_rasterizers)); |
| +} |
| + |
| +void RasterizerDelegate::Shutdown() { |
| + for (RasterizerVector::iterator it = rasterizers_.begin(); |
| + it != rasterizers_.end(); |
| + ++it) |
| + (*it)->Shutdown(); |
| +} |
| + |
| +void RasterizerDelegate::ScheduleTasks(RasterTaskQueue* raster_queue) { |
| + for (size_t i = 0; i < rasterizers_.size(); ++i) |
| + rasterizers_[i]->ScheduleTasks(&raster_queue[i]); |
| + |
| + did_finish_running_tasks_pending_count_ = rasterizers_.size(); |
| + did_finish_running_tasks_required_for_activation_pending_count_ = |
| + rasterizers_.size(); |
| +} |
| + |
| +void RasterizerDelegate::CheckForCompletedTasks() { |
| + for (RasterizerVector::iterator it = rasterizers_.begin(); |
| + it != rasterizers_.end(); |
| + ++it) |
| + (*it)->CheckForCompletedTasks(); |
| +} |
| + |
| +bool RasterizerDelegate::ShouldForceTasksRequiredForActivationToComplete() |
| + const { |
| + return client_->ShouldForceTasksRequiredForActivationToComplete(); |
| +} |
| + |
| +void RasterizerDelegate::DidFinishRunningTasks() { |
| + DCHECK_LT(0u, did_finish_running_tasks_pending_count_); |
|
vmpstr
2014/04/10 18:21:18
While here, could you TRACE_EVENT this one and the
reveman
2014/04/10 19:38:15
Done.
|
| + if (--did_finish_running_tasks_pending_count_) |
| + return; |
| + client_->DidFinishRunningTasks(); |
| +} |
| + |
| +void RasterizerDelegate::DidFinishRunningTasksRequiredForActivation() { |
| + DCHECK_LT(0u, |
| + did_finish_running_tasks_required_for_activation_pending_count_); |
| + if (--did_finish_running_tasks_required_for_activation_pending_count_) |
| + return; |
| + client_->DidFinishRunningTasksRequiredForActivation(); |
| +} |
| + |
| +} // namespace cc |