Index: cc/resources/image_copy_raster_worker_pool.h |
diff --git a/cc/resources/image_copy_raster_worker_pool.h b/cc/resources/image_copy_raster_worker_pool.h |
index faa3f1aa7dff4490100a69c753edca0ce7998c33..4111e814e8547ad8d8321e4416ecba2c877aa2cc 100644 |
--- a/cc/resources/image_copy_raster_worker_pool.h |
+++ b/cc/resources/image_copy_raster_worker_pool.h |
@@ -5,13 +5,14 @@ |
#ifndef CC_RESOURCES_IMAGE_COPY_RASTER_WORKER_POOL_H_ |
#define CC_RESOURCES_IMAGE_COPY_RASTER_WORKER_POOL_H_ |
-#include <vector> |
- |
#include "base/memory/weak_ptr.h" |
+#include "base/synchronization/lock.h" |
#include "base/values.h" |
+#include "cc/base/scoped_ptr_deque.h" |
#include "cc/output/context_provider.h" |
#include "cc/resources/raster_worker_pool.h" |
#include "cc/resources/rasterizer.h" |
+#include "cc/resources/resource_provider.h" |
namespace base { |
namespace debug { |
@@ -48,8 +49,18 @@ class CC_EXPORT ImageCopyRasterWorkerPool : public RasterWorkerPool, |
virtual void CheckForCompletedTasks() OVERRIDE; |
// Overridden from RasterizerTaskClient: |
- virtual RasterBuffer* AcquireBufferForRaster(RasterTask* task) OVERRIDE; |
- virtual void ReleaseBufferForRaster(RasterTask* task) OVERRIDE; |
+ virtual scoped_ptr<RasterBuffer> AcquireBufferForRaster( |
+ const Resource* resource) OVERRIDE; |
+ virtual void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) OVERRIDE; |
+ |
+ // Schedule copying from |src| to |dst|. Returns the number of currently |
+ // pending copy operations. |
+ // Note: this can be called from a worker thread. |
+ size_t ScheduleCopy(scoped_ptr<ScopedResource> src, const Resource* dst); |
+ |
+ base::SequencedTaskRunner* task_runner() { return task_runner_.get(); } |
+ ResourceProvider* resource_provider() { return resource_provider_; } |
+ ResourcePool* resource_pool() { return resource_pool_; } |
protected: |
ImageCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner, |
@@ -59,31 +70,19 @@ class CC_EXPORT ImageCopyRasterWorkerPool : public RasterWorkerPool, |
ResourcePool* resource_pool); |
private: |
- struct RasterTaskState { |
- class TaskComparator { |
- public: |
- explicit TaskComparator(const RasterTask* task) : task_(task) {} |
- |
- bool operator()(const RasterTaskState& state) const { |
- return state.task == task_; |
- } |
- |
- private: |
- const RasterTask* task_; |
- }; |
- |
- typedef std::vector<RasterTaskState> Vector; |
+ struct ResourceCopyOperation { |
+ typedef ScopedPtrDeque<ResourceCopyOperation> Deque; |
- RasterTaskState(const RasterTask* task, ScopedResource* resource) |
- : task(task), resource(resource) {} |
+ ResourceCopyOperation(scoped_ptr<ScopedResource> src, const Resource* dst); |
+ ~ResourceCopyOperation(); |
- const RasterTask* task; |
- ScopedResource* resource; |
+ scoped_ptr<ScopedResource> src; |
+ const Resource* dst; |
}; |
void OnRasterFinished(); |
void OnRasterRequiredForActivationFinished(); |
- void FlushCopies(); |
+ void CopyResources(size_t count); |
scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; |
void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const; |
@@ -95,23 +94,29 @@ class CC_EXPORT ImageCopyRasterWorkerPool : public RasterWorkerPool, |
ResourceProvider* resource_provider_; |
ResourcePool* resource_pool_; |
- RasterTaskState::Vector raster_task_states_; |
- |
- bool has_performed_copy_since_last_flush_; |
- |
bool raster_tasks_pending_; |
bool raster_tasks_required_for_activation_pending_; |
scoped_refptr<RasterizerTask> raster_finished_task_; |
scoped_refptr<RasterizerTask> raster_required_for_activation_finished_task_; |
- // Task graph used when scheduling tasks and vector used to gather |
- // completed tasks. |
+ // |pending_resource_copy_operations_lock_| must be acquired when accessing |
+ // |pending_resource_copy_operations_|. |
+ base::Lock pending_resource_copy_operations_lock_; |
+ ResourceCopyOperation::Deque pending_resource_copy_operations_; |
+ |
+ // Callback used to copy a batch of resources. |
+ base::Closure copy_batch_of_resources_callback_; |
+ |
+ // Task graph used when scheduling tasks, vector used to gather completed |
+ // tasks and vector used to gather resource copy operations. |
TaskGraph graph_; |
Task::Vector completed_tasks_; |
base::WeakPtrFactory<ImageCopyRasterWorkerPool> |
raster_finished_weak_ptr_factory_; |
+ base::WeakPtrFactory<ImageCopyRasterWorkerPool> |
+ copy_batch_of_resources_weak_ptr_factory_; |
DISALLOW_COPY_AND_ASSIGN(ImageCopyRasterWorkerPool); |
}; |