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

Unified Diff: cc/resources/raster_worker_pool.cc

Issue 523243002: cc: Generalize raster task notifications (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Renaming Created 6 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: cc/resources/raster_worker_pool.cc
diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc
index d175141f3f6308c688637857702b0ab9d9e10275..c4b133f1e53f17fa9d1849f1f63e5eed2382538a 100644
--- a/cc/resources/raster_worker_pool.cc
+++ b/cc/resources/raster_worker_pool.cc
@@ -18,9 +18,7 @@ namespace {
class RasterTaskGraphRunner : public TaskGraphRunner,
public base::DelegateSimpleThread::Delegate {
public:
- RasterTaskGraphRunner()
- : synthetic_delay_(base::debug::TraceEventSyntheticDelay::Lookup(
- "cc.RasterRequiredForActivation")) {
+ RasterTaskGraphRunner() {
size_t num_threads = RasterWorkerPool::GetNumRasterThreads();
while (workers_.size() < num_threads) {
scoped_ptr<base::DelegateSimpleThread> worker =
@@ -39,10 +37,6 @@ class RasterTaskGraphRunner : public TaskGraphRunner,
virtual ~RasterTaskGraphRunner() { NOTREACHED(); }
- base::debug::TraceEventSyntheticDelay* synthetic_delay() {
- return synthetic_delay_;
- }
-
private:
// Overridden from base::DelegateSimpleThread::Delegate:
virtual void Run() OVERRIDE {
@@ -50,7 +44,6 @@ class RasterTaskGraphRunner : public TaskGraphRunner,
}
ScopedPtrDeque<base::DelegateSimpleThread> workers_;
- base::debug::TraceEventSyntheticDelay* synthetic_delay_;
};
base::LazyInstance<RasterTaskGraphRunner>::Leaky g_task_graph_runner =
@@ -64,13 +57,21 @@ class RasterFinishedTaskImpl : public RasterizerTask {
public:
explicit RasterFinishedTaskImpl(
base::SequencedTaskRunner* task_runner,
- const base::Closure& on_raster_finished_callback)
+ const base::Closure& on_raster_finished_callback,
+ base::debug::TraceEventSyntheticDelay* synthetic_delay)
: task_runner_(task_runner),
- on_raster_finished_callback_(on_raster_finished_callback) {}
+ on_raster_finished_callback_(on_raster_finished_callback),
+ synthetic_delay_(synthetic_delay) {
+ if (synthetic_delay_)
+ synthetic_delay_->BeginParallel(&activation_delay_end_time_);
+ }
// Overridden from Task:
virtual void RunOnWorkerThread() OVERRIDE {
TRACE_EVENT0("cc", "RasterFinishedTaskImpl::RunOnWorkerThread");
+
+ if (synthetic_delay_)
+ synthetic_delay_->EndParallel(activation_delay_end_time_);
RasterFinished();
}
@@ -89,45 +90,10 @@ class RasterFinishedTaskImpl : public RasterizerTask {
private:
scoped_refptr<base::SequencedTaskRunner> task_runner_;
const base::Closure on_raster_finished_callback_;
-
- DISALLOW_COPY_AND_ASSIGN(RasterFinishedTaskImpl);
-};
-
-class RasterRequiredForActivationFinishedTaskImpl
- : public RasterFinishedTaskImpl {
- public:
- RasterRequiredForActivationFinishedTaskImpl(
- base::SequencedTaskRunner* task_runner,
- const base::Closure& on_raster_finished_callback,
- size_t tasks_required_for_activation_count)
- : RasterFinishedTaskImpl(task_runner, on_raster_finished_callback),
- tasks_required_for_activation_count_(
- tasks_required_for_activation_count) {
- if (tasks_required_for_activation_count_) {
- g_task_graph_runner.Get().synthetic_delay()->BeginParallel(
- &activation_delay_end_time_);
- }
- }
-
- // Overridden from Task:
- virtual void RunOnWorkerThread() OVERRIDE {
- TRACE_EVENT0(
- "cc", "RasterRequiredForActivationFinishedTaskImpl::RunOnWorkerThread");
-
- if (tasks_required_for_activation_count_) {
- g_task_graph_runner.Get().synthetic_delay()->EndParallel(
- activation_delay_end_time_);
- }
- RasterFinished();
- }
-
- private:
- virtual ~RasterRequiredForActivationFinishedTaskImpl() {}
-
+ base::debug::TraceEventSyntheticDelay* synthetic_delay_;
base::TimeTicks activation_delay_end_time_;
- const size_t tasks_required_for_activation_count_;
- DISALLOW_COPY_AND_ASSIGN(RasterRequiredForActivationFinishedTaskImpl);
+ DISALLOW_COPY_AND_ASSIGN(RasterFinishedTaskImpl);
};
} // namespace
@@ -140,10 +106,67 @@ unsigned RasterWorkerPool::kOnDemandRasterTaskPriority = 0u;
unsigned RasterWorkerPool::kBenchmarkRasterTaskPriority = 0u;
// Task priorities that make sure raster finished tasks run before any
// remaining raster tasks.
-unsigned RasterWorkerPool::kRasterFinishedTaskPriority = 2u;
-unsigned RasterWorkerPool::kRasterRequiredForActivationFinishedTaskPriority =
- 1u;
-unsigned RasterWorkerPool::kRasterTaskPriorityBase = 3u;
+unsigned RasterWorkerPool::kRasterFinishedTaskPriority = 1u;
+unsigned RasterWorkerPool::kRasterTaskPriorityBase = 2u;
+
+RasterWorkerPool::TaskSetSizes::TaskSetSizes() {
+ for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; task_set++)
+ sizes_[task_set] = 0;
+}
+
+RasterWorkerPool::TaskSetSizes::TaskSetSizes(const RasterTaskQueue* queue) {
+ for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; task_set++)
+ sizes_[task_set] = 0;
+
+ for (RasterTaskQueue::Item::Vector::const_iterator it = queue->items.begin();
+ it != queue->items.end();
+ ++it) {
+ *this += it->task_sets;
+ }
+}
+
+TaskSetCollection RasterWorkerPool::TaskSetSizes::ToTaskSetCollection() const {
+ TaskSetCollection task_set_collection;
+ for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; task_set++) {
+ if (sizes_[task_set] > 0)
+ task_set_collection[task_set] = true;
+ }
+ return task_set_collection;
+}
+
+size_t& RasterWorkerPool::TaskSetSizes::operator[](TaskSet task_set) {
+ return sizes_[task_set];
+}
+
+const size_t& RasterWorkerPool::TaskSetSizes::operator[](
+ TaskSet task_set) const {
+ return sizes_[task_set];
+}
+
+bool RasterWorkerPool::TaskSetSizes::operator==(
+ const TaskSetSizes& other) const {
+ for (size_t i = 0; i < kNumberOfTaskSets; i++) {
+ if (sizes_[i] != other.sizes_[i])
+ return false;
+ }
+ return true;
+}
+
+void RasterWorkerPool::TaskSetSizes::operator+=(
+ const TaskSetCollection& task_set_collection) {
+ for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; task_set++) {
+ if (task_set_collection[task_set])
+ sizes_[task_set]++;
+ }
+}
+
+void RasterWorkerPool::TaskSetSizes::operator-=(
+ const TaskSetCollection& task_set_collection) {
+ for (TaskSet task_set = 0; task_set < kNumberOfTaskSets; task_set++) {
+ if (task_set_collection[task_set])
+ sizes_[task_set]--;
+ }
+}
RasterWorkerPool::RasterWorkerPool() {}
@@ -173,21 +196,10 @@ TaskGraphRunner* RasterWorkerPool::GetTaskGraphRunner() {
// static
scoped_refptr<RasterizerTask> RasterWorkerPool::CreateRasterFinishedTask(
base::SequencedTaskRunner* task_runner,
- const base::Closure& on_raster_finished_callback) {
- return make_scoped_refptr(
- new RasterFinishedTaskImpl(task_runner, on_raster_finished_callback));
-}
-
-// static
-scoped_refptr<RasterizerTask>
-RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
- size_t tasks_required_for_activation_count,
- base::SequencedTaskRunner* task_runner,
- const base::Closure& on_raster_finished_callback) {
- return make_scoped_refptr(new RasterRequiredForActivationFinishedTaskImpl(
- task_runner,
- on_raster_finished_callback,
- tasks_required_for_activation_count));
+ const base::Closure& on_raster_finished_callback,
+ base::debug::TraceEventSyntheticDelay* synthetic_delay) {
+ return make_scoped_refptr(new RasterFinishedTaskImpl(
+ task_runner, on_raster_finished_callback, synthetic_delay));
}
// static

Powered by Google App Engine
This is Rietveld 408576698