Index: cc/resources/raster_worker_pool.cc |
diff --git a/cc/resources/raster_worker_pool.cc b/cc/resources/raster_worker_pool.cc |
index 695fca6c5fd6fc072f6bf1454ea0674da17fd8ee..786f145d656c42b680a7c2ded7771030d930860f 100644 |
--- a/cc/resources/raster_worker_pool.cc |
+++ b/cc/resources/raster_worker_pool.cc |
@@ -6,14 +6,11 @@ |
#include "base/debug/trace_event_synthetic_delay.h" |
#include "base/json/json_writer.h" |
-#include "base/lazy_instance.h" |
#include "base/metrics/histogram.h" |
#include "base/values.h" |
#include "cc/debug/devtools_instrumentation.h" |
#include "cc/debug/traced_value.h" |
#include "cc/resources/picture_pile_impl.h" |
-#include "cc/resources/resource.h" |
-#include "cc/resources/resource_provider.h" |
#include "skia/ext/paint_simplifier.h" |
#include "third_party/skia/include/core/SkBitmap.h" |
#include "third_party/skia/include/core/SkPixelRef.h" |
@@ -78,7 +75,7 @@ |
bool use_gpu_rasterization, |
RenderingStatsInstrumentation* rendering_stats, |
const RasterWorkerPool::RasterTask::Reply& reply, |
- internal::Task::Vector* dependencies) |
+ TaskVector* dependencies) |
: internal::RasterWorkerPoolTask(resource, |
dependencies, |
use_gpu_rasterization), |
@@ -316,7 +313,7 @@ |
rendering_stats_(rendering_stats), |
reply_(reply) {} |
- // Overridden from internal::Task: |
+ // Overridden from internal::WorkerPoolTask: |
virtual void RunOnWorkerThread(unsigned thread_index) OVERRIDE { |
TRACE_EVENT0("cc", "ImageDecodeWorkerPoolTaskImpl::RunOnWorkerThread"); |
devtools_instrumentation::ScopedImageDecodeTask image_decode_task( |
@@ -325,8 +322,6 @@ |
pixel_ref_->lockPixels(); |
pixel_ref_->unlockPixels(); |
} |
- |
- // Overridden from internal::WorkerPoolTask: |
virtual void CompleteOnOriginThread() OVERRIDE { |
reply_.Run(!HasFinishedRunning()); |
} |
@@ -345,7 +340,8 @@ |
class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { |
public: |
- typedef base::Callback<void(const internal::WorkerPoolTask* source)> Callback; |
+ typedef base::Callback<void(const internal::WorkerPoolTask* source)> |
+ Callback; |
RasterFinishedWorkerPoolTaskImpl( |
const Callback& on_raster_finished_callback) |
@@ -414,48 +410,14 @@ |
RasterRequiredForActivationFinishedWorkerPoolTaskImpl); |
}; |
-class RasterTaskGraphRunner : public internal::TaskGraphRunner { |
- public: |
- RasterTaskGraphRunner() |
- : internal::TaskGraphRunner(RasterWorkerPool::GetNumRasterThreads(), |
- "CompositorRaster") {} |
-}; |
-base::LazyInstance<RasterTaskGraphRunner>::Leaky g_task_graph_runner = |
- LAZY_INSTANCE_INITIALIZER; |
- |
-const int kDefaultNumRasterThreads = 1; |
- |
-int g_num_raster_threads = 0; |
} // namespace |
namespace internal { |
-WorkerPoolTask::WorkerPoolTask() : did_complete_(false) {} |
- |
-WorkerPoolTask::~WorkerPoolTask() { |
- DCHECK_EQ(did_schedule_, did_complete_); |
- DCHECK(!did_run_ || did_complete_); |
-} |
- |
-void WorkerPoolTask::WillComplete() { |
- DCHECK(!did_complete_); |
-} |
- |
-void WorkerPoolTask::DidComplete() { |
- DCHECK(did_schedule_); |
- DCHECK(!did_complete_); |
- did_complete_ = true; |
-} |
- |
-bool WorkerPoolTask::HasCompleted() const { |
- return did_complete_; |
-} |
- |
-RasterWorkerPoolTask::RasterWorkerPoolTask( |
- const Resource* resource, |
- internal::Task::Vector* dependencies, |
- bool use_gpu_rasterization) |
+RasterWorkerPoolTask::RasterWorkerPoolTask(const Resource* resource, |
+ TaskVector* dependencies, |
+ bool use_gpu_rasterization) |
: did_run_(false), |
did_complete_(false), |
was_canceled_(false), |
@@ -464,7 +426,8 @@ |
dependencies_.swap(*dependencies); |
} |
-RasterWorkerPoolTask::~RasterWorkerPoolTask() {} |
+RasterWorkerPoolTask::~RasterWorkerPoolTask() { |
+} |
void RasterWorkerPoolTask::DidRun(bool was_canceled) { |
DCHECK(!did_run_); |
@@ -495,30 +458,36 @@ |
} // namespace internal |
-RasterWorkerPool::Task::Set::Set() {} |
- |
-RasterWorkerPool::Task::Set::~Set() {} |
+RasterWorkerPool::Task::Set::Set() { |
+} |
+ |
+RasterWorkerPool::Task::Set::~Set() { |
+} |
void RasterWorkerPool::Task::Set::Insert(const Task& task) { |
DCHECK(!task.is_null()); |
tasks_.push_back(task.internal_); |
} |
-RasterWorkerPool::Task::Task() {} |
+RasterWorkerPool::Task::Task() { |
+} |
RasterWorkerPool::Task::Task(internal::WorkerPoolTask* internal) |
: internal_(internal) { |
} |
-RasterWorkerPool::Task::~Task() {} |
+RasterWorkerPool::Task::~Task() { |
+} |
void RasterWorkerPool::Task::Reset() { |
internal_ = NULL; |
} |
-RasterWorkerPool::RasterTask::Queue::Queue() {} |
- |
-RasterWorkerPool::RasterTask::Queue::~Queue() {} |
+RasterWorkerPool::RasterTask::Queue::Queue() { |
+} |
+ |
+RasterWorkerPool::RasterTask::Queue::~Queue() { |
+} |
void RasterWorkerPool::RasterTask::Queue::Append( |
const RasterTask& task, bool required_for_activation) { |
@@ -528,7 +497,8 @@ |
tasks_required_for_activation_.insert(task.internal_.get()); |
} |
-RasterWorkerPool::RasterTask::RasterTask() {} |
+RasterWorkerPool::RasterTask::RasterTask() { |
+} |
RasterWorkerPool::RasterTask::RasterTask( |
internal::RasterWorkerPoolTask* internal) |
@@ -539,32 +509,7 @@ |
internal_ = NULL; |
} |
-RasterWorkerPool::RasterTask::~RasterTask() {} |
- |
-RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider, |
- ContextProvider* context_provider) |
- : namespace_token_(g_task_graph_runner.Pointer()->GetNamespaceToken()), |
- client_(NULL), |
- resource_provider_(resource_provider), |
- context_provider_(context_provider), |
- weak_ptr_factory_(this) {} |
- |
-RasterWorkerPool::~RasterWorkerPool() {} |
- |
-// static |
-void RasterWorkerPool::SetNumRasterThreads(int num_threads) { |
- DCHECK_LT(0, num_threads); |
- DCHECK_EQ(0, g_num_raster_threads); |
- |
- g_num_raster_threads = num_threads; |
-} |
- |
-// static |
-int RasterWorkerPool::GetNumRasterThreads() { |
- if (!g_num_raster_threads) |
- g_num_raster_threads = kDefaultNumRasterThreads; |
- |
- return g_num_raster_threads; |
+RasterWorkerPool::RasterTask::~RasterTask() { |
} |
// static |
@@ -610,60 +555,45 @@ |
reply)); |
} |
+RasterWorkerPool::RasterWorkerPool(ResourceProvider* resource_provider, |
+ ContextProvider* context_provider) |
+ : client_(NULL), |
+ resource_provider_(resource_provider), |
+ context_provider_(context_provider), |
+ weak_ptr_factory_(this) { |
+} |
+ |
+RasterWorkerPool::~RasterWorkerPool() { |
+} |
+ |
void RasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { |
client_ = client; |
} |
void RasterWorkerPool::Shutdown() { |
- TRACE_EVENT0("cc", "RasterWorkerPool::Shutdown"); |
- |
raster_tasks_.clear(); |
TaskGraph empty; |
SetTaskGraph(&empty); |
- g_task_graph_runner.Pointer()->WaitForTasksToFinishRunning(namespace_token_); |
+ WorkerPool::Shutdown(); |
weak_ptr_factory_.InvalidateWeakPtrs(); |
} |
void RasterWorkerPool::CheckForCompletedTasks() { |
TRACE_EVENT0("cc", "RasterWorkerPool::CheckForCompletedTasks"); |
- CheckForCompletedWorkerPoolTasks(); |
+ // Check for completed worker-thread tasks. |
+ CheckForCompletedWorkerTasks(); |
// Complete gpu rasterization tasks. |
while (!completed_gpu_raster_tasks_.empty()) { |
internal::RasterWorkerPoolTask* task = |
completed_gpu_raster_tasks_.front().get(); |
- |
task->WillComplete(); |
task->CompleteOnOriginThread(); |
task->DidComplete(); |
completed_gpu_raster_tasks_.pop_front(); |
} |
-} |
- |
-void RasterWorkerPool::CheckForCompletedWorkerPoolTasks() { |
- internal::Task::Vector completed_tasks; |
- g_task_graph_runner.Pointer()->CollectCompletedTasks(namespace_token_, |
- &completed_tasks); |
- |
- for (internal::Task::Vector::const_iterator it = completed_tasks.begin(); |
- it != completed_tasks.end(); |
- ++it) { |
- internal::WorkerPoolTask* task = static_cast<internal::WorkerPoolTask*>( |
- it->get()); |
- |
- task->WillComplete(); |
- task->CompleteOnOriginThread(); |
- task->DidComplete(); |
- } |
-} |
- |
-void RasterWorkerPool::SetTaskGraph(TaskGraph* graph) { |
- TRACE_EVENT1( |
- "cc", "RasterWorkerPool::SetTaskGraph", "num_tasks", graph->size()); |
- |
- g_task_graph_runner.Pointer()->SetTaskGraph(namespace_token_, graph); |
} |
void RasterWorkerPool::SetRasterTasks(RasterTask::Queue* queue) { |
@@ -713,7 +643,7 @@ |
scoped_refptr<internal::WorkerPoolTask> |
RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask( |
- size_t tasks_required_for_activation_count) { |
+ size_t tasks_required_for_activation_count) { |
return make_scoped_refptr( |
new RasterRequiredForActivationFinishedWorkerPoolTaskImpl( |
base::Bind(&RasterWorkerPool::OnRasterRequiredForActivationFinished, |
@@ -766,7 +696,7 @@ |
// static |
internal::GraphNode* RasterWorkerPool::CreateGraphNodeForRasterTask( |
internal::WorkerPoolTask* raster_task, |
- const internal::Task::Vector& decode_tasks, |
+ const TaskVector& decode_tasks, |
unsigned priority, |
TaskGraph* graph) { |
DCHECK(!raster_task->HasCompleted()); |
@@ -775,10 +705,9 @@ |
raster_task, priority, graph); |
// Insert image decode tasks. |
- for (internal::Task::Vector::const_iterator it = decode_tasks.begin(); |
+ for (TaskVector::const_iterator it = decode_tasks.begin(); |
it != decode_tasks.end(); ++it) { |
- internal::WorkerPoolTask* decode_task = |
- static_cast<internal::WorkerPoolTask*>(it->get()); |
+ internal::WorkerPoolTask* decode_task = it->get(); |
// Skip if already decoded. |
if (decode_task->HasCompleted()) |
@@ -787,7 +716,7 @@ |
raster_node->add_dependency(); |
// Check if decode task already exists in graph. |
- internal::GraphNode::Map::iterator decode_it = graph->find(decode_task); |
+ GraphNodeMap::iterator decode_it = graph->find(decode_task); |
if (decode_it != graph->end()) { |
internal::GraphNode* decode_node = decode_it->second; |
decode_node->add_dependent(raster_node); |