Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ | 5 #ifndef CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ |
| 6 #define CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ | 6 #define CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ |
| 7 | 7 |
| 8 #include "base/memory/weak_ptr.h" | 8 #include "base/memory/weak_ptr.h" |
| 9 #include "base/synchronization/lock.h" | |
| 9 #include "base/values.h" | 10 #include "base/values.h" |
| 11 #include "cc/base/scoped_ptr_deque.h" | |
| 10 #include "cc/output/context_provider.h" | 12 #include "cc/output/context_provider.h" |
| 11 #include "cc/resources/raster_worker_pool.h" | 13 #include "cc/resources/raster_worker_pool.h" |
| 12 #include "cc/resources/rasterizer.h" | 14 #include "cc/resources/rasterizer.h" |
| 15 #include "cc/resources/resource_provider.h" | |
| 13 | 16 |
| 14 namespace base { | 17 namespace base { |
| 15 namespace debug { | 18 namespace debug { |
| 16 class ConvertableToTraceFormat; | 19 class ConvertableToTraceFormat; |
| 17 class TracedValue; | 20 class TracedValue; |
| 18 } | 21 } |
| 19 } | 22 } |
| 20 | 23 |
| 21 namespace cc { | 24 namespace cc { |
| 22 class ResourcePool; | 25 class ResourcePool; |
| 23 class ResourceProvider; | 26 class ResourceProvider; |
| 24 class ScopedResource; | 27 |
| 28 typedef int64 CopySequenceNumber; | |
|
vmpstr
2014/10/22 23:25:17
Can this be uint64?
reveman
2014/10/23 15:38:55
Yes, but I don't see a good reason for that. style
| |
| 25 | 29 |
| 26 class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool, | 30 class CC_EXPORT OneCopyRasterWorkerPool : public RasterWorkerPool, |
| 27 public Rasterizer, | 31 public Rasterizer, |
| 28 public RasterizerTaskClient { | 32 public RasterizerTaskClient { |
| 29 public: | 33 public: |
| 30 ~OneCopyRasterWorkerPool() override; | 34 ~OneCopyRasterWorkerPool() override; |
| 31 | 35 |
| 32 static scoped_ptr<RasterWorkerPool> Create( | 36 static scoped_ptr<RasterWorkerPool> Create( |
| 33 base::SequencedTaskRunner* task_runner, | 37 base::SequencedTaskRunner* task_runner, |
| 34 TaskGraphRunner* task_graph_runner, | 38 TaskGraphRunner* task_graph_runner, |
| 35 ContextProvider* context_provider, | 39 ContextProvider* context_provider, |
| 36 ResourceProvider* resource_provider, | 40 ResourceProvider* resource_provider, |
| 37 ResourcePool* resource_pool); | 41 ResourcePool* resource_pool); |
| 38 | 42 |
| 39 // Overridden from RasterWorkerPool: | 43 // Overridden from RasterWorkerPool: |
| 40 Rasterizer* AsRasterizer() override; | 44 Rasterizer* AsRasterizer() override; |
| 41 | 45 |
| 42 // Overridden from Rasterizer: | 46 // Overridden from Rasterizer: |
| 43 void SetClient(RasterizerClient* client) override; | 47 void SetClient(RasterizerClient* client) override; |
| 44 void Shutdown() override; | 48 void Shutdown() override; |
| 45 void ScheduleTasks(RasterTaskQueue* queue) override; | 49 void ScheduleTasks(RasterTaskQueue* queue) override; |
| 46 void CheckForCompletedTasks() override; | 50 void CheckForCompletedTasks() override; |
| 47 | 51 |
| 48 // Overridden from RasterizerTaskClient: | 52 // Overridden from RasterizerTaskClient: |
| 49 scoped_ptr<RasterBuffer> AcquireBufferForRaster( | 53 scoped_ptr<RasterBuffer> AcquireBufferForRaster( |
| 50 const Resource* resource) override; | 54 const Resource* resource) override; |
| 51 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override; | 55 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override; |
| 52 | 56 |
| 57 // Schedule copy of |src| resource to |dst| resource. Returns a non-zero | |
| 58 // sequence number for this copy operation. | |
| 59 CopySequenceNumber ScheduleCopyOnWorkerThread( | |
| 60 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock, | |
| 61 const Resource* src, | |
| 62 const Resource* dst); | |
| 63 | |
| 64 // Issue copy associated with |sequence| unless already issued. | |
|
vmpstr
2014/10/22 23:25:17
Reading the code, this isn't exactly true. This wi
reveman
2014/10/23 15:38:55
Yes, it's not incorrect though. Just doesn't revea
| |
| 65 void IssueCopy(CopySequenceNumber sequence); | |
| 66 | |
| 67 // Flush copy associated with |sequence| unless already flushed. | |
|
vmpstr
2014/10/22 23:25:17
Likewise here, I think you should mention that cop
reveman
2014/10/23 15:38:55
PTAL.
| |
| 68 void FlushCopy(CopySequenceNumber sequence); | |
|
vmpstr
2014/10/22 23:25:17
Can this be private? Or does Bind complain?
reveman
2014/10/23 15:38:55
Done.
| |
| 69 | |
| 53 protected: | 70 protected: |
| 54 OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner, | 71 OneCopyRasterWorkerPool(base::SequencedTaskRunner* task_runner, |
| 55 TaskGraphRunner* task_graph_runner, | 72 TaskGraphRunner* task_graph_runner, |
| 56 ContextProvider* context_provider, | 73 ContextProvider* context_provider, |
| 57 ResourceProvider* resource_provider, | 74 ResourceProvider* resource_provider, |
| 58 ResourcePool* resource_pool); | 75 ResourcePool* resource_pool); |
| 59 | 76 |
| 60 private: | 77 private: |
| 78 struct CopyOperation { | |
| 79 typedef ScopedPtrDeque<CopyOperation> Deque; | |
| 80 | |
| 81 CopyOperation( | |
| 82 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock, | |
| 83 ResourceProvider::ResourceId src, | |
| 84 ResourceProvider::ResourceId dst); | |
| 85 ~CopyOperation(); | |
| 86 | |
| 87 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> write_lock; | |
| 88 ResourceProvider::ResourceId src; | |
| 89 ResourceProvider::ResourceId dst; | |
| 90 }; | |
| 91 | |
| 61 void OnRasterFinished(TaskSet task_set); | 92 void OnRasterFinished(TaskSet task_set); |
| 93 void IssueCopyOperations(int64 count); | |
| 62 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; | 94 scoped_refptr<base::debug::ConvertableToTraceFormat> StateAsValue() const; |
| 63 void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const; | 95 void StagingStateAsValueInto(base::debug::TracedValue* staging_state) const; |
| 64 | 96 |
| 65 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 97 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
| 66 TaskGraphRunner* task_graph_runner_; | 98 TaskGraphRunner* task_graph_runner_; |
| 67 const NamespaceToken namespace_token_; | 99 const NamespaceToken namespace_token_; |
| 68 RasterizerClient* client_; | 100 RasterizerClient* client_; |
| 69 ContextProvider* context_provider_; | 101 ContextProvider* context_provider_; |
| 70 ResourceProvider* resource_provider_; | 102 ResourceProvider* resource_provider_; |
| 71 ResourcePool* resource_pool_; | 103 ResourcePool* resource_pool_; |
| 72 TaskSetCollection raster_pending_; | 104 TaskSetCollection raster_pending_; |
| 73 scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets]; | 105 scoped_refptr<RasterizerTask> raster_finished_tasks_[kNumberOfTaskSets]; |
| 106 CopySequenceNumber last_issued_copy_operation_; | |
| 107 CopySequenceNumber last_flushed_copy_operation_; | |
| 74 | 108 |
| 75 // Task graph used when scheduling tasks and vector used to gather | 109 // Task graph used when scheduling tasks and vector used to gather |
| 76 // completed tasks. | 110 // completed tasks. |
| 77 TaskGraph graph_; | 111 TaskGraph graph_; |
| 78 Task::Vector completed_tasks_; | 112 Task::Vector completed_tasks_; |
| 79 | 113 |
| 114 base::Lock lock_; | |
| 115 // |lock_| must be acquired when accessing the following members. | |
| 116 CopyOperation::Deque pending_copy_operations_; | |
| 117 CopySequenceNumber next_copy_operation_sequence_; | |
| 118 | |
| 119 base::WeakPtrFactory<OneCopyRasterWorkerPool> weak_ptr_factory_; | |
| 80 base::WeakPtrFactory<OneCopyRasterWorkerPool> | 120 base::WeakPtrFactory<OneCopyRasterWorkerPool> |
| 81 raster_finished_weak_ptr_factory_; | 121 raster_finished_weak_ptr_factory_; |
| 82 | 122 |
| 83 DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool); | 123 DISALLOW_COPY_AND_ASSIGN(OneCopyRasterWorkerPool); |
| 84 }; | 124 }; |
| 85 | 125 |
| 86 } // namespace cc | 126 } // namespace cc |
| 87 | 127 |
| 88 #endif // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ | 128 #endif // CC_RESOURCES_ONE_COPY_RASTER_WORKER_POOL_H_ |
| OLD | NEW |