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 |