| 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
|
|
|