Commit 7beac1b5 authored by reveman@chromium.org's avatar reveman@chromium.org

cc: Separate RasterWorkerPool interface from implementation details.

RasterWorkerPool class has a lot of implementation specific details
that the tile manager and the delegate should not be affected by.
Moving implementation specific parts into a separate class and file
makes it clear what is part of the interface used by the tile
manager and what are details of the implementation. ie. changes to
implementation specific files alone should not affect or require
changes to the tile manager.

BUG=269841

Review URL: https://codereview.chromium.org/228173002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@263120 0039d316-1c4b-4281-b951-d872f2087c98
parent e74990c1
...@@ -366,8 +366,10 @@ ...@@ -366,8 +366,10 @@
'resources/raster_mode.h', 'resources/raster_mode.h',
'resources/raster_worker_pool.cc', 'resources/raster_worker_pool.cc',
'resources/raster_worker_pool.h', 'resources/raster_worker_pool.h',
'resources/raster_worker_pool_delegate.cc', 'resources/rasterizer.cc',
'resources/raster_worker_pool_delegate.h', 'resources/rasterizer.h',
'resources/rasterizer_delegate.cc',
'resources/rasterizer_delegate.h',
'resources/release_callback.h', 'resources/release_callback.h',
'resources/resource.cc', 'resources/resource.cc',
'resources/resource.h', 'resources/resource.h',
......
...@@ -14,11 +14,11 @@ ...@@ -14,11 +14,11 @@
namespace cc { namespace cc {
// static // static
scoped_ptr<DirectRasterWorkerPool> DirectRasterWorkerPool::Create( scoped_ptr<RasterWorkerPool> DirectRasterWorkerPool::Create(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
ContextProvider* context_provider) { ContextProvider* context_provider) {
return make_scoped_ptr(new DirectRasterWorkerPool( return make_scoped_ptr<RasterWorkerPool>(new DirectRasterWorkerPool(
task_runner, resource_provider, context_provider)); task_runner, resource_provider, context_provider));
} }
...@@ -39,7 +39,9 @@ DirectRasterWorkerPool::~DirectRasterWorkerPool() { ...@@ -39,7 +39,9 @@ DirectRasterWorkerPool::~DirectRasterWorkerPool() {
DCHECK_EQ(0u, completed_tasks_.size()); DCHECK_EQ(0u, completed_tasks_.size());
} }
void DirectRasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { Rasterizer* DirectRasterWorkerPool::AsRasterizer() { return this; }
void DirectRasterWorkerPool::SetClient(RasterizerClient* client) {
client_ = client; client_ = client;
} }
...@@ -58,7 +60,7 @@ void DirectRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { ...@@ -58,7 +60,7 @@ void DirectRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
// Cancel existing OnRasterFinished callbacks. // Cancel existing OnRasterFinished callbacks.
raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); raster_finished_weak_ptr_factory_.InvalidateWeakPtrs();
scoped_refptr<internal::WorkerPoolTask> scoped_refptr<internal::RasterizerTask>
new_raster_required_for_activation_finished_task( new_raster_required_for_activation_finished_task(
CreateRasterRequiredForActivationFinishedTask( CreateRasterRequiredForActivationFinishedTask(
queue->required_for_activation_count, queue->required_for_activation_count,
...@@ -66,7 +68,7 @@ void DirectRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { ...@@ -66,7 +68,7 @@ void DirectRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
base::Bind(&DirectRasterWorkerPool:: base::Bind(&DirectRasterWorkerPool::
OnRasterRequiredForActivationFinished, OnRasterRequiredForActivationFinished,
raster_finished_weak_ptr_factory_.GetWeakPtr()))); raster_finished_weak_ptr_factory_.GetWeakPtr())));
scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( scoped_refptr<internal::RasterizerTask> new_raster_finished_task(
CreateRasterFinishedTask( CreateRasterFinishedTask(
task_runner_.get(), task_runner_.get(),
base::Bind(&DirectRasterWorkerPool::OnRasterFinished, base::Bind(&DirectRasterWorkerPool::OnRasterFinished,
...@@ -81,7 +83,7 @@ void DirectRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { ...@@ -81,7 +83,7 @@ void DirectRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
raster_tasks_.items.begin(); raster_tasks_.items.begin();
it != raster_tasks_.items.end(); it != raster_tasks_.items.end();
++it) { ++it) {
internal::RasterWorkerPoolTask* task = it->task; internal::RasterTask* task = it->task;
if (std::find_if(queue->items.begin(), if (std::find_if(queue->items.begin(),
queue->items.end(), queue->items.end(),
...@@ -111,11 +113,11 @@ ResourceFormat DirectRasterWorkerPool::GetResourceFormat() const { ...@@ -111,11 +113,11 @@ ResourceFormat DirectRasterWorkerPool::GetResourceFormat() const {
void DirectRasterWorkerPool::CheckForCompletedTasks() { void DirectRasterWorkerPool::CheckForCompletedTasks() {
TRACE_EVENT0("cc", "DirectRasterWorkerPool::CheckForCompletedTasks"); TRACE_EVENT0("cc", "DirectRasterWorkerPool::CheckForCompletedTasks");
for (internal::WorkerPoolTask::Vector::const_iterator it = for (internal::RasterizerTask::Vector::const_iterator it =
completed_tasks_.begin(); completed_tasks_.begin();
it != completed_tasks_.end(); it != completed_tasks_.end();
++it) { ++it) {
internal::WorkerPoolTask* task = it->get(); internal::RasterizerTask* task = it->get();
task->RunReplyOnOriginThread(); task->RunReplyOnOriginThread();
} }
...@@ -123,15 +125,13 @@ void DirectRasterWorkerPool::CheckForCompletedTasks() { ...@@ -123,15 +125,13 @@ void DirectRasterWorkerPool::CheckForCompletedTasks() {
} }
SkCanvas* DirectRasterWorkerPool::AcquireCanvasForRaster( SkCanvas* DirectRasterWorkerPool::AcquireCanvasForRaster(
internal::WorkerPoolTask* task, internal::RasterTask* task) {
const Resource* resource) { return resource_provider_->MapDirectRasterBuffer(task->resource()->id());
return resource_provider_->MapDirectRasterBuffer(resource->id());
} }
void DirectRasterWorkerPool::ReleaseCanvasForRaster( void DirectRasterWorkerPool::ReleaseCanvasForRaster(
internal::WorkerPoolTask* task, internal::RasterTask* task) {
const Resource* resource) { resource_provider_->UnmapDirectRasterBuffer(task->resource()->id());
resource_provider_->UnmapDirectRasterBuffer(resource->id());
} }
void DirectRasterWorkerPool::OnRasterFinished() { void DirectRasterWorkerPool::OnRasterFinished() {
...@@ -186,15 +186,15 @@ void DirectRasterWorkerPool::RunTasksOnOriginThread() { ...@@ -186,15 +186,15 @@ void DirectRasterWorkerPool::RunTasksOnOriginThread() {
raster_tasks_.items.begin(); raster_tasks_.items.begin();
it != raster_tasks_.items.end(); it != raster_tasks_.items.end();
++it) { ++it) {
internal::RasterWorkerPoolTask* task = it->task; internal::RasterTask* task = it->task;
DCHECK(!task->HasCompleted()); DCHECK(!task->HasCompleted());
// First need to run all dependencies. // First need to run all dependencies.
for (internal::WorkerPoolTask::Vector::const_iterator it = for (internal::ImageDecodeTask::Vector::const_iterator it =
task->dependencies().begin(); task->dependencies().begin();
it != task->dependencies().end(); it != task->dependencies().end();
++it) { ++it) {
internal::WorkerPoolTask* dependency = it->get(); internal::ImageDecodeTask* dependency = it->get();
if (dependency->HasCompleted()) if (dependency->HasCompleted())
continue; continue;
...@@ -218,7 +218,7 @@ void DirectRasterWorkerPool::RunTasksOnOriginThread() { ...@@ -218,7 +218,7 @@ void DirectRasterWorkerPool::RunTasksOnOriginThread() {
} }
void DirectRasterWorkerPool::RunTaskOnOriginThread( void DirectRasterWorkerPool::RunTaskOnOriginThread(
internal::WorkerPoolTask* task) { internal::RasterizerTask* task) {
task->WillSchedule(); task->WillSchedule();
task->ScheduleOnOriginThread(this); task->ScheduleOnOriginThread(this);
task->DidSchedule(); task->DidSchedule();
......
...@@ -7,49 +7,51 @@ ...@@ -7,49 +7,51 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "cc/resources/raster_worker_pool.h" #include "cc/resources/raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
namespace cc { namespace cc {
class ContextProvider; class ContextProvider;
class ResourceProvider; class ResourceProvider;
class CC_EXPORT DirectRasterWorkerPool : public RasterWorkerPool, class CC_EXPORT DirectRasterWorkerPool : public RasterWorkerPool,
public internal::WorkerPoolTaskClient { public Rasterizer,
public internal::RasterizerTaskClient {
public: public:
virtual ~DirectRasterWorkerPool(); virtual ~DirectRasterWorkerPool();
static scoped_ptr<DirectRasterWorkerPool> Create( static scoped_ptr<RasterWorkerPool> Create(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
ContextProvider* context_provider); ContextProvider* context_provider);
// Overridden from RasterWorkerPool: // Overridden from RasterWorkerPool:
virtual void SetClient(RasterWorkerPoolClient* client) OVERRIDE; virtual Rasterizer* AsRasterizer() OVERRIDE;
// Overridden from Rasterizer:
virtual void SetClient(RasterizerClient* client) OVERRIDE;
virtual void Shutdown() OVERRIDE {} virtual void Shutdown() OVERRIDE {}
virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE; virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
virtual unsigned GetResourceTarget() const OVERRIDE; virtual unsigned GetResourceTarget() const OVERRIDE;
virtual ResourceFormat GetResourceFormat() const OVERRIDE; virtual ResourceFormat GetResourceFormat() const OVERRIDE;
virtual void CheckForCompletedTasks() OVERRIDE; virtual void CheckForCompletedTasks() OVERRIDE;
// Overridden from internal::WorkerPoolTaskClient: // Overridden from internal::RasterizerTaskClient:
virtual SkCanvas* AcquireCanvasForRaster(internal::WorkerPoolTask* task, virtual SkCanvas* AcquireCanvasForRaster(internal::RasterTask* task) OVERRIDE;
const Resource* resource) OVERRIDE; virtual void ReleaseCanvasForRaster(internal::RasterTask* task) OVERRIDE;
virtual void ReleaseCanvasForRaster(internal::WorkerPoolTask* task,
const Resource* resource) OVERRIDE;
protected: private:
DirectRasterWorkerPool(base::SequencedTaskRunner* task_runner, DirectRasterWorkerPool(base::SequencedTaskRunner* task_runner,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
ContextProvider* context_provider); ContextProvider* context_provider);
private:
void OnRasterFinished(); void OnRasterFinished();
void OnRasterRequiredForActivationFinished(); void OnRasterRequiredForActivationFinished();
void ScheduleRunTasksOnOriginThread(); void ScheduleRunTasksOnOriginThread();
void RunTasksOnOriginThread(); void RunTasksOnOriginThread();
void RunTaskOnOriginThread(internal::WorkerPoolTask* task); void RunTaskOnOriginThread(internal::RasterizerTask* task);
scoped_refptr<base::SequencedTaskRunner> task_runner_; scoped_refptr<base::SequencedTaskRunner> task_runner_;
RasterWorkerPoolClient* client_; RasterizerClient* client_;
ResourceProvider* resource_provider_; ResourceProvider* resource_provider_;
ContextProvider* context_provider_; ContextProvider* context_provider_;
...@@ -63,11 +65,11 @@ class CC_EXPORT DirectRasterWorkerPool : public RasterWorkerPool, ...@@ -63,11 +65,11 @@ class CC_EXPORT DirectRasterWorkerPool : public RasterWorkerPool,
base::WeakPtrFactory<DirectRasterWorkerPool> base::WeakPtrFactory<DirectRasterWorkerPool>
raster_finished_weak_ptr_factory_; raster_finished_weak_ptr_factory_;
scoped_refptr<internal::WorkerPoolTask> raster_finished_task_; scoped_refptr<internal::RasterizerTask> raster_finished_task_;
scoped_refptr<internal::WorkerPoolTask> scoped_refptr<internal::RasterizerTask>
raster_required_for_activation_finished_task_; raster_required_for_activation_finished_task_;
internal::WorkerPoolTask::Vector completed_tasks_; internal::RasterizerTask::Vector completed_tasks_;
base::WeakPtrFactory<DirectRasterWorkerPool> weak_ptr_factory_; base::WeakPtrFactory<DirectRasterWorkerPool> weak_ptr_factory_;
......
...@@ -11,12 +11,13 @@ ...@@ -11,12 +11,13 @@
namespace cc { namespace cc {
// static // static
scoped_ptr<ImageRasterWorkerPool> ImageRasterWorkerPool::Create( scoped_ptr<RasterWorkerPool> ImageRasterWorkerPool::Create(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
internal::TaskGraphRunner* task_graph_runner,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
unsigned texture_target) { unsigned texture_target) {
return make_scoped_ptr(new ImageRasterWorkerPool( return make_scoped_ptr<RasterWorkerPool>(new ImageRasterWorkerPool(
task_runner, GetTaskGraphRunner(), resource_provider, texture_target)); task_runner, task_graph_runner, resource_provider, texture_target));
} }
ImageRasterWorkerPool::ImageRasterWorkerPool( ImageRasterWorkerPool::ImageRasterWorkerPool(
...@@ -35,7 +36,9 @@ ImageRasterWorkerPool::ImageRasterWorkerPool( ...@@ -35,7 +36,9 @@ ImageRasterWorkerPool::ImageRasterWorkerPool(
ImageRasterWorkerPool::~ImageRasterWorkerPool() {} ImageRasterWorkerPool::~ImageRasterWorkerPool() {}
void ImageRasterWorkerPool::SetClient(RasterWorkerPoolClient* client) { Rasterizer* ImageRasterWorkerPool::AsRasterizer() { return this; }
void ImageRasterWorkerPool::SetClient(RasterizerClient* client) {
client_ = client; client_ = client;
} }
...@@ -69,7 +72,7 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { ...@@ -69,7 +72,7 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
// Cancel existing OnRasterFinished callbacks. // Cancel existing OnRasterFinished callbacks.
raster_finished_weak_ptr_factory_.InvalidateWeakPtrs(); raster_finished_weak_ptr_factory_.InvalidateWeakPtrs();
scoped_refptr<internal::WorkerPoolTask> scoped_refptr<internal::RasterizerTask>
new_raster_required_for_activation_finished_task( new_raster_required_for_activation_finished_task(
CreateRasterRequiredForActivationFinishedTask( CreateRasterRequiredForActivationFinishedTask(
queue->required_for_activation_count, queue->required_for_activation_count,
...@@ -77,7 +80,7 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { ...@@ -77,7 +80,7 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
base::Bind( base::Bind(
&ImageRasterWorkerPool::OnRasterRequiredForActivationFinished, &ImageRasterWorkerPool::OnRasterRequiredForActivationFinished,
raster_finished_weak_ptr_factory_.GetWeakPtr()))); raster_finished_weak_ptr_factory_.GetWeakPtr())));
scoped_refptr<internal::WorkerPoolTask> new_raster_finished_task( scoped_refptr<internal::RasterizerTask> new_raster_finished_task(
CreateRasterFinishedTask( CreateRasterFinishedTask(
task_runner_.get(), task_runner_.get(),
base::Bind(&ImageRasterWorkerPool::OnRasterFinished, base::Bind(&ImageRasterWorkerPool::OnRasterFinished,
...@@ -87,7 +90,7 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) { ...@@ -87,7 +90,7 @@ void ImageRasterWorkerPool::ScheduleTasks(RasterTaskQueue* queue) {
it != queue->items.end(); it != queue->items.end();
++it) { ++it) {
const RasterTaskQueue::Item& item = *it; const RasterTaskQueue::Item& item = *it;
internal::RasterWorkerPoolTask* task = item.task; internal::RasterTask* task = item.task;
DCHECK(!task->HasCompleted()); DCHECK(!task->HasCompleted());
if (item.required_for_activation) { if (item.required_for_activation) {
...@@ -142,8 +145,8 @@ void ImageRasterWorkerPool::CheckForCompletedTasks() { ...@@ -142,8 +145,8 @@ void ImageRasterWorkerPool::CheckForCompletedTasks() {
for (internal::Task::Vector::const_iterator it = completed_tasks_.begin(); for (internal::Task::Vector::const_iterator it = completed_tasks_.begin();
it != completed_tasks_.end(); it != completed_tasks_.end();
++it) { ++it) {
internal::WorkerPoolTask* task = internal::RasterizerTask* task =
static_cast<internal::WorkerPoolTask*>(it->get()); static_cast<internal::RasterizerTask*>(it->get());
task->WillComplete(); task->WillComplete();
task->CompleteOnOriginThread(this); task->CompleteOnOriginThread(this);
...@@ -155,15 +158,12 @@ void ImageRasterWorkerPool::CheckForCompletedTasks() { ...@@ -155,15 +158,12 @@ void ImageRasterWorkerPool::CheckForCompletedTasks() {
} }
SkCanvas* ImageRasterWorkerPool::AcquireCanvasForRaster( SkCanvas* ImageRasterWorkerPool::AcquireCanvasForRaster(
internal::WorkerPoolTask* task, internal::RasterTask* task) {
const Resource* resource) { return resource_provider_->MapImageRasterBuffer(task->resource()->id());
return resource_provider_->MapImageRasterBuffer(resource->id());
} }
void ImageRasterWorkerPool::ReleaseCanvasForRaster( void ImageRasterWorkerPool::ReleaseCanvasForRaster(internal::RasterTask* task) {
internal::WorkerPoolTask* task, resource_provider_->UnmapImageRasterBuffer(task->resource()->id());
const Resource* resource) {
resource_provider_->UnmapImageRasterBuffer(resource->id());
} }
void ImageRasterWorkerPool::OnRasterFinished() { void ImageRasterWorkerPool::OnRasterFinished() {
......
...@@ -8,33 +8,37 @@ ...@@ -8,33 +8,37 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/values.h" #include "base/values.h"
#include "cc/resources/raster_worker_pool.h" #include "cc/resources/raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
namespace cc { namespace cc {
class ResourceProvider; class ResourceProvider;
class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool, class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool,
public internal::WorkerPoolTaskClient { public Rasterizer,
public internal::RasterizerTaskClient {
public: public:
virtual ~ImageRasterWorkerPool(); virtual ~ImageRasterWorkerPool();
static scoped_ptr<ImageRasterWorkerPool> Create( static scoped_ptr<RasterWorkerPool> Create(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
internal::TaskGraphRunner* task_graph_runner,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
unsigned texture_target); unsigned texture_target);
// Overridden from RasterWorkerPool: // Overridden from RasterWorkerPool:
virtual void SetClient(RasterWorkerPoolClient* client) OVERRIDE; virtual Rasterizer* AsRasterizer() OVERRIDE;
// Overridden from Rasterizer:
virtual void SetClient(RasterizerClient* client) OVERRIDE;
virtual void Shutdown() OVERRIDE; virtual void Shutdown() OVERRIDE;
virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE; virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
virtual unsigned GetResourceTarget() const OVERRIDE; virtual unsigned GetResourceTarget() const OVERRIDE;
virtual ResourceFormat GetResourceFormat() const OVERRIDE; virtual ResourceFormat GetResourceFormat() const OVERRIDE;
virtual void CheckForCompletedTasks() OVERRIDE; virtual void CheckForCompletedTasks() OVERRIDE;
// Overridden from internal::WorkerPoolTaskClient: // Overridden from internal::RasterizerTaskClient:
virtual SkCanvas* AcquireCanvasForRaster(internal::WorkerPoolTask* task, virtual SkCanvas* AcquireCanvasForRaster(internal::RasterTask* task) OVERRIDE;
const Resource* resource) OVERRIDE; virtual void ReleaseCanvasForRaster(internal::RasterTask* task) OVERRIDE;
virtual void ReleaseCanvasForRaster(internal::WorkerPoolTask* task,
const Resource* resource) OVERRIDE;
protected: protected:
ImageRasterWorkerPool(base::SequencedTaskRunner* task_runner, ImageRasterWorkerPool(base::SequencedTaskRunner* task_runner,
...@@ -50,7 +54,7 @@ class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool, ...@@ -50,7 +54,7 @@ class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool,
scoped_refptr<base::SequencedTaskRunner> task_runner_; scoped_refptr<base::SequencedTaskRunner> task_runner_;
internal::TaskGraphRunner* task_graph_runner_; internal::TaskGraphRunner* task_graph_runner_;
const internal::NamespaceToken namespace_token_; const internal::NamespaceToken namespace_token_;
RasterWorkerPoolClient* client_; RasterizerClient* client_;
ResourceProvider* resource_provider_; ResourceProvider* resource_provider_;
const unsigned texture_target_; const unsigned texture_target_;
...@@ -59,8 +63,8 @@ class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool, ...@@ -59,8 +63,8 @@ class CC_EXPORT ImageRasterWorkerPool : public RasterWorkerPool,
base::WeakPtrFactory<ImageRasterWorkerPool> raster_finished_weak_ptr_factory_; base::WeakPtrFactory<ImageRasterWorkerPool> raster_finished_weak_ptr_factory_;
scoped_refptr<internal::WorkerPoolTask> raster_finished_task_; scoped_refptr<internal::RasterizerTask> raster_finished_task_;
scoped_refptr<internal::WorkerPoolTask> scoped_refptr<internal::RasterizerTask>
raster_required_for_activation_finished_task_; raster_required_for_activation_finished_task_;
// Task graph used when scheduling tasks and vector used to gather // Task graph used when scheduling tasks and vector used to gather
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
#include "base/memory/scoped_ptr.h" #include "base/memory/scoped_ptr.h"
#include "cc/resources/platform_color.h" #include "cc/resources/platform_color.h"
#include "cc/resources/raster_mode.h" #include "cc/resources/raster_mode.h"
#include "cc/resources/raster_worker_pool.h" #include "cc/resources/rasterizer.h"
#include "cc/resources/resource_pool.h" #include "cc/resources/resource_pool.h"
#include "cc/resources/resource_provider.h" #include "cc/resources/resource_provider.h"
#include "cc/resources/scoped_resource.h" #include "cc/resources/scoped_resource.h"
...@@ -102,7 +102,7 @@ class CC_EXPORT ManagedTileState { ...@@ -102,7 +102,7 @@ class CC_EXPORT ManagedTileState {
SkColor solid_color_; SkColor solid_color_;
bool has_text_; bool has_text_;
scoped_ptr<ScopedResource> resource_; scoped_ptr<ScopedResource> resource_;
scoped_refptr<internal::RasterWorkerPoolTask> raster_task_; scoped_refptr<internal::RasterTask> raster_task_;
}; };
ManagedTileState(); ManagedTileState();
......
...@@ -11,72 +11,71 @@ ...@@ -11,72 +11,71 @@
#include "base/memory/weak_ptr.h" #include "base/memory/weak_ptr.h"
#include "base/values.h" #include "base/values.h"
#include "cc/resources/raster_worker_pool.h" #include "cc/resources/raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
namespace cc { namespace cc {
class ResourceProvider; class ResourceProvider;
class CC_EXPORT PixelBufferRasterWorkerPool class CC_EXPORT PixelBufferRasterWorkerPool
: public RasterWorkerPool, : public RasterWorkerPool,
public internal::WorkerPoolTaskClient { public Rasterizer,
public internal::RasterizerTaskClient {
public: public:
virtual ~PixelBufferRasterWorkerPool(); virtual ~PixelBufferRasterWorkerPool();
static scoped_ptr<PixelBufferRasterWorkerPool> Create( static scoped_ptr<RasterWorkerPool> Create(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
internal::TaskGraphRunner* task_graph_runner,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
size_t max_transfer_buffer_usage_bytes); size_t max_transfer_buffer_usage_bytes);
// Overridden from RasterWorkerPool: // Overridden from RasterWorkerPool:
virtual void SetClient(RasterWorkerPoolClient* client) OVERRIDE; virtual Rasterizer* AsRasterizer() OVERRIDE;
// Overridden from Rasterizer:
virtual void SetClient(RasterizerClient* client) OVERRIDE;
virtual void Shutdown() OVERRIDE; virtual void Shutdown() OVERRIDE;
virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE; virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE;
virtual unsigned GetResourceTarget() const OVERRIDE; virtual unsigned GetResourceTarget() const OVERRIDE;
virtual ResourceFormat GetResourceFormat() const OVERRIDE; virtual ResourceFormat GetResourceFormat() const OVERRIDE;
virtual void CheckForCompletedTasks() OVERRIDE; virtual void CheckForCompletedTasks() OVERRIDE;
// Overridden from internal::WorkerPoolTaskClient: // Overridden from internal::RasterizerTaskClient:
virtual SkCanvas* AcquireCanvasForRaster(internal::WorkerPoolTask* task, virtual SkCanvas* AcquireCanvasForRaster(internal::RasterTask* task) OVERRIDE;
const Resource* resource) OVERRIDE; virtual void ReleaseCanvasForRaster(internal::RasterTask* task) OVERRIDE;
virtual void ReleaseCanvasForRaster(internal::WorkerPoolTask* task,
const Resource* resource) OVERRIDE;
protected:
PixelBufferRasterWorkerPool(base::SequencedTaskRunner* task_runner,
internal::TaskGraphRunner* task_graph_runner,
ResourceProvider* resource_provider,
size_t max_transfer_buffer_usage_bytes);
private: private:
struct RasterTaskState { struct RasterTaskState {
class TaskComparator { class TaskComparator {
public: public:
explicit TaskComparator(const internal::WorkerPoolTask* task) explicit TaskComparator(const internal::RasterTask* task) : task_(task) {}
: task_(task) {}
bool operator()(const RasterTaskState& state) const { bool operator()(const RasterTaskState& state) const {
return state.task == task_; return state.task == task_;
} }
private: private:
const internal::WorkerPoolTask* task_; const internal::RasterTask* task_;
}; };
typedef std::vector<RasterTaskState> Vector; typedef std::vector<RasterTaskState> Vector;
RasterTaskState(internal::WorkerPoolTask* task, RasterTaskState(internal::RasterTask* task, bool required_for_activation)
bool required_for_activation)
: type(UNSCHEDULED), : type(UNSCHEDULED),
task(task), task(task),
resource(NULL),
required_for_activation(required_for_activation) {} required_for_activation(required_for_activation) {}
enum { UNSCHEDULED, SCHEDULED, UPLOADING, COMPLETED } type; enum { UNSCHEDULED, SCHEDULED, UPLOADING, COMPLETED } type;
internal::WorkerPoolTask* task; internal::RasterTask* task;
const Resource* resource;
bool required_for_activation; bool required_for_activation;
}; };
typedef std::deque<scoped_refptr<internal::WorkerPoolTask> > TaskDeque; typedef std::deque<scoped_refptr<internal::RasterTask> > RasterTaskDeque;
PixelBufferRasterWorkerPool(base::SequencedTaskRunner* task_runner,
internal::TaskGraphRunner* task_graph_runner,
ResourceProvider* resource_provider,
size_t max_transfer_buffer_usage_bytes);
void OnRasterFinished(); void OnRasterFinished();
void OnRasterRequiredForActivationFinished(); void OnRasterRequiredForActivationFinished();
...@@ -89,7 +88,7 @@ class CC_EXPORT PixelBufferRasterWorkerPool ...@@ -89,7 +88,7 @@ class CC_EXPORT PixelBufferRasterWorkerPool
unsigned PendingRasterTaskCount() const; unsigned PendingRasterTaskCount() const;
bool HasPendingTasks() const; bool HasPendingTasks() const;
bool HasPendingTasksRequiredForActivation() const; bool HasPendingTasksRequiredForActivation() const;
void CheckForCompletedWorkerPoolTasks(); void CheckForCompletedRasterizerTasks();
const char* StateName() const; const char* StateName() const;
scoped_ptr<base::Value> StateAsValue() const; scoped_ptr<base::Value> StateAsValue() const;
...@@ -98,16 +97,16 @@ class CC_EXPORT PixelBufferRasterWorkerPool ...@@ -98,16 +97,16 @@ class CC_EXPORT PixelBufferRasterWorkerPool
scoped_refptr<base::SequencedTaskRunner> task_runner_; scoped_refptr<base::SequencedTaskRunner> task_runner_;
internal::TaskGraphRunner* task_graph_runner_; internal::TaskGraphRunner* task_graph_runner_;
const internal::NamespaceToken namespace_token_; const internal::NamespaceToken namespace_token_;
RasterWorkerPoolClient* client_; RasterizerClient* client_;
ResourceProvider* resource_provider_; ResourceProvider* resource_provider_;
bool shutdown_; bool shutdown_;
RasterTaskQueue raster_tasks_; RasterTaskQueue raster_tasks_;
RasterTaskState::Vector raster_task_states_; RasterTaskState::Vector raster_task_states_;
TaskDeque raster_tasks_with_pending_upload_; RasterTaskDeque raster_tasks_with_pending_upload_;
internal::WorkerPoolTask::Vector completed_raster_tasks_; internal::RasterTask::Vector completed_raster_tasks_;
internal::WorkerPoolTask::Vector completed_image_decode_tasks_; internal::RasterizerTask::Vector completed_image_decode_tasks_;
size_t scheduled_raster_task_count_; size_t scheduled_raster_task_count_;
size_t raster_tasks_required_for_activation_count_; size_t raster_tasks_required_for_activation_count_;
...@@ -125,8 +124,8 @@ class CC_EXPORT PixelBufferRasterWorkerPool ...@@ -125,8 +124,8 @@ class CC_EXPORT PixelBufferRasterWorkerPool
base::WeakPtrFactory<PixelBufferRasterWorkerPool> base::WeakPtrFactory<PixelBufferRasterWorkerPool>
raster_finished_weak_ptr_factory_; raster_finished_weak_ptr_factory_;
scoped_refptr<internal::WorkerPoolTask> raster_finished_task_; scoped_refptr<internal::RasterizerTask> raster_finished_task_;
scoped_refptr<internal::WorkerPoolTask> scoped_refptr<internal::RasterizerTask>
raster_required_for_activation_finished_task_; raster_required_for_activation_finished_task_;
// Task graph used when scheduling tasks and vector used to gather // Task graph used when scheduling tasks and vector used to gather
......
...@@ -85,9 +85,9 @@ const int kDefaultNumRasterThreads = 1; ...@@ -85,9 +85,9 @@ const int kDefaultNumRasterThreads = 1;
int g_num_raster_threads = 0; int g_num_raster_threads = 0;
class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { class RasterFinishedTaskImpl : public internal::RasterizerTask {
public: public:
explicit RasterFinishedWorkerPoolTaskImpl( explicit RasterFinishedTaskImpl(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
const base::Closure& on_raster_finished_callback) const base::Closure& on_raster_finished_callback)
: task_runner_(task_runner), : task_runner_(task_runner),
...@@ -95,23 +95,23 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { ...@@ -95,23 +95,23 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
// Overridden from internal::Task: // Overridden from internal::Task:
virtual void RunOnWorkerThread() OVERRIDE { virtual void RunOnWorkerThread() OVERRIDE {
TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnWorkerThread"); TRACE_EVENT0("cc", "RasterFinishedTaskImpl::RunOnWorkerThread");
RasterFinished(); RasterFinished();
} }
// Overridden from internal::WorkerPoolTask: // Overridden from internal::RasterizerTask:
virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) virtual void ScheduleOnOriginThread(internal::RasterizerTaskClient* client)
OVERRIDE {} OVERRIDE {}
virtual void RunOnOriginThread() OVERRIDE { virtual void RunOnOriginThread() OVERRIDE {
TRACE_EVENT0("cc", "RasterFinishedWorkerPoolTaskImpl::RunOnOriginThread"); TRACE_EVENT0("cc", "RasterFinishedTaskImpl::RunOnOriginThread");
RasterFinished(); RasterFinished();
} }
virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) virtual void CompleteOnOriginThread(internal::RasterizerTaskClient* client)
OVERRIDE {} OVERRIDE {}
virtual void RunReplyOnOriginThread() OVERRIDE {} virtual void RunReplyOnOriginThread() OVERRIDE {}
protected: protected:
virtual ~RasterFinishedWorkerPoolTaskImpl() {} virtual ~RasterFinishedTaskImpl() {}
void RasterFinished() { void RasterFinished() {
task_runner_->PostTask(FROM_HERE, on_raster_finished_callback_); task_runner_->PostTask(FROM_HERE, on_raster_finished_callback_);
...@@ -121,18 +121,17 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask { ...@@ -121,18 +121,17 @@ class RasterFinishedWorkerPoolTaskImpl : public internal::WorkerPoolTask {
scoped_refptr<base::SequencedTaskRunner> task_runner_; scoped_refptr<base::SequencedTaskRunner> task_runner_;
const base::Closure on_raster_finished_callback_; const base::Closure on_raster_finished_callback_;
DISALLOW_COPY_AND_ASSIGN(RasterFinishedWorkerPoolTaskImpl); DISALLOW_COPY_AND_ASSIGN(RasterFinishedTaskImpl);
}; };
class RasterRequiredForActivationFinishedWorkerPoolTaskImpl class RasterRequiredForActivationFinishedTaskImpl
: public RasterFinishedWorkerPoolTaskImpl { : public RasterFinishedTaskImpl {
public: public:
RasterRequiredForActivationFinishedWorkerPoolTaskImpl( RasterRequiredForActivationFinishedTaskImpl(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
const base::Closure& on_raster_finished_callback, const base::Closure& on_raster_finished_callback,
size_t tasks_required_for_activation_count) size_t tasks_required_for_activation_count)
: RasterFinishedWorkerPoolTaskImpl(task_runner, : RasterFinishedTaskImpl(task_runner, on_raster_finished_callback),
on_raster_finished_callback),
tasks_required_for_activation_count_( tasks_required_for_activation_count_(
tasks_required_for_activation_count) { tasks_required_for_activation_count) {
if (tasks_required_for_activation_count_) { if (tasks_required_for_activation_count_) {
...@@ -143,22 +142,20 @@ class RasterRequiredForActivationFinishedWorkerPoolTaskImpl ...@@ -143,22 +142,20 @@ class RasterRequiredForActivationFinishedWorkerPoolTaskImpl
// Overridden from internal::Task: // Overridden from internal::Task:
virtual void RunOnWorkerThread() OVERRIDE { virtual void RunOnWorkerThread() OVERRIDE {
TRACE_EVENT0("cc", TRACE_EVENT0(
"RasterRequiredForActivationFinishedWorkerPoolTaskImpl::" "cc", "RasterRequiredForActivationFinishedTaskImpl::RunOnWorkerThread");
"RunOnWorkerThread");
RunRasterFinished(); RunRasterFinished();
} }
// Overridden from internal::WorkerPoolTask: // Overridden from internal::RasterizerTask:
virtual void RunOnOriginThread() OVERRIDE { virtual void RunOnOriginThread() OVERRIDE {
TRACE_EVENT0("cc", TRACE_EVENT0(
"RasterRequiredForActivationFinishedWorkerPoolTaskImpl::" "cc", "RasterRequiredForActivationFinishedTaskImpl::RunOnOriginThread");
"RunOnOriginThread");
RunRasterFinished(); RunRasterFinished();
} }
private: private:
virtual ~RasterRequiredForActivationFinishedWorkerPoolTaskImpl() {} virtual ~RasterRequiredForActivationFinishedTaskImpl() {}
void RunRasterFinished() { void RunRasterFinished() {
if (tasks_required_for_activation_count_) { if (tasks_required_for_activation_count_) {
...@@ -171,73 +168,11 @@ class RasterRequiredForActivationFinishedWorkerPoolTaskImpl ...@@ -171,73 +168,11 @@ class RasterRequiredForActivationFinishedWorkerPoolTaskImpl
base::TimeTicks activation_delay_end_time_; base::TimeTicks activation_delay_end_time_;
const size_t tasks_required_for_activation_count_; const size_t tasks_required_for_activation_count_;
DISALLOW_COPY_AND_ASSIGN( DISALLOW_COPY_AND_ASSIGN(RasterRequiredForActivationFinishedTaskImpl);
RasterRequiredForActivationFinishedWorkerPoolTaskImpl);
}; };
} // namespace } // namespace
namespace internal {
WorkerPoolTask::WorkerPoolTask() : did_schedule_(false), did_complete_(false) {}
WorkerPoolTask::~WorkerPoolTask() {
DCHECK(!did_schedule_);
DCHECK(!did_run_ || did_complete_);
}
void WorkerPoolTask::WillSchedule() { DCHECK(!did_schedule_); }
void WorkerPoolTask::DidSchedule() {
did_schedule_ = true;
did_complete_ = false;
}
bool WorkerPoolTask::HasBeenScheduled() const { return did_schedule_; }
void WorkerPoolTask::WillComplete() { DCHECK(!did_complete_); }
void WorkerPoolTask::DidComplete() {
DCHECK(did_schedule_);
DCHECK(!did_complete_);
did_schedule_ = false;
did_complete_ = true;
}
bool WorkerPoolTask::HasCompleted() const { return did_complete_; }
RasterWorkerPoolTask::RasterWorkerPoolTask(
const Resource* resource,
internal::WorkerPoolTask::Vector* dependencies)
: resource_(resource) {
dependencies_.swap(*dependencies);
}
RasterWorkerPoolTask::~RasterWorkerPoolTask() {}
} // namespace internal
RasterTaskQueue::Item::Item(internal::RasterWorkerPoolTask* task,
bool required_for_activation)
: task(task), required_for_activation(required_for_activation) {}
RasterTaskQueue::Item::~Item() {}
RasterTaskQueue::RasterTaskQueue() : required_for_activation_count(0u) {}
RasterTaskQueue::~RasterTaskQueue() {}
void RasterTaskQueue::Swap(RasterTaskQueue* other) {
items.swap(other->items);
std::swap(required_for_activation_count,
other->required_for_activation_count);
}
void RasterTaskQueue::Reset() {
required_for_activation_count = 0u;
items.clear();
}
// This allows an external rasterize on-demand system to run raster tasks // This allows an external rasterize on-demand system to run raster tasks
// with highest priority using the same task graph runner instance. // with highest priority using the same task graph runner instance.
unsigned RasterWorkerPool::kOnDemandRasterTaskPriority = 0u; unsigned RasterWorkerPool::kOnDemandRasterTaskPriority = 0u;
...@@ -251,6 +186,10 @@ unsigned RasterWorkerPool::kRasterRequiredForActivationFinishedTaskPriority = ...@@ -251,6 +186,10 @@ unsigned RasterWorkerPool::kRasterRequiredForActivationFinishedTaskPriority =
1u; 1u;
unsigned RasterWorkerPool::kRasterTaskPriorityBase = 3u; unsigned RasterWorkerPool::kRasterTaskPriorityBase = 3u;
RasterWorkerPool::RasterWorkerPool() {}
RasterWorkerPool::~RasterWorkerPool() {}
// static // static
void RasterWorkerPool::SetNumRasterThreads(int num_threads) { void RasterWorkerPool::SetNumRasterThreads(int num_threads) {
DCHECK_LT(0, num_threads); DCHECK_LT(0, num_threads);
...@@ -278,39 +217,38 @@ size_t RasterWorkerPool::GetPictureCloneIndexForCurrentThread() { ...@@ -278,39 +217,38 @@ size_t RasterWorkerPool::GetPictureCloneIndexForCurrentThread() {
} }
// static // static
scoped_refptr<internal::WorkerPoolTask> scoped_refptr<internal::RasterizerTask>
RasterWorkerPool::CreateRasterFinishedTask( RasterWorkerPool::CreateRasterFinishedTask(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
const base::Closure& on_raster_finished_callback) { const base::Closure& on_raster_finished_callback) {
return make_scoped_refptr(new RasterFinishedWorkerPoolTaskImpl( return make_scoped_refptr(
task_runner, on_raster_finished_callback)); new RasterFinishedTaskImpl(task_runner, on_raster_finished_callback));
} }
// static // static
scoped_refptr<internal::WorkerPoolTask> scoped_refptr<internal::RasterizerTask>
RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask( RasterWorkerPool::CreateRasterRequiredForActivationFinishedTask(
size_t tasks_required_for_activation_count, size_t tasks_required_for_activation_count,
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
const base::Closure& on_raster_finished_callback) { const base::Closure& on_raster_finished_callback) {
return make_scoped_refptr( return make_scoped_refptr(new RasterRequiredForActivationFinishedTaskImpl(
new RasterRequiredForActivationFinishedWorkerPoolTaskImpl( task_runner,
task_runner, on_raster_finished_callback,
on_raster_finished_callback, tasks_required_for_activation_count));
tasks_required_for_activation_count));
} }
// static // static
void RasterWorkerPool::ScheduleTasksOnOriginThread( void RasterWorkerPool::ScheduleTasksOnOriginThread(
internal::WorkerPoolTaskClient* client, internal::RasterizerTaskClient* client,
internal::TaskGraph* graph) { internal::TaskGraph* graph) {
TRACE_EVENT0("cc", "RasterWorkerPool::ScheduleTasksOnOriginThread"); TRACE_EVENT0("cc", "Rasterizer::ScheduleTasksOnOriginThread");
for (internal::TaskGraph::Node::Vector::iterator it = graph->nodes.begin(); for (internal::TaskGraph::Node::Vector::iterator it = graph->nodes.begin();
it != graph->nodes.end(); it != graph->nodes.end();
++it) { ++it) {
internal::TaskGraph::Node& node = *it; internal::TaskGraph::Node& node = *it;
internal::WorkerPoolTask* task = internal::RasterizerTask* task =
static_cast<internal::WorkerPoolTask*>(node.task); static_cast<internal::RasterizerTask*>(node.task);
if (!task->HasBeenScheduled()) { if (!task->HasBeenScheduled()) {
task->WillSchedule(); task->WillSchedule();
...@@ -322,7 +260,7 @@ void RasterWorkerPool::ScheduleTasksOnOriginThread( ...@@ -322,7 +260,7 @@ void RasterWorkerPool::ScheduleTasksOnOriginThread(
// static // static
void RasterWorkerPool::InsertNodeForTask(internal::TaskGraph* graph, void RasterWorkerPool::InsertNodeForTask(internal::TaskGraph* graph,
internal::WorkerPoolTask* task, internal::RasterizerTask* task,
unsigned priority, unsigned priority,
size_t dependencies) { size_t dependencies) {
DCHECK(std::find_if(graph->nodes.begin(), DCHECK(std::find_if(graph->nodes.begin(),
...@@ -336,17 +274,17 @@ void RasterWorkerPool::InsertNodeForTask(internal::TaskGraph* graph, ...@@ -336,17 +274,17 @@ void RasterWorkerPool::InsertNodeForTask(internal::TaskGraph* graph,
// static // static
void RasterWorkerPool::InsertNodesForRasterTask( void RasterWorkerPool::InsertNodesForRasterTask(
internal::TaskGraph* graph, internal::TaskGraph* graph,
internal::WorkerPoolTask* raster_task, internal::RasterTask* raster_task,
const internal::WorkerPoolTask::Vector& decode_tasks, const internal::ImageDecodeTask::Vector& decode_tasks,
unsigned priority) { unsigned priority) {
size_t dependencies = 0u; size_t dependencies = 0u;
// Insert image decode tasks. // Insert image decode tasks.
for (internal::WorkerPoolTask::Vector::const_iterator it = for (internal::ImageDecodeTask::Vector::const_iterator it =
decode_tasks.begin(); decode_tasks.begin();
it != decode_tasks.end(); it != decode_tasks.end();
++it) { ++it) {
internal::WorkerPoolTask* decode_task = it->get(); internal::ImageDecodeTask* decode_task = it->get();
// Skip if already decoded. // Skip if already decoded.
if (decode_task->HasCompleted()) if (decode_task->HasCompleted())
......
...@@ -5,130 +5,14 @@ ...@@ -5,130 +5,14 @@
#ifndef CC_RESOURCES_RASTER_WORKER_POOL_H_ #ifndef CC_RESOURCES_RASTER_WORKER_POOL_H_
#define CC_RESOURCES_RASTER_WORKER_POOL_H_ #define CC_RESOURCES_RASTER_WORKER_POOL_H_
#include <vector> #include "cc/resources/rasterizer.h"
#include "base/callback.h"
#include "cc/resources/resource_format.h"
#include "cc/resources/task_graph_runner.h"
class SkCanvas;
namespace base { namespace base {
class SequencedTaskRunner; class SequencedTaskRunner;
} }
namespace cc { namespace cc {
class Resource;
namespace internal {
class WorkerPoolTask;
class CC_EXPORT WorkerPoolTaskClient {
public:
virtual SkCanvas* AcquireCanvasForRaster(WorkerPoolTask* task,
const Resource* resource) = 0;
virtual void ReleaseCanvasForRaster(WorkerPoolTask* task,
const Resource* resource) = 0;
protected:
virtual ~WorkerPoolTaskClient() {}
};
class CC_EXPORT WorkerPoolTask : public Task {
public:
typedef std::vector<scoped_refptr<WorkerPoolTask> > Vector;
virtual void ScheduleOnOriginThread(WorkerPoolTaskClient* client) = 0;
virtual void RunOnOriginThread() = 0;
virtual void CompleteOnOriginThread(WorkerPoolTaskClient* client) = 0;
virtual void RunReplyOnOriginThread() = 0;
void WillSchedule();
void DidSchedule();
bool HasBeenScheduled() const;
void WillComplete();
void DidComplete();
bool HasCompleted() const;
protected:
WorkerPoolTask();
virtual ~WorkerPoolTask();
bool did_schedule_;
bool did_complete_;
};
class CC_EXPORT RasterWorkerPoolTask : public WorkerPoolTask {
public:
const Resource* resource() const { return resource_; }
const internal::WorkerPoolTask::Vector& dependencies() const {
return dependencies_;
}
protected:
RasterWorkerPoolTask(const Resource* resource,
internal::WorkerPoolTask::Vector* dependencies);
virtual ~RasterWorkerPoolTask();
private:
const Resource* resource_;
WorkerPoolTask::Vector dependencies_;
};
} // namespace internal
class CC_EXPORT RasterWorkerPoolClient {
public:
virtual bool ShouldForceTasksRequiredForActivationToComplete() const = 0;
virtual void DidFinishRunningTasks() = 0;
virtual void DidFinishRunningTasksRequiredForActivation() = 0;
protected:
virtual ~RasterWorkerPoolClient() {}
};
struct CC_EXPORT RasterTaskQueue {
struct CC_EXPORT Item {
class TaskComparator {
public:
explicit TaskComparator(const internal::WorkerPoolTask* task)
: task_(task) {}
bool operator()(const Item& item) const { return item.task == task_; }
private:
const internal::WorkerPoolTask* task_;
};
typedef std::vector<Item> Vector;
Item(internal::RasterWorkerPoolTask* task, bool required_for_activation);
~Item();
static bool IsRequiredForActivation(const Item& item) {
return item.required_for_activation;
}
internal::RasterWorkerPoolTask* task;
bool required_for_activation;
};
RasterTaskQueue();
~RasterTaskQueue();
void Swap(RasterTaskQueue* other);
void Reset();
Item::Vector items;
size_t required_for_activation_count;
};
// This interface can be used to schedule and run raster tasks. The client will
// be notified asynchronously when the set of tasks marked as "required for
// activation" have finished running and when all scheduled tasks have finished
// running. The client can call CheckForCompletedTasks() at any time to dispatch
// pending completion callbacks for all tasks that have finished running.
class CC_EXPORT RasterWorkerPool { class CC_EXPORT RasterWorkerPool {
public: public:
static unsigned kOnDemandRasterTaskPriority; static unsigned kOnDemandRasterTaskPriority;
...@@ -137,6 +21,9 @@ class CC_EXPORT RasterWorkerPool { ...@@ -137,6 +21,9 @@ class CC_EXPORT RasterWorkerPool {
static unsigned kRasterRequiredForActivationFinishedTaskPriority; static unsigned kRasterRequiredForActivationFinishedTaskPriority;
static unsigned kRasterTaskPriorityBase; static unsigned kRasterTaskPriorityBase;
RasterWorkerPool();
virtual ~RasterWorkerPool();
// Set the number of threads to use for the global TaskGraphRunner instance. // Set the number of threads to use for the global TaskGraphRunner instance.
// This can only be called once and must be called prior to // This can only be called once and must be called prior to
// GetNumRasterThreads(). // GetNumRasterThreads().
...@@ -152,70 +39,44 @@ class CC_EXPORT RasterWorkerPool { ...@@ -152,70 +39,44 @@ class CC_EXPORT RasterWorkerPool {
// value between 0 and GetNumRasterThreads() - 1. // value between 0 and GetNumRasterThreads() - 1.
static size_t GetPictureCloneIndexForCurrentThread(); static size_t GetPictureCloneIndexForCurrentThread();
// Utility function that can be used by implementations to create a "raster // Utility function that can be used to create a "raster finished" task that
// finished" task that posts |callback| to |task_runner| when run. // posts |callback| to |task_runner| when run.
static scoped_refptr<internal::WorkerPoolTask> CreateRasterFinishedTask( static scoped_refptr<internal::RasterizerTask> CreateRasterFinishedTask(
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
const base::Closure& callback); const base::Closure& callback);
// Utility function that can be used by implementations to create a "raster // Utility function that can be used to create a "raster required for
// required for activation finished" task that posts |callback| to // activation finished" task that posts |callback| to |task_runner| when run.
// |task_runner| when run. static scoped_refptr<internal::RasterizerTask>
static scoped_refptr<internal::WorkerPoolTask>
CreateRasterRequiredForActivationFinishedTask( CreateRasterRequiredForActivationFinishedTask(
size_t tasks_required_for_activation_count, size_t tasks_required_for_activation_count,
base::SequencedTaskRunner* task_runner, base::SequencedTaskRunner* task_runner,
const base::Closure& callback); const base::Closure& callback);
// Utility function that can be used by implementations to call // Utility function that can be used to call ::ScheduleOnOriginThread() for
// ::ScheduleOnOriginThread() for each task in |graph|. // each task in |graph|.
static void ScheduleTasksOnOriginThread( static void ScheduleTasksOnOriginThread(
internal::WorkerPoolTaskClient* client, internal::RasterizerTaskClient* client,
internal::TaskGraph* graph); internal::TaskGraph* graph);
// Utility function that can be used by implementations to build a task graph. // Utility function that can be used to build a task graph. Inserts a node
// Inserts a node that represents |task| in |graph|. See TaskGraph definition // that represents |task| in |graph|. See TaskGraph definition for valid
// for valid |priority| values. // |priority| values.
static void InsertNodeForTask(internal::TaskGraph* graph, static void InsertNodeForTask(internal::TaskGraph* graph,
internal::WorkerPoolTask* task, internal::RasterizerTask* task,
unsigned priority, unsigned priority,
size_t dependencies); size_t dependencies);
// Utility function that can be used by implementations to build a task graph. // Utility function that can be used to build a task graph. Inserts nodes that
// Inserts nodes that represent |task| and all its image decode dependencies // represent |task| and all its image decode dependencies in |graph|.
// in |graph|.
static void InsertNodesForRasterTask( static void InsertNodesForRasterTask(
internal::TaskGraph* graph, internal::TaskGraph* graph,
internal::WorkerPoolTask* task, internal::RasterTask* task,
const internal::WorkerPoolTask::Vector& decode_tasks, const internal::ImageDecodeTask::Vector& decode_tasks,
unsigned priority); unsigned priority);
// Set the client instance to be notified when finished running tasks. // Type-checking downcast routine.
virtual void SetClient(RasterWorkerPoolClient* client) = 0; virtual Rasterizer* AsRasterizer() = 0;
// Tells the worker pool to shutdown after canceling all previously scheduled
// tasks. Reply callbacks are still guaranteed to run when
// CheckForCompletedTasks() is called.
virtual void Shutdown() = 0;
// Schedule running of raster tasks in |queue| and all dependencies.
// Previously scheduled tasks that are not in |queue| will be canceled unless
// already running. Once scheduled, reply callbacks are guaranteed to run for
// all tasks even if they later get canceled by another call to
// ScheduleTasks().
virtual void ScheduleTasks(RasterTaskQueue* queue) = 0;
// Check for completed tasks and dispatch reply callbacks.
virtual void CheckForCompletedTasks() = 0;
// Returns the target that needs to be used for raster task resources.
virtual unsigned GetResourceTarget() const = 0;
// Returns the format that needs to be used for raster task resources.
virtual ResourceFormat GetResourceFormat() const = 0;
protected:
virtual ~RasterWorkerPool() {}
}; };
} // namespace cc } // namespace cc
......
This diff is collapsed.
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include "cc/resources/picture_pile.h" #include "cc/resources/picture_pile.h"
#include "cc/resources/picture_pile_impl.h" #include "cc/resources/picture_pile_impl.h"
#include "cc/resources/pixel_buffer_raster_worker_pool.h" #include "cc/resources/pixel_buffer_raster_worker_pool.h"
#include "cc/resources/rasterizer.h"
#include "cc/resources/resource_provider.h" #include "cc/resources/resource_provider.h"
#include "cc/resources/scoped_resource.h" #include "cc/resources/scoped_resource.h"
#include "cc/test/fake_output_surface.h" #include "cc/test/fake_output_surface.h"
...@@ -36,16 +37,16 @@ enum RasterWorkerPoolType { ...@@ -36,16 +37,16 @@ enum RasterWorkerPoolType {
RASTER_WORKER_POOL_TYPE_DIRECT RASTER_WORKER_POOL_TYPE_DIRECT
}; };
class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { class TestRasterTaskImpl : public internal::RasterTask {
public: public:
typedef base::Callback<void(const PicturePileImpl::Analysis& analysis, typedef base::Callback<void(const PicturePileImpl::Analysis& analysis,
bool was_canceled, bool was_canceled,
RasterThread raster_thread)> Reply; RasterThread raster_thread)> Reply;
TestRasterWorkerPoolTaskImpl(const Resource* resource, TestRasterTaskImpl(const Resource* resource,
const Reply& reply, const Reply& reply,
internal::WorkerPoolTask::Vector* dependencies) internal::ImageDecodeTask::Vector* dependencies)
: internal::RasterWorkerPoolTask(resource, dependencies), : internal::RasterTask(resource, dependencies),
reply_(reply), reply_(reply),
raster_thread_(RASTER_THREAD_NONE) {} raster_thread_(RASTER_THREAD_NONE) {}
...@@ -54,17 +55,17 @@ class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { ...@@ -54,17 +55,17 @@ class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
raster_thread_ = RASTER_THREAD_WORKER; raster_thread_ = RASTER_THREAD_WORKER;
} }
// Overridden from internal::WorkerPoolTask: // Overridden from internal::RasterizerTask:
virtual void ScheduleOnOriginThread(internal::WorkerPoolTaskClient* client) virtual void ScheduleOnOriginThread(internal::RasterizerTaskClient* client)
OVERRIDE { OVERRIDE {
client->AcquireCanvasForRaster(this, resource()); client->AcquireCanvasForRaster(this);
} }
virtual void RunOnOriginThread() OVERRIDE { virtual void RunOnOriginThread() OVERRIDE {
raster_thread_ = RASTER_THREAD_ORIGIN; raster_thread_ = RASTER_THREAD_ORIGIN;
} }
virtual void CompleteOnOriginThread(internal::WorkerPoolTaskClient* client) virtual void CompleteOnOriginThread(internal::RasterizerTaskClient* client)
OVERRIDE { OVERRIDE {
client->ReleaseCanvasForRaster(this, resource()); client->ReleaseCanvasForRaster(this);
} }
virtual void RunReplyOnOriginThread() OVERRIDE { virtual void RunReplyOnOriginThread() OVERRIDE {
reply_.Run( reply_.Run(
...@@ -72,47 +73,44 @@ class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask { ...@@ -72,47 +73,44 @@ class TestRasterWorkerPoolTaskImpl : public internal::RasterWorkerPoolTask {
} }
protected: protected:
virtual ~TestRasterWorkerPoolTaskImpl() {} virtual ~TestRasterTaskImpl() {}
private: private:
const Reply reply_; const Reply reply_;
RasterThread raster_thread_; RasterThread raster_thread_;
DISALLOW_COPY_AND_ASSIGN(TestRasterWorkerPoolTaskImpl); DISALLOW_COPY_AND_ASSIGN(TestRasterTaskImpl);
}; };
class BlockingTestRasterWorkerPoolTaskImpl class BlockingTestRasterTaskImpl : public TestRasterTaskImpl {
: public TestRasterWorkerPoolTaskImpl {
public: public:
BlockingTestRasterWorkerPoolTaskImpl( BlockingTestRasterTaskImpl(const Resource* resource,
const Resource* resource, const Reply& reply,
const Reply& reply, base::Lock* lock,
base::Lock* lock, internal::ImageDecodeTask::Vector* dependencies)
internal::WorkerPoolTask::Vector* dependencies) : TestRasterTaskImpl(resource, reply, dependencies), lock_(lock) {}
: TestRasterWorkerPoolTaskImpl(resource, reply, dependencies),
lock_(lock) {}
// Overridden from internal::Task: // Overridden from internal::Task:
virtual void RunOnWorkerThread() OVERRIDE { virtual void RunOnWorkerThread() OVERRIDE {
base::AutoLock lock(*lock_); base::AutoLock lock(*lock_);
TestRasterWorkerPoolTaskImpl::RunOnWorkerThread(); TestRasterTaskImpl::RunOnWorkerThread();
} }
// Overridden from internal::WorkerPoolTask: // Overridden from internal::RasterizerTask:
virtual void RunReplyOnOriginThread() OVERRIDE {} virtual void RunReplyOnOriginThread() OVERRIDE {}
protected: protected:
virtual ~BlockingTestRasterWorkerPoolTaskImpl() {} virtual ~BlockingTestRasterTaskImpl() {}
private: private:
base::Lock* lock_; base::Lock* lock_;
DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterWorkerPoolTaskImpl); DISALLOW_COPY_AND_ASSIGN(BlockingTestRasterTaskImpl);
}; };
class RasterWorkerPoolTest class RasterWorkerPoolTest
: public testing::TestWithParam<RasterWorkerPoolType>, : public testing::TestWithParam<RasterWorkerPoolType>,
public RasterWorkerPoolClient { public RasterizerClient {
public: public:
struct RasterTaskResult { struct RasterTaskResult {
unsigned id; unsigned id;
...@@ -120,8 +118,7 @@ class RasterWorkerPoolTest ...@@ -120,8 +118,7 @@ class RasterWorkerPoolTest
RasterThread raster_thread; RasterThread raster_thread;
}; };
typedef std::vector<scoped_refptr<internal::RasterWorkerPoolTask> > typedef std::vector<scoped_refptr<internal::RasterTask> > RasterTaskVector;
RasterTaskVector;
RasterWorkerPoolTest() RasterWorkerPoolTest()
: context_provider_(TestContextProvider::Create()), : context_provider_(TestContextProvider::Create()),
...@@ -135,49 +132,48 @@ class RasterWorkerPoolTest ...@@ -135,49 +132,48 @@ class RasterWorkerPoolTest
ResourceProvider::Create( ResourceProvider::Create(
output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1) output_surface_.get(), shared_bitmap_manager_.get(), 0, false, 1)
.Pass(); .Pass();
pixel_buffer_raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
base::MessageLoopProxy::current().get(),
resource_provider_.get(),
std::numeric_limits<size_t>::max());
image_raster_worker_pool_ =
ImageRasterWorkerPool::Create(base::MessageLoopProxy::current().get(),
resource_provider_.get(),
GL_TEXTURE_2D);
direct_raster_worker_pool_ =
DirectRasterWorkerPool::Create(base::MessageLoopProxy::current().get(),
resource_provider_.get(),
context_provider_.get());
switch (GetParam()) { switch (GetParam()) {
case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER: case RASTER_WORKER_POOL_TYPE_PIXEL_BUFFER:
raster_worker_pool_ = pixel_buffer_raster_worker_pool_.get(); raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
base::MessageLoopProxy::current().get(),
RasterWorkerPool::GetTaskGraphRunner(),
resource_provider_.get(),
std::numeric_limits<size_t>::max());
break; break;
case RASTER_WORKER_POOL_TYPE_IMAGE: case RASTER_WORKER_POOL_TYPE_IMAGE:
raster_worker_pool_ = image_raster_worker_pool_.get(); raster_worker_pool_ = ImageRasterWorkerPool::Create(
base::MessageLoopProxy::current().get(),
RasterWorkerPool::GetTaskGraphRunner(),
resource_provider_.get(),
GL_TEXTURE_2D);
break; break;
case RASTER_WORKER_POOL_TYPE_DIRECT: case RASTER_WORKER_POOL_TYPE_DIRECT:
raster_worker_pool_ = direct_raster_worker_pool_.get(); raster_worker_pool_ = DirectRasterWorkerPool::Create(
base::MessageLoopProxy::current().get(),
resource_provider_.get(),
context_provider_.get());
break; break;
} }
DCHECK(raster_worker_pool_); DCHECK(raster_worker_pool_);
raster_worker_pool_->SetClient(this); raster_worker_pool_->AsRasterizer()->SetClient(this);
} }
virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); } virtual ~RasterWorkerPoolTest() { resource_provider_.reset(); }
// Overridden from testing::Test: // Overridden from testing::Test:
virtual void TearDown() OVERRIDE { virtual void TearDown() OVERRIDE {
raster_worker_pool_->Shutdown(); raster_worker_pool_->AsRasterizer()->Shutdown();
raster_worker_pool_->CheckForCompletedTasks(); raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
} }
// Overriden from RasterWorkerPoolClient: // Overriden from RasterWorkerPoolClient:
virtual bool ShouldForceTasksRequiredForActivationToComplete() virtual bool ShouldForceTasksRequiredForActivationToComplete() const
const OVERRIDE { OVERRIDE {
return false; return false;
} }
virtual void DidFinishRunningTasks() OVERRIDE { virtual void DidFinishRunningTasks() OVERRIDE {
raster_worker_pool_->CheckForCompletedTasks(); raster_worker_pool_->AsRasterizer()->CheckForCompletedTasks();
base::MessageLoop::current()->Quit(); base::MessageLoop::current()->Quit();
} }
virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {} virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE {}
...@@ -207,7 +203,7 @@ class RasterWorkerPoolTest ...@@ -207,7 +203,7 @@ class RasterWorkerPoolTest
++it) ++it)
queue.items.push_back(RasterTaskQueue::Item(*it, false)); queue.items.push_back(RasterTaskQueue::Item(*it, false));
raster_worker_pool_->ScheduleTasks(&queue); raster_worker_pool_->AsRasterizer()->ScheduleTasks(&queue);
} }
void AppendTask(unsigned id) { void AppendTask(unsigned id) {
...@@ -218,8 +214,8 @@ class RasterWorkerPoolTest ...@@ -218,8 +214,8 @@ class RasterWorkerPoolTest
resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
const Resource* const_resource = resource.get(); const Resource* const_resource = resource.get();
internal::WorkerPoolTask::Vector empty; internal::ImageDecodeTask::Vector empty;
tasks_.push_back(new TestRasterWorkerPoolTaskImpl( tasks_.push_back(new TestRasterTaskImpl(
const_resource, const_resource,
base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
base::Unretained(this), base::Unretained(this),
...@@ -236,8 +232,8 @@ class RasterWorkerPoolTest ...@@ -236,8 +232,8 @@ class RasterWorkerPoolTest
resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888); resource->Allocate(size, ResourceProvider::TextureUsageAny, RGBA_8888);
const Resource* const_resource = resource.get(); const Resource* const_resource = resource.get();
internal::WorkerPoolTask::Vector empty; internal::ImageDecodeTask::Vector empty;
tasks_.push_back(new BlockingTestRasterWorkerPoolTaskImpl( tasks_.push_back(new BlockingTestRasterTaskImpl(
const_resource, const_resource,
base::Bind(&RasterWorkerPoolTest::OnTaskCompleted, base::Bind(&RasterWorkerPoolTest::OnTaskCompleted,
base::Unretained(this), base::Unretained(this),
...@@ -275,10 +271,7 @@ class RasterWorkerPoolTest ...@@ -275,10 +271,7 @@ class RasterWorkerPoolTest
scoped_ptr<FakeOutputSurface> output_surface_; scoped_ptr<FakeOutputSurface> output_surface_;
scoped_ptr<SharedBitmapManager> shared_bitmap_manager_; scoped_ptr<SharedBitmapManager> shared_bitmap_manager_;
scoped_ptr<ResourceProvider> resource_provider_; scoped_ptr<ResourceProvider> resource_provider_;
scoped_ptr<PixelBufferRasterWorkerPool> pixel_buffer_raster_worker_pool_; scoped_ptr<RasterWorkerPool> raster_worker_pool_;
scoped_ptr<ImageRasterWorkerPool> image_raster_worker_pool_;
scoped_ptr<DirectRasterWorkerPool> direct_raster_worker_pool_;
RasterWorkerPool* raster_worker_pool_;
base::CancelableClosure timeout_; base::CancelableClosure timeout_;
int timeout_seconds_; int timeout_seconds_;
bool timed_out_; bool timed_out_;
......
// 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.h"
#include <algorithm>
namespace cc {
namespace internal {
RasterizerTask::RasterizerTask() : did_schedule_(false), did_complete_(false) {}
RasterizerTask::~RasterizerTask() {
DCHECK(!did_schedule_);
DCHECK(!did_run_ || did_complete_);
}
ImageDecodeTask* RasterizerTask::AsImageDecodeTask() { return NULL; }
RasterTask* RasterizerTask::AsRasterTask() { return NULL; }
void RasterizerTask::WillSchedule() { DCHECK(!did_schedule_); }
void RasterizerTask::DidSchedule() {
did_schedule_ = true;
did_complete_ = false;
}
bool RasterizerTask::HasBeenScheduled() const { return did_schedule_; }
void RasterizerTask::WillComplete() { DCHECK(!did_complete_); }
void RasterizerTask::DidComplete() {
DCHECK(did_schedule_);
DCHECK(!did_complete_);
did_schedule_ = false;
did_complete_ = true;
}
bool RasterizerTask::HasCompleted() const { return did_complete_; }
ImageDecodeTask::ImageDecodeTask() {}
ImageDecodeTask::~ImageDecodeTask() {}
ImageDecodeTask* ImageDecodeTask::AsImageDecodeTask() { return this; }
RasterTask::RasterTask(const Resource* resource,
internal::ImageDecodeTask::Vector* dependencies)
: resource_(resource) {
dependencies_.swap(*dependencies);
}
RasterTask::~RasterTask() {}
RasterTask* RasterTask::AsRasterTask() { return this; }
} // namespace internal
RasterTaskQueue::Item::Item(internal::RasterTask* task,
bool required_for_activation)
: task(task), required_for_activation(required_for_activation) {}
RasterTaskQueue::Item::~Item() {}
RasterTaskQueue::RasterTaskQueue() : required_for_activation_count(0u) {}
RasterTaskQueue::~RasterTaskQueue() {}
void RasterTaskQueue::Swap(RasterTaskQueue* other) {
items.swap(other->items);
std::swap(required_for_activation_count,
other->required_for_activation_count);
}
void RasterTaskQueue::Reset() {
required_for_activation_count = 0u;
items.clear();
}
} // namespace cc
// 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.
#ifndef CC_RESOURCES_RASTERIZER_H_
#define CC_RESOURCES_RASTERIZER_H_
#include <vector>
#include "base/callback.h"
#include "cc/resources/resource_format.h"
#include "cc/resources/task_graph_runner.h"
class SkCanvas;
namespace cc {
class Resource;
namespace internal {
class RasterTask;
class CC_EXPORT RasterizerTaskClient {
public:
virtual SkCanvas* AcquireCanvasForRaster(RasterTask* task) = 0;
virtual void ReleaseCanvasForRaster(RasterTask* task) = 0;
protected:
virtual ~RasterizerTaskClient() {}
};
class ImageDecodeTask;
class CC_EXPORT RasterizerTask : public Task {
public:
typedef std::vector<scoped_refptr<RasterizerTask> > Vector;
virtual void ScheduleOnOriginThread(RasterizerTaskClient* client) = 0;
virtual void RunOnOriginThread() = 0;
virtual void CompleteOnOriginThread(RasterizerTaskClient* client) = 0;
virtual void RunReplyOnOriginThread() = 0;
// Type-checking downcast routines.
virtual ImageDecodeTask* AsImageDecodeTask();
virtual RasterTask* AsRasterTask();
void WillSchedule();
void DidSchedule();
bool HasBeenScheduled() const;
void WillComplete();
void DidComplete();
bool HasCompleted() const;
protected:
RasterizerTask();
virtual ~RasterizerTask();
bool did_schedule_;
bool did_complete_;
};
class CC_EXPORT ImageDecodeTask : public RasterizerTask {
public:
typedef std::vector<scoped_refptr<ImageDecodeTask> > Vector;
// Overridden from RasterizerTask:
virtual ImageDecodeTask* AsImageDecodeTask() OVERRIDE;
protected:
ImageDecodeTask();
virtual ~ImageDecodeTask();
};
class CC_EXPORT RasterTask : public RasterizerTask {
public:
typedef std::vector<scoped_refptr<RasterTask> > Vector;
// Overridden from RasterizerTask:
virtual RasterTask* AsRasterTask() OVERRIDE;
const Resource* resource() const { return resource_; }
const ImageDecodeTask::Vector& dependencies() const { return dependencies_; }
protected:
RasterTask(const Resource* resource, ImageDecodeTask::Vector* dependencies);
virtual ~RasterTask();
private:
const Resource* resource_;
ImageDecodeTask::Vector dependencies_;
};
} // namespace internal
class CC_EXPORT RasterizerClient {
public:
virtual bool ShouldForceTasksRequiredForActivationToComplete() const = 0;
virtual void DidFinishRunningTasks() = 0;
virtual void DidFinishRunningTasksRequiredForActivation() = 0;
protected:
virtual ~RasterizerClient() {}
};
struct CC_EXPORT RasterTaskQueue {
struct CC_EXPORT Item {
class TaskComparator {
public:
explicit TaskComparator(const internal::RasterTask* task) : task_(task) {}
bool operator()(const Item& item) const { return item.task == task_; }
private:
const internal::RasterTask* task_;
};
typedef std::vector<Item> Vector;
Item(internal::RasterTask* task, bool required_for_activation);
~Item();
static bool IsRequiredForActivation(const Item& item) {
return item.required_for_activation;
}
internal::RasterTask* task;
bool required_for_activation;
};
RasterTaskQueue();
~RasterTaskQueue();
void Swap(RasterTaskQueue* other);
void Reset();
Item::Vector items;
size_t required_for_activation_count;
};
// This interface can be used to schedule and run raster tasks. The client will
// be notified asynchronously when the set of tasks marked as "required for
// activation" have finished running and when all scheduled tasks have finished
// running. The client can call CheckForCompletedTasks() at any time to dispatch
// pending completion callbacks for all tasks that have finished running.
class CC_EXPORT Rasterizer {
public:
// Set the client instance to be notified when finished running tasks.
virtual void SetClient(RasterizerClient* client) = 0;
// Tells the worker pool to shutdown after canceling all previously scheduled
// tasks. Reply callbacks are still guaranteed to run when
// CheckForCompletedTasks() is called.
virtual void Shutdown() = 0;
// Schedule running of raster tasks in |queue| and all dependencies.
// Previously scheduled tasks that are not in |queue| will be canceled unless
// already running. Once scheduled, reply callbacks are guaranteed to run for
// all tasks even if they later get canceled by another call to
// ScheduleTasks().
virtual void ScheduleTasks(RasterTaskQueue* queue) = 0;
// Check for completed tasks and dispatch reply callbacks.
virtual void CheckForCompletedTasks() = 0;
// Returns the target that needs to be used for raster task resources.
virtual unsigned GetResourceTarget() const = 0;
// Returns the format that needs to be used for raster task resources.
virtual ResourceFormat GetResourceFormat() const = 0;
protected:
virtual ~Rasterizer() {}
};
} // namespace cc
#endif // CC_RESOURCES_RASTERIZER_H_
...@@ -2,73 +2,83 @@ ...@@ -2,73 +2,83 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#include "cc/resources/raster_worker_pool_delegate.h" #include "cc/resources/rasterizer_delegate.h"
#include "base/debug/trace_event.h"
namespace cc { namespace cc {
RasterWorkerPoolDelegate::RasterWorkerPoolDelegate( RasterizerDelegate::RasterizerDelegate(RasterizerClient* client,
RasterWorkerPoolClient* client, Rasterizer** rasterizers,
RasterWorkerPool** raster_worker_pools, size_t num_rasterizers)
size_t num_raster_worker_pools)
: client_(client), : client_(client),
raster_worker_pools_(raster_worker_pools, rasterizers_(rasterizers, rasterizers + num_rasterizers),
raster_worker_pools + num_raster_worker_pools),
did_finish_running_tasks_pending_count_(0u), did_finish_running_tasks_pending_count_(0u),
did_finish_running_tasks_required_for_activation_pending_count_(0u) { did_finish_running_tasks_required_for_activation_pending_count_(0u) {
DCHECK(client_); DCHECK(client_);
for (RasterWorkerPoolVector::iterator it = raster_worker_pools_.begin(); for (RasterizerVector::iterator it = rasterizers_.begin();
it != raster_worker_pools_.end(); it != rasterizers_.end();
++it) ++it)
(*it)->SetClient(this); (*it)->SetClient(this);
} }
RasterWorkerPoolDelegate::~RasterWorkerPoolDelegate() {} RasterizerDelegate::~RasterizerDelegate() {}
// static // static
scoped_ptr<RasterWorkerPoolDelegate> RasterWorkerPoolDelegate::Create( scoped_ptr<RasterizerDelegate> RasterizerDelegate::Create(
RasterWorkerPoolClient* client, RasterizerClient* client,
RasterWorkerPool** raster_worker_pools, Rasterizer** rasterizers,
size_t num_raster_worker_pools) { size_t num_rasterizers) {
return make_scoped_ptr(new RasterWorkerPoolDelegate( return make_scoped_ptr(
client, raster_worker_pools, num_raster_worker_pools)); new RasterizerDelegate(client, rasterizers, num_rasterizers));
} }
void RasterWorkerPoolDelegate::Shutdown() { void RasterizerDelegate::Shutdown() {
for (RasterWorkerPoolVector::iterator it = raster_worker_pools_.begin(); for (RasterizerVector::iterator it = rasterizers_.begin();
it != raster_worker_pools_.end(); it != rasterizers_.end();
++it) ++it)
(*it)->Shutdown(); (*it)->Shutdown();
} }
void RasterWorkerPoolDelegate::ScheduleTasks(RasterTaskQueue* raster_queue) { void RasterizerDelegate::ScheduleTasks(RasterTaskQueue* queue) {
for (size_t i = 0; i < raster_worker_pools_.size(); ++i) for (size_t i = 0; i < rasterizers_.size(); ++i)
raster_worker_pools_[i]->ScheduleTasks(&raster_queue[i]); rasterizers_[i]->ScheduleTasks(&queue[i]);
did_finish_running_tasks_pending_count_ = raster_worker_pools_.size(); did_finish_running_tasks_pending_count_ = rasterizers_.size();
did_finish_running_tasks_required_for_activation_pending_count_ = did_finish_running_tasks_required_for_activation_pending_count_ =
raster_worker_pools_.size(); rasterizers_.size();
} }
void RasterWorkerPoolDelegate::CheckForCompletedTasks() { void RasterizerDelegate::CheckForCompletedTasks() {
for (RasterWorkerPoolVector::iterator it = raster_worker_pools_.begin(); for (RasterizerVector::iterator it = rasterizers_.begin();
it != raster_worker_pools_.end(); it != rasterizers_.end();
++it) ++it)
(*it)->CheckForCompletedTasks(); (*it)->CheckForCompletedTasks();
} }
bool RasterWorkerPoolDelegate::ShouldForceTasksRequiredForActivationToComplete() bool RasterizerDelegate::ShouldForceTasksRequiredForActivationToComplete()
const { const {
return client_->ShouldForceTasksRequiredForActivationToComplete(); return client_->ShouldForceTasksRequiredForActivationToComplete();
} }
void RasterWorkerPoolDelegate::DidFinishRunningTasks() { 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_); DCHECK_LT(0u, did_finish_running_tasks_pending_count_);
if (--did_finish_running_tasks_pending_count_) if (--did_finish_running_tasks_pending_count_)
return; return;
client_->DidFinishRunningTasks(); client_->DidFinishRunningTasks();
} }
void RasterWorkerPoolDelegate::DidFinishRunningTasksRequiredForActivation() { void RasterizerDelegate::DidFinishRunningTasksRequiredForActivation() {
TRACE_EVENT1("cc",
"RasterizerDelegate::DidFinishRunningTasksRequiredForActivation",
"pending_count",
did_finish_running_tasks_required_for_activation_pending_count_);
DCHECK_LT(0u, DCHECK_LT(0u,
did_finish_running_tasks_required_for_activation_pending_count_); did_finish_running_tasks_required_for_activation_pending_count_);
if (--did_finish_running_tasks_required_for_activation_pending_count_) if (--did_finish_running_tasks_required_for_activation_pending_count_)
......
...@@ -2,46 +2,45 @@ ...@@ -2,46 +2,45 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
#ifndef CC_RESOURCES_RASTER_WORKER_POOL_DELEGATE_H_ #ifndef CC_RESOURCES_RASTERIZER_DELEGATE_H_
#define CC_RESOURCES_RASTER_WORKER_POOL_DELEGATE_H_ #define CC_RESOURCES_RASTERIZER_DELEGATE_H_
#include <vector> #include <vector>
#include "cc/resources/raster_worker_pool.h" #include "cc/resources/rasterizer.h"
namespace cc { namespace cc {
class RasterWorkerPoolDelegate : public RasterWorkerPoolClient { class RasterizerDelegate : public RasterizerClient {
public: public:
virtual ~RasterWorkerPoolDelegate(); virtual ~RasterizerDelegate();
static scoped_ptr<RasterWorkerPoolDelegate> Create( static scoped_ptr<RasterizerDelegate> Create(RasterizerClient* client,
RasterWorkerPoolClient* client, Rasterizer** rasterizers,
RasterWorkerPool** raster_worker_pools, size_t num_rasterizers);
size_t num_raster_worker_pools);
void SetClient(RasterWorkerPoolClient* client); void SetClient(RasterizerClient* client);
void Shutdown(); void Shutdown();
void ScheduleTasks(RasterTaskQueue* raster_queue); void ScheduleTasks(RasterTaskQueue* queue);
void CheckForCompletedTasks(); void CheckForCompletedTasks();
// Overriden from RasterWorkerPoolClient: // Overriden from RasterizerClient:
virtual bool ShouldForceTasksRequiredForActivationToComplete() const OVERRIDE; virtual bool ShouldForceTasksRequiredForActivationToComplete() const OVERRIDE;
virtual void DidFinishRunningTasks() OVERRIDE; virtual void DidFinishRunningTasks() OVERRIDE;
virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE; virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE;
private: private:
RasterWorkerPoolDelegate(RasterWorkerPoolClient* client, RasterizerDelegate(RasterizerClient* client,
RasterWorkerPool** raster_worker_pools, Rasterizer** rasterizers,
size_t num_raster_worker_pools); size_t num_rasterizers);
RasterWorkerPoolClient* client_; RasterizerClient* client_;
typedef std::vector<RasterWorkerPool*> RasterWorkerPoolVector; typedef std::vector<Rasterizer*> RasterizerVector;
RasterWorkerPoolVector raster_worker_pools_; RasterizerVector rasterizers_;
size_t did_finish_running_tasks_pending_count_; size_t did_finish_running_tasks_pending_count_;
size_t did_finish_running_tasks_required_for_activation_pending_count_; size_t did_finish_running_tasks_required_for_activation_pending_count_;
}; };
} // namespace cc } // namespace cc
#endif // CC_RESOURCES_RASTER_WORKER_POOL_DELEGATE_H_ #endif // CC_RESOURCES_RASTERIZER_DELEGATE_H_
This diff is collapsed.
...@@ -20,12 +20,12 @@ ...@@ -20,12 +20,12 @@
#include "cc/resources/memory_history.h" #include "cc/resources/memory_history.h"
#include "cc/resources/picture_pile_impl.h" #include "cc/resources/picture_pile_impl.h"
#include "cc/resources/prioritized_tile_set.h" #include "cc/resources/prioritized_tile_set.h"
#include "cc/resources/raster_worker_pool.h" #include "cc/resources/rasterizer.h"
#include "cc/resources/resource_pool.h" #include "cc/resources/resource_pool.h"
#include "cc/resources/tile.h" #include "cc/resources/tile.h"
namespace cc { namespace cc {
class RasterWorkerPoolDelegate; class RasterizerDelegate;
class ResourceProvider; class ResourceProvider;
class CC_EXPORT TileManagerClient { class CC_EXPORT TileManagerClient {
...@@ -49,7 +49,7 @@ scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue( ...@@ -49,7 +49,7 @@ scoped_ptr<base::Value> RasterTaskCompletionStatsAsValue(
// should no longer have any memory assigned to them. Tile objects are "owned" // should no longer have any memory assigned to them. Tile objects are "owned"
// by layers; they automatically register with the manager when they are // by layers; they automatically register with the manager when they are
// created, and unregister from the manager when they are deleted. // created, and unregister from the manager when they are deleted.
class CC_EXPORT TileManager : public RasterWorkerPoolClient, class CC_EXPORT TileManager : public RasterizerClient,
public RefCountedManager<Tile> { public RefCountedManager<Tile> {
public: public:
struct CC_EXPORT PairedPictureLayer { struct CC_EXPORT PairedPictureLayer {
...@@ -109,8 +109,8 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient, ...@@ -109,8 +109,8 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient,
static scoped_ptr<TileManager> Create( static scoped_ptr<TileManager> Create(
TileManagerClient* client, TileManagerClient* client,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
RasterWorkerPool* raster_worker_pool, Rasterizer* rasterizer,
RasterWorkerPool* gpu_raster_worker_pool, Rasterizer* gpu_rasterizer,
size_t max_raster_usage_bytes, size_t max_raster_usage_bytes,
bool use_rasterize_on_demand, bool use_rasterize_on_demand,
RenderingStatsInstrumentation* rendering_stats_instrumentation); RenderingStatsInstrumentation* rendering_stats_instrumentation);
...@@ -178,8 +178,8 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient, ...@@ -178,8 +178,8 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient,
protected: protected:
TileManager(TileManagerClient* client, TileManager(TileManagerClient* client,
ResourceProvider* resource_provider, ResourceProvider* resource_provider,
RasterWorkerPool* raster_worker_pool, Rasterizer* rasterizer,
RasterWorkerPool* gpu_raster_worker_pool, Rasterizer* gpu_rasterizer,
size_t max_raster_usage_bytes, size_t max_raster_usage_bytes,
bool use_rasterize_on_demand, bool use_rasterize_on_demand,
RenderingStatsInstrumentation* rendering_stats_instrumentation); RenderingStatsInstrumentation* rendering_stats_instrumentation);
...@@ -193,7 +193,7 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient, ...@@ -193,7 +193,7 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient,
// Overriden from RefCountedManager<Tile>: // Overriden from RefCountedManager<Tile>:
virtual void Release(Tile* tile) OVERRIDE; virtual void Release(Tile* tile) OVERRIDE;
// Overriden from RasterWorkerPoolClient: // Overriden from RasterizerClient:
virtual bool ShouldForceTasksRequiredForActivationToComplete() const OVERRIDE; virtual bool ShouldForceTasksRequiredForActivationToComplete() const OVERRIDE;
virtual void DidFinishRunningTasks() OVERRIDE; virtual void DidFinishRunningTasks() OVERRIDE;
virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE; virtual void DidFinishRunningTasksRequiredForActivation() OVERRIDE;
...@@ -210,10 +210,10 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient, ...@@ -210,10 +210,10 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient,
void GetTilesWithAssignedBins(PrioritizedTileSet* tiles); void GetTilesWithAssignedBins(PrioritizedTileSet* tiles);
private: private:
enum RasterWorkerPoolType { enum RasterizerType {
RASTER_WORKER_POOL_TYPE_DEFAULT, RASTERIZER_TYPE_DEFAULT,
RASTER_WORKER_POOL_TYPE_GPU, RASTERIZER_TYPE_GPU,
NUM_RASTER_WORKER_POOL_TYPES NUM_RASTERIZER_TYPES
}; };
void OnImageDecodeTaskCompleted(int layer_id, void OnImageDecodeTaskCompleted(int layer_id,
...@@ -232,16 +232,16 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient, ...@@ -232,16 +232,16 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient,
void FreeResourceForTile(Tile* tile, RasterMode mode); void FreeResourceForTile(Tile* tile, RasterMode mode);
void FreeResourcesForTile(Tile* tile); void FreeResourcesForTile(Tile* tile);
void FreeUnusedResourcesForTile(Tile* tile); void FreeUnusedResourcesForTile(Tile* tile);
scoped_refptr<internal::WorkerPoolTask> CreateImageDecodeTask( scoped_refptr<internal::ImageDecodeTask> CreateImageDecodeTask(
Tile* tile, Tile* tile,
SkPixelRef* pixel_ref); SkPixelRef* pixel_ref);
scoped_refptr<internal::RasterWorkerPoolTask> CreateRasterTask(Tile* tile); scoped_refptr<internal::RasterTask> CreateRasterTask(Tile* tile);
scoped_ptr<base::Value> GetMemoryRequirementsAsValue() const; scoped_ptr<base::Value> GetMemoryRequirementsAsValue() const;
void UpdatePrioritizedTileSetIfNeeded(); void UpdatePrioritizedTileSetIfNeeded();
TileManagerClient* client_; TileManagerClient* client_;
scoped_ptr<ResourcePool> resource_pool_; scoped_ptr<ResourcePool> resource_pool_;
scoped_ptr<RasterWorkerPoolDelegate> raster_worker_pool_delegate_; scoped_ptr<RasterizerDelegate> rasterizer_delegate_;
GlobalStateThatImpactsTilePriority global_state_; GlobalStateThatImpactsTilePriority global_state_;
typedef base::hash_map<Tile::Id, Tile*> TileMap; typedef base::hash_map<Tile::Id, Tile*> TileMap;
...@@ -268,7 +268,7 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient, ...@@ -268,7 +268,7 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient,
bool did_initialize_visible_tile_; bool did_initialize_visible_tile_;
bool did_check_for_completed_tasks_since_last_schedule_tasks_; bool did_check_for_completed_tasks_since_last_schedule_tasks_;
typedef base::hash_map<uint32_t, scoped_refptr<internal::WorkerPoolTask> > typedef base::hash_map<uint32_t, scoped_refptr<internal::ImageDecodeTask> >
PixelRefTaskMap; PixelRefTaskMap;
typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap; typedef base::hash_map<int, PixelRefTaskMap> LayerPixelRefTaskMap;
LayerPixelRefTaskMap image_decode_tasks_; LayerPixelRefTaskMap image_decode_tasks_;
...@@ -285,9 +285,9 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient, ...@@ -285,9 +285,9 @@ class CC_EXPORT TileManager : public RasterWorkerPoolClient,
ResourceFormat resource_format_; ResourceFormat resource_format_;
// Queues used when scheduling raster tasks. // Queues used when scheduling raster tasks.
RasterTaskQueue raster_queue_[NUM_RASTER_WORKER_POOL_TYPES]; RasterTaskQueue raster_queue_[NUM_RASTERIZER_TYPES];
std::vector<scoped_refptr<internal::Task> > orphan_raster_tasks_; std::vector<scoped_refptr<internal::RasterTask> > orphan_raster_tasks_;
std::vector<PictureLayerImpl*> layers_; std::vector<PictureLayerImpl*> layers_;
......
...@@ -8,24 +8,24 @@ ...@@ -8,24 +8,24 @@
#include <limits> #include <limits>
#include "base/lazy_instance.h" #include "base/lazy_instance.h"
#include "cc/resources/raster_worker_pool.h" #include "cc/resources/rasterizer.h"
namespace cc { namespace cc {
namespace { namespace {
class FakeRasterWorkerPool : public RasterWorkerPool, class FakeRasterizerImpl : public Rasterizer,
public internal::WorkerPoolTaskClient { public internal::RasterizerTaskClient {
public: public:
// Overridden from RasterWorkerPool: // Overridden from Rasterizer:
virtual void SetClient(RasterWorkerPoolClient* client) OVERRIDE {} virtual void SetClient(RasterizerClient* client) OVERRIDE {}
virtual void Shutdown() OVERRIDE {} virtual void Shutdown() OVERRIDE {}
virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE { virtual void ScheduleTasks(RasterTaskQueue* queue) OVERRIDE {
for (RasterTaskQueue::Item::Vector::const_iterator it = for (RasterTaskQueue::Item::Vector::const_iterator it =
queue->items.begin(); queue->items.begin();
it != queue->items.end(); it != queue->items.end();
++it) { ++it) {
internal::RasterWorkerPoolTask* task = it->task; internal::RasterTask* task = it->task;
task->WillSchedule(); task->WillSchedule();
task->ScheduleOnOriginThread(this); task->ScheduleOnOriginThread(this);
...@@ -35,11 +35,10 @@ class FakeRasterWorkerPool : public RasterWorkerPool, ...@@ -35,11 +35,10 @@ class FakeRasterWorkerPool : public RasterWorkerPool,
} }
} }
virtual void CheckForCompletedTasks() OVERRIDE { virtual void CheckForCompletedTasks() OVERRIDE {
for (internal::WorkerPoolTask::Vector::iterator it = for (internal::RasterTask::Vector::iterator it = completed_tasks_.begin();
completed_tasks_.begin();
it != completed_tasks_.end(); it != completed_tasks_.end();
++it) { ++it) {
internal::WorkerPoolTask* task = it->get(); internal::RasterTask* task = it->get();
task->WillComplete(); task->WillComplete();
task->CompleteOnOriginThread(this); task->CompleteOnOriginThread(this);
...@@ -56,18 +55,17 @@ class FakeRasterWorkerPool : public RasterWorkerPool, ...@@ -56,18 +55,17 @@ class FakeRasterWorkerPool : public RasterWorkerPool,
return RGBA_8888; return RGBA_8888;
} }
// Overridden from internal::WorkerPoolTaskClient: // Overridden from internal::RasterizerTaskClient:
virtual SkCanvas* AcquireCanvasForRaster(internal::WorkerPoolTask* task, virtual SkCanvas* AcquireCanvasForRaster(internal::RasterTask* task)
const Resource* resource) OVERRIDE { OVERRIDE {
return NULL; return NULL;
} }
virtual void ReleaseCanvasForRaster(internal::WorkerPoolTask* task, virtual void ReleaseCanvasForRaster(internal::RasterTask* task) OVERRIDE {}
const Resource* resource) OVERRIDE {}
private: private:
internal::WorkerPoolTask::Vector completed_tasks_; internal::RasterTask::Vector completed_tasks_;
}; };
base::LazyInstance<FakeRasterWorkerPool> g_fake_raster_worker_pool = base::LazyInstance<FakeRasterizerImpl> g_fake_rasterizer =
LAZY_INSTANCE_INITIALIZER; LAZY_INSTANCE_INITIALIZER;
} // namespace } // namespace
...@@ -75,8 +73,8 @@ base::LazyInstance<FakeRasterWorkerPool> g_fake_raster_worker_pool = ...@@ -75,8 +73,8 @@ base::LazyInstance<FakeRasterWorkerPool> g_fake_raster_worker_pool =
FakeTileManager::FakeTileManager(TileManagerClient* client) FakeTileManager::FakeTileManager(TileManagerClient* client)
: TileManager(client, : TileManager(client,
NULL, NULL,
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
std::numeric_limits<unsigned>::max(), std::numeric_limits<unsigned>::max(),
true, true,
NULL) {} NULL) {}
...@@ -85,8 +83,8 @@ FakeTileManager::FakeTileManager(TileManagerClient* client, ...@@ -85,8 +83,8 @@ FakeTileManager::FakeTileManager(TileManagerClient* client,
ResourceProvider* resource_provider) ResourceProvider* resource_provider)
: TileManager(client, : TileManager(client,
resource_provider, resource_provider,
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
std::numeric_limits<unsigned>::max(), std::numeric_limits<unsigned>::max(),
true, true,
NULL) {} NULL) {}
...@@ -96,8 +94,8 @@ FakeTileManager::FakeTileManager(TileManagerClient* client, ...@@ -96,8 +94,8 @@ FakeTileManager::FakeTileManager(TileManagerClient* client,
bool allow_on_demand_raster) bool allow_on_demand_raster)
: TileManager(client, : TileManager(client,
resource_provider, resource_provider,
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
std::numeric_limits<unsigned>::max(), std::numeric_limits<unsigned>::max(),
allow_on_demand_raster, allow_on_demand_raster,
NULL) {} NULL) {}
...@@ -107,8 +105,8 @@ FakeTileManager::FakeTileManager(TileManagerClient* client, ...@@ -107,8 +105,8 @@ FakeTileManager::FakeTileManager(TileManagerClient* client,
size_t raster_task_limit_bytes) size_t raster_task_limit_bytes)
: TileManager(client, : TileManager(client,
resource_provider, resource_provider,
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
g_fake_raster_worker_pool.Pointer(), g_fake_rasterizer.Pointer(),
raster_task_limit_bytes, raster_task_limit_bytes,
true, true,
NULL) {} NULL) {}
......
...@@ -49,6 +49,7 @@ ...@@ -49,6 +49,7 @@
#include "cc/resources/picture_layer_tiling.h" #include "cc/resources/picture_layer_tiling.h"
#include "cc/resources/pixel_buffer_raster_worker_pool.h" #include "cc/resources/pixel_buffer_raster_worker_pool.h"
#include "cc/resources/prioritized_resource_manager.h" #include "cc/resources/prioritized_resource_manager.h"
#include "cc/resources/raster_worker_pool.h"
#include "cc/resources/texture_mailbox_deleter.h" #include "cc/resources/texture_mailbox_deleter.h"
#include "cc/resources/ui_resource_bitmap.h" #include "cc/resources/ui_resource_bitmap.h"
#include "cc/scheduler/delay_based_time_source.h" #include "cc/scheduler/delay_based_time_source.h"
...@@ -306,8 +307,7 @@ LayerTreeHostImpl::~LayerTreeHostImpl() { ...@@ -306,8 +307,7 @@ LayerTreeHostImpl::~LayerTreeHostImpl() {
pending_tree_.reset(); pending_tree_.reset();
active_tree_.reset(); active_tree_.reset();
tile_manager_.reset(); tile_manager_.reset();
image_raster_worker_pool_.reset(); raster_worker_pool_.reset();
pixel_buffer_raster_worker_pool_.reset();
direct_raster_worker_pool_.reset(); direct_raster_worker_pool_.reset();
} }
...@@ -1796,27 +1796,26 @@ void LayerTreeHostImpl::CreateAndSetTileManager( ...@@ -1796,27 +1796,26 @@ void LayerTreeHostImpl::CreateAndSetTileManager(
DCHECK(resource_provider); DCHECK(resource_provider);
DCHECK(proxy_->ImplThreadTaskRunner()); DCHECK(proxy_->ImplThreadTaskRunner());
RasterWorkerPool* default_raster_worker_pool = NULL;
if (using_map_image) { if (using_map_image) {
image_raster_worker_pool_ = ImageRasterWorkerPool::Create( raster_worker_pool_ = ImageRasterWorkerPool::Create(
proxy_->ImplThreadTaskRunner(), proxy_->ImplThreadTaskRunner(),
RasterWorkerPool::GetTaskGraphRunner(),
resource_provider, resource_provider,
GetMapImageTextureTarget(context_provider)); GetMapImageTextureTarget(context_provider));
default_raster_worker_pool = image_raster_worker_pool_.get();
} else { } else {
pixel_buffer_raster_worker_pool_ = PixelBufferRasterWorkerPool::Create( raster_worker_pool_ = PixelBufferRasterWorkerPool::Create(
proxy_->ImplThreadTaskRunner(), proxy_->ImplThreadTaskRunner(),
RasterWorkerPool::GetTaskGraphRunner(),
resource_provider, resource_provider,
GetMaxTransferBufferUsageBytes(context_provider)); GetMaxTransferBufferUsageBytes(context_provider));
default_raster_worker_pool = pixel_buffer_raster_worker_pool_.get();
} }
direct_raster_worker_pool_ = DirectRasterWorkerPool::Create( direct_raster_worker_pool_ = DirectRasterWorkerPool::Create(
proxy_->ImplThreadTaskRunner(), resource_provider, context_provider); proxy_->ImplThreadTaskRunner(), resource_provider, context_provider);
tile_manager_ = tile_manager_ =
TileManager::Create(this, TileManager::Create(this,
resource_provider, resource_provider,
default_raster_worker_pool, raster_worker_pool_->AsRasterizer(),
direct_raster_worker_pool_.get(), direct_raster_worker_pool_->AsRasterizer(),
GetMaxRasterTasksUsageBytes(context_provider), GetMaxRasterTasksUsageBytes(context_provider),
allow_rasterize_on_demand, allow_rasterize_on_demand,
rendering_stats_instrumentation_); rendering_stats_instrumentation_);
...@@ -1843,8 +1842,7 @@ bool LayerTreeHostImpl::InitializeRenderer( ...@@ -1843,8 +1842,7 @@ bool LayerTreeHostImpl::InitializeRenderer(
// Note: order is important here. // Note: order is important here.
renderer_.reset(); renderer_.reset();
tile_manager_.reset(); tile_manager_.reset();
image_raster_worker_pool_.reset(); raster_worker_pool_.reset();
pixel_buffer_raster_worker_pool_.reset();
direct_raster_worker_pool_.reset(); direct_raster_worker_pool_.reset();
resource_provider_.reset(); resource_provider_.reset();
output_surface_.reset(); output_surface_.reset();
...@@ -1971,8 +1969,7 @@ void LayerTreeHostImpl::ReleaseGL() { ...@@ -1971,8 +1969,7 @@ void LayerTreeHostImpl::ReleaseGL() {
ReleaseTreeResources(); ReleaseTreeResources();
renderer_.reset(); renderer_.reset();
tile_manager_.reset(); tile_manager_.reset();
image_raster_worker_pool_.reset(); raster_worker_pool_.reset();
pixel_buffer_raster_worker_pool_.reset();
direct_raster_worker_pool_.reset(); direct_raster_worker_pool_.reset();
resource_provider_->InitializeSoftware(); resource_provider_->InitializeSoftware();
......
...@@ -40,16 +40,14 @@ namespace cc { ...@@ -40,16 +40,14 @@ namespace cc {
class CompletionEvent; class CompletionEvent;
class CompositorFrameMetadata; class CompositorFrameMetadata;
class DebugRectHistory; class DebugRectHistory;
class DirectRasterWorkerPool;
class FrameRateCounter; class FrameRateCounter;
class ImageRasterWorkerPool;
class LayerImpl; class LayerImpl;
class LayerTreeHostImplTimeSourceAdapter; class LayerTreeHostImplTimeSourceAdapter;
class LayerTreeImpl; class LayerTreeImpl;
class MemoryHistory; class MemoryHistory;
class PageScaleAnimation; class PageScaleAnimation;
class PaintTimeCounter; class PaintTimeCounter;
class PixelBufferRasterWorkerPool; class RasterWorkerPool;
class RenderPassDrawQuad; class RenderPassDrawQuad;
class RenderingStatsInstrumentation; class RenderingStatsInstrumentation;
class ScrollbarLayerImplBase; class ScrollbarLayerImplBase;
...@@ -540,9 +538,8 @@ class CC_EXPORT LayerTreeHostImpl ...@@ -540,9 +538,8 @@ class CC_EXPORT LayerTreeHostImpl
// free rendering - see OutputSurface::ForcedDrawToSoftwareDevice(). // free rendering - see OutputSurface::ForcedDrawToSoftwareDevice().
scoped_ptr<ResourceProvider> resource_provider_; scoped_ptr<ResourceProvider> resource_provider_;
scoped_ptr<TileManager> tile_manager_; scoped_ptr<TileManager> tile_manager_;
scoped_ptr<ImageRasterWorkerPool> image_raster_worker_pool_; scoped_ptr<RasterWorkerPool> raster_worker_pool_;
scoped_ptr<PixelBufferRasterWorkerPool> pixel_buffer_raster_worker_pool_; scoped_ptr<RasterWorkerPool> direct_raster_worker_pool_;
scoped_ptr<DirectRasterWorkerPool> direct_raster_worker_pool_;
scoped_ptr<Renderer> renderer_; scoped_ptr<Renderer> renderer_;
GlobalStateThatImpactsTilePriority global_tile_state_; GlobalStateThatImpactsTilePriority global_tile_state_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment