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..dcceb1f2155c747b4a5edd4a1a438c4f1c88a6a8 |
--- /dev/null |
+++ b/cc/resources/rasterizer_delegate.cc |
@@ -0,0 +1,89 @@ |
+// 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" |
+ |
+#include "base/debug/trace_event.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* queue) { |
+ for (size_t i = 0; i < rasterizers_.size(); ++i) |
+ rasterizers_[i]->ScheduleTasks(&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() { |
+ TRACE_EVENT1("cc", |
+ "RasterizerDelegate::DidFinishRunningTasks", |
+ "pending_count", |
+ did_finish_running_tasks_pending_count_); |
+ |
+ DCHECK_LT(0u, did_finish_running_tasks_pending_count_); |
+ if (--did_finish_running_tasks_pending_count_) |
+ return; |
+ client_->DidFinishRunningTasks(); |
+} |
+ |
+void RasterizerDelegate::DidFinishRunningTasksRequiredForActivation() { |
+ TRACE_EVENT1("cc", |
+ "RasterizerDelegate::DidFinishRunningTasksRequiredForActivation", |
+ "pending_count", |
+ did_finish_running_tasks_required_for_activation_pending_count_); |
+ |
+ 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 |