Index: cc/raster/one_copy_tile_task_worker_pool.h |
diff --git a/cc/raster/one_copy_tile_task_worker_pool.h b/cc/raster/one_copy_tile_task_worker_pool.h |
index 518aaa2d490751ca1d5009a674a0726423711a10..27e6fe0aa3d187d970b6140663b79190a112fe8b 100644 |
--- a/cc/raster/one_copy_tile_task_worker_pool.h |
+++ b/cc/raster/one_copy_tile_task_worker_pool.h |
@@ -5,6 +5,7 @@ |
#ifndef CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_ |
#define CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_ |
+#include "base/memory/scoped_vector.h" |
#include "base/memory/weak_ptr.h" |
#include "base/synchronization/lock.h" |
#include "base/values.h" |
@@ -21,11 +22,14 @@ class TracedValue; |
} |
} |
+namespace gpu { |
+namespace gles2 { |
+class GLES2Interface; |
+} |
+} |
+ |
namespace cc { |
class ResourcePool; |
-class ScopedResource; |
- |
-typedef int64 CopySequenceNumber; |
class CC_EXPORT OneCopyTileTaskWorkerPool : public TileTaskWorkerPool, |
public TileTaskRunner, |
@@ -38,11 +42,12 @@ class CC_EXPORT OneCopyTileTaskWorkerPool : public TileTaskWorkerPool, |
TaskGraphRunner* task_graph_runner, |
ContextProvider* context_provider, |
ResourceProvider* resource_provider, |
- ResourcePool* resource_pool, |
int max_copy_texture_chromium_size, |
- bool have_persistent_gpu_memory_buffers); |
+ bool use_persistent_gpu_memory_buffers, |
+ unsigned image_target); |
// Overridden from TileTaskWorkerPool: |
+ void ReleaseFreeMemory() override; |
TileTaskRunner* AsTileTaskRunner() override; |
// Overridden from TileTaskRunner: |
@@ -63,57 +68,42 @@ class CC_EXPORT OneCopyTileTaskWorkerPool : public TileTaskWorkerPool, |
// Playback raster source and schedule copy of |raster_resource| resource to |
// |output_resource|. Returns a non-zero sequence number for this copy |
// operation. |
- CopySequenceNumber PlaybackAndScheduleCopyOnWorkerThread( |
- bool reusing_raster_resource, |
- scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> |
- raster_resource_write_lock, |
- const Resource* raster_resource, |
- const Resource* output_resource, |
+ void PlaybackAndScheduleCopyOnWorkerThread( |
+ const Resource* resource, |
+ const ResourceProvider::ScopedWriteLockGL* resource_lock, |
const RasterSource* raster_source, |
const gfx::Rect& raster_full_rect, |
const gfx::Rect& raster_dirty_rect, |
- float scale); |
- |
- // Issues copy operations until |sequence| has been processed. This will |
- // return immediately if |sequence| has already been processed. |
- void AdvanceLastIssuedCopyTo(CopySequenceNumber sequence); |
- |
- bool have_persistent_gpu_memory_buffers() const { |
- return have_persistent_gpu_memory_buffers_; |
- } |
+ float scale, |
+ uint64_t resource_content_id, |
+ uint64_t previous_content_id); |
protected: |
OneCopyTileTaskWorkerPool(base::SequencedTaskRunner* task_runner, |
TaskGraphRunner* task_graph_runner, |
- ContextProvider* context_provider, |
ResourceProvider* resource_provider, |
- ResourcePool* resource_pool, |
int max_copy_texture_chromium_size, |
- bool have_persistent_gpu_memory_buffers); |
+ bool use_persistent_gpu_memory_buffers, |
+ unsigned image_target); |
private: |
- struct CopyOperation { |
- typedef ScopedPtrDeque<CopyOperation> Deque; |
- |
- CopyOperation(scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> |
- src_write_lock, |
- const Resource* src, |
- const Resource* dst, |
- const gfx::Rect& rect); |
- ~CopyOperation(); |
- |
- scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> src_write_lock; |
- const Resource* src; |
- const Resource* dst; |
- const gfx::Rect rect; |
+ struct StagingBuffer { |
+ StagingBuffer(scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer, |
+ const gfx::Size& size); |
+ ~StagingBuffer(); |
+ |
+ void DestroyGLResources(gpu::gles2::GLES2Interface* gl); |
+ |
+ scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer; |
+ const gfx::Size size; |
+ unsigned texture_id; |
+ unsigned image_id; |
+ unsigned query_id; |
+ uint64_t content_id; |
+ unsigned sequence_id; |
}; |
void OnTaskSetFinished(TaskSet task_set); |
- void AdvanceLastFlushedCopyTo(CopySequenceNumber sequence); |
- void IssueCopyOperations(int64 count); |
- void ScheduleCheckForCompletedCopyOperationsWithLockAcquired( |
- bool wait_if_needed); |
- void CheckForCompletedCopyOperations(bool wait_if_needed); |
scoped_refptr<base::trace_event::ConvertableToTraceFormat> StateAsValue() |
const; |
void StagingStateAsValueInto( |
@@ -123,31 +113,26 @@ class CC_EXPORT OneCopyTileTaskWorkerPool : public TileTaskWorkerPool, |
TaskGraphRunner* task_graph_runner_; |
const NamespaceToken namespace_token_; |
TileTaskRunnerClient* client_; |
- ContextProvider* context_provider_; |
- ResourceProvider* resource_provider_; |
- ResourcePool* resource_pool_; |
+ ResourceProvider* const resource_provider_; |
const int max_bytes_per_copy_operation_; |
- const bool have_persistent_gpu_memory_buffers_; |
+ const bool use_persistent_gpu_memory_buffers_; |
+ const unsigned image_target_; |
TaskSetCollection tasks_pending_; |
scoped_refptr<TileTask> task_set_finished_tasks_[kNumberOfTaskSets]; |
- CopySequenceNumber last_issued_copy_operation_; |
- CopySequenceNumber last_flushed_copy_operation_; |
// Task graph used when scheduling tasks and vector used to gather |
// completed tasks. |
TaskGraph graph_; |
Task::Vector completed_tasks_; |
- base::Lock lock_; |
+ mutable base::Lock lock_; |
// |lock_| must be acquired when accessing the following members. |
- base::ConditionVariable copy_operation_count_cv_; |
+ using StagingBufferVector = ScopedVector<StagingBuffer>; |
+ StagingBufferVector free_buffers_; |
+ using StagingBufferDeque = ScopedPtrDeque<StagingBuffer>; |
+ StagingBufferDeque busy_buffers_; |
+ unsigned next_sequence_id_; |
int bytes_scheduled_since_last_flush_; |
- size_t issued_copy_operation_count_; |
- CopyOperation::Deque pending_copy_operations_; |
- CopySequenceNumber next_copy_operation_sequence_; |
- bool check_for_completed_copy_operations_pending_; |
- base::TimeTicks last_check_for_completed_copy_operations_time_; |
- bool shutdown_; |
base::WeakPtrFactory<OneCopyTileTaskWorkerPool> weak_ptr_factory_; |
// "raster finished" tasks need their own factory as they need to be |