| 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 851f1b45e1de24e09e96605a10e448305a5fc274..4e050b4c2023a6bba1ca0d706e404bd6fba5706b 100644
|
| --- a/cc/raster/one_copy_tile_task_worker_pool.h
|
| +++ b/cc/raster/one_copy_tile_task_worker_pool.h
|
| @@ -5,12 +5,8 @@
|
| #ifndef CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_
|
| #define CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_
|
|
|
| -#include <set>
|
| -
|
| #include "base/memory/weak_ptr.h"
|
| #include "base/synchronization/lock.h"
|
| -#include "base/time/time.h"
|
| -#include "base/trace_event/memory_dump_provider.h"
|
| #include "base/values.h"
|
| #include "cc/base/scoped_ptr_deque.h"
|
| #include "cc/output/context_provider.h"
|
| @@ -25,20 +21,15 @@
|
| }
|
| }
|
|
|
| -namespace gpu {
|
| -namespace gles2 {
|
| -class GLES2Interface;
|
| -}
|
| -}
|
| -
|
| namespace cc {
|
| class ResourcePool;
|
| +class ScopedResource;
|
|
|
| -class CC_EXPORT OneCopyTileTaskWorkerPool
|
| - : public TileTaskWorkerPool,
|
| - public TileTaskRunner,
|
| - public TileTaskClient,
|
| - public base::trace_event::MemoryDumpProvider {
|
| +typedef int64 CopySequenceNumber;
|
| +
|
| +class CC_EXPORT OneCopyTileTaskWorkerPool : public TileTaskWorkerPool,
|
| + public TileTaskRunner,
|
| + public TileTaskClient {
|
| public:
|
| ~OneCopyTileTaskWorkerPool() override;
|
|
|
| @@ -47,9 +38,9 @@
|
| TaskGraphRunner* task_graph_runner,
|
| ContextProvider* context_provider,
|
| ResourceProvider* resource_provider,
|
| + ResourcePool* resource_pool,
|
| int max_copy_texture_chromium_size,
|
| - bool use_persistent_gpu_memory_buffers,
|
| - int max_staging_buffers);
|
| + bool have_persistent_gpu_memory_buffers);
|
|
|
| // Overridden from TileTaskWorkerPool:
|
| TileTaskRunner* AsTileTaskRunner() override;
|
| @@ -69,57 +60,61 @@
|
| uint64_t previous_content_id) override;
|
| void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override;
|
|
|
| - // Overridden from base::trace_event::MemoryDumpProvider:
|
| - bool OnMemoryDump(const base::trace_event::MemoryDumpArgs& args,
|
| - base::trace_event::ProcessMemoryDump* pmd) override;
|
| -
|
| - // Playback raster source and copy result into |resource|.
|
| - void PlaybackAndCopyOnWorkerThread(
|
| - const Resource* resource,
|
| - const ResourceProvider::ScopedWriteLockGL* resource_lock,
|
| + // 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,
|
| const RasterSource* raster_source,
|
| const gfx::Rect& raster_full_rect,
|
| const gfx::Rect& raster_dirty_rect,
|
| float scale,
|
| - bool include_images,
|
| - uint64_t resource_content_id,
|
| - uint64_t previous_content_id);
|
| + bool include_images);
|
| +
|
| + // 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_;
|
| + }
|
|
|
| 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 use_persistent_gpu_memory_buffers,
|
| - int max_staging_buffers);
|
| + bool have_persistent_gpu_memory_buffers);
|
|
|
| private:
|
| - struct StagingBuffer {
|
| - explicit StagingBuffer(const gfx::Size& size);
|
| - ~StagingBuffer();
|
| + struct CopyOperation {
|
| + typedef ScopedPtrDeque<CopyOperation> Deque;
|
|
|
| - void DestroyGLResources(gpu::gles2::GLES2Interface* gl);
|
| - void OnMemoryDump(base::trace_event::ProcessMemoryDump* pmd,
|
| - ResourceFormat format,
|
| - bool is_free) const;
|
| + CopyOperation(scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer>
|
| + src_write_lock,
|
| + const Resource* src,
|
| + const Resource* dst,
|
| + const gfx::Rect& rect);
|
| + ~CopyOperation();
|
|
|
| - const gfx::Size size;
|
| - scoped_ptr<gfx::GpuMemoryBuffer> gpu_memory_buffer;
|
| - base::TimeTicks last_usage;
|
| - unsigned texture_id;
|
| - unsigned image_id;
|
| - unsigned query_id;
|
| - uint64_t content_id;
|
| + scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> src_write_lock;
|
| + const Resource* src;
|
| + const Resource* dst;
|
| + const gfx::Rect rect;
|
| };
|
|
|
| - scoped_ptr<StagingBuffer> AcquireStagingBuffer(const Resource* resource,
|
| - uint64_t previous_content_id);
|
| - base::TimeTicks GetUsageTimeForLRUBuffer();
|
| - void ScheduleReduceMemoryUsage();
|
| - void ReduceMemoryUsage();
|
| - void ReleaseBuffersNotUsedSince(base::TimeTicks time);
|
| -
|
| 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(
|
| @@ -129,29 +124,31 @@
|
| TaskGraphRunner* task_graph_runner_;
|
| const NamespaceToken namespace_token_;
|
| TileTaskRunnerClient* client_;
|
| - ResourceProvider* const resource_provider_;
|
| + ContextProvider* context_provider_;
|
| + ResourceProvider* resource_provider_;
|
| + ResourcePool* resource_pool_;
|
| const int max_bytes_per_copy_operation_;
|
| - const bool use_persistent_gpu_memory_buffers_;
|
| + const bool have_persistent_gpu_memory_buffers_;
|
| 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_;
|
|
|
| - mutable base::Lock lock_;
|
| + base::Lock lock_;
|
| // |lock_| must be acquired when accessing the following members.
|
| - using StagingBufferSet = std::set<StagingBuffer*>;
|
| - StagingBufferSet buffers_;
|
| - using StagingBufferDeque = ScopedPtrDeque<StagingBuffer>;
|
| - StagingBufferDeque free_buffers_;
|
| - StagingBufferDeque busy_buffers_;
|
| + base::ConditionVariable copy_operation_count_cv_;
|
| int bytes_scheduled_since_last_flush_;
|
| - size_t max_staging_buffers_;
|
| - const base::TimeDelta staging_buffer_expiration_delay_;
|
| - bool reduce_memory_usage_pending_;
|
| - base::Closure reduce_memory_usage_callback_;
|
| + 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
|
|
|