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_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_ | 5 #ifndef CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_ |
6 #define CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_ | 6 #define CC_RASTER_ONE_COPY_TILE_TASK_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/synchronization/lock.h" |
10 #include "base/values.h" | 10 #include "base/values.h" |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
55 // Overridden from TileTaskClient: | 55 // Overridden from TileTaskClient: |
56 scoped_ptr<RasterBuffer> AcquireBufferForRaster( | 56 scoped_ptr<RasterBuffer> AcquireBufferForRaster( |
57 const Resource* resource, | 57 const Resource* resource, |
58 uint64_t resource_content_id, | 58 uint64_t resource_content_id, |
59 uint64_t previous_content_id) override; | 59 uint64_t previous_content_id) override; |
60 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override; | 60 void ReleaseBufferForRaster(scoped_ptr<RasterBuffer> buffer) override; |
61 | 61 |
62 // Playback raster source and schedule copy of |raster_resource| resource to | 62 // Playback raster source and schedule copy of |raster_resource| resource to |
63 // |output_resource|. Returns a non-zero sequence number for this copy | 63 // |output_resource|. Returns a non-zero sequence number for this copy |
64 // operation. | 64 // operation. |
65 CopySequenceNumber PlaybackAndScheduleCopyOnWorkerThread( | 65 void PlaybackAndCopyOnWorkerThread( |
66 bool reusing_raster_resource, | 66 bool reusing_raster_resource, |
67 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> | 67 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> |
68 raster_resource_write_lock, | 68 raster_resource_write_lock, |
69 const Resource* raster_resource, | 69 const Resource* raster_resource, |
70 const Resource* output_resource, | 70 const Resource* output_resource, |
71 const RasterSource* raster_source, | 71 const RasterSource* raster_source, |
72 const gfx::Rect& raster_full_rect, | 72 const gfx::Rect& raster_full_rect, |
73 const gfx::Rect& raster_dirty_rect, | 73 const gfx::Rect& raster_dirty_rect, |
74 float scale); | 74 float scale); |
75 | 75 |
76 // Issues copy operations until |sequence| has been processed. This will | 76 // Issues copy operations until |sequence| has been processed. This will |
77 // return immediately if |sequence| has already been processed. | 77 // return immediately if |sequence| has already been processed. |
78 void AdvanceLastIssuedCopyTo(CopySequenceNumber sequence); | 78 void AdvanceLastIssuedCopyTo(CopySequenceNumber sequence); |
79 | 79 |
80 bool have_persistent_gpu_memory_buffers() const { | 80 bool have_persistent_gpu_memory_buffers() const { |
81 return have_persistent_gpu_memory_buffers_; | 81 return have_persistent_gpu_memory_buffers_; |
82 } | 82 } |
83 | 83 |
84 protected: | 84 protected: |
85 OneCopyTileTaskWorkerPool(base::SequencedTaskRunner* task_runner, | 85 OneCopyTileTaskWorkerPool(base::SequencedTaskRunner* task_runner, |
86 TaskGraphRunner* task_graph_runner, | 86 TaskGraphRunner* task_graph_runner, |
87 ContextProvider* context_provider, | 87 ContextProvider* context_provider, |
88 ResourceProvider* resource_provider, | 88 ResourceProvider* resource_provider, |
89 ResourcePool* resource_pool, | 89 ResourcePool* resource_pool, |
90 int max_bytes_per_copy_operation, | 90 int max_bytes_per_copy_operation, |
91 bool have_persistent_gpu_memory_buffers); | 91 bool have_persistent_gpu_memory_buffers); |
92 | 92 |
93 private: | 93 private: |
94 struct CopyOperation { | |
95 typedef ScopedPtrDeque<CopyOperation> Deque; | |
96 | |
97 CopyOperation(scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> | |
98 src_write_lock, | |
99 const Resource* src, | |
100 const Resource* dst, | |
101 const gfx::Rect& rect); | |
102 ~CopyOperation(); | |
103 | |
104 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> src_write_lock; | |
105 const Resource* src; | |
106 const Resource* dst; | |
107 const gfx::Rect rect; | |
108 }; | |
109 | |
110 void OnTaskSetFinished(TaskSet task_set); | 94 void OnTaskSetFinished(TaskSet task_set); |
111 void AdvanceLastFlushedCopyTo(CopySequenceNumber sequence); | |
112 void IssueCopyOperations(int64 count); | |
113 void ScheduleCheckForCompletedCopyOperationsWithLockAcquired( | |
114 bool wait_if_needed); | |
115 void CheckForCompletedCopyOperations(bool wait_if_needed); | |
116 scoped_refptr<base::trace_event::ConvertableToTraceFormat> StateAsValue() | 95 scoped_refptr<base::trace_event::ConvertableToTraceFormat> StateAsValue() |
117 const; | 96 const; |
118 void StagingStateAsValueInto( | 97 void StagingStateAsValueInto( |
119 base::trace_event::TracedValue* staging_state) const; | 98 base::trace_event::TracedValue* staging_state) const; |
120 | 99 |
121 scoped_refptr<base::SequencedTaskRunner> task_runner_; | 100 scoped_refptr<base::SequencedTaskRunner> task_runner_; |
122 TaskGraphRunner* task_graph_runner_; | 101 TaskGraphRunner* task_graph_runner_; |
123 const NamespaceToken namespace_token_; | 102 const NamespaceToken namespace_token_; |
124 TileTaskRunnerClient* client_; | 103 TileTaskRunnerClient* client_; |
125 ContextProvider* context_provider_; | 104 ContextProvider* context_provider_; |
126 ResourceProvider* resource_provider_; | 105 ResourceProvider* resource_provider_; |
127 ResourcePool* resource_pool_; | 106 ResourcePool* resource_pool_; |
128 const int max_bytes_per_copy_operation_; | 107 const int max_bytes_per_copy_operation_; |
129 const bool have_persistent_gpu_memory_buffers_; | 108 const bool have_persistent_gpu_memory_buffers_; |
130 TaskSetCollection tasks_pending_; | 109 TaskSetCollection tasks_pending_; |
131 scoped_refptr<TileTask> task_set_finished_tasks_[kNumberOfTaskSets]; | 110 scoped_refptr<TileTask> task_set_finished_tasks_[kNumberOfTaskSets]; |
132 CopySequenceNumber last_issued_copy_operation_; | |
133 CopySequenceNumber last_flushed_copy_operation_; | |
134 | 111 |
135 // Task graph used when scheduling tasks and vector used to gather | 112 // Task graph used when scheduling tasks and vector used to gather |
136 // completed tasks. | 113 // completed tasks. |
137 TaskGraph graph_; | 114 TaskGraph graph_; |
138 Task::Vector completed_tasks_; | 115 Task::Vector completed_tasks_; |
139 | 116 |
140 base::Lock lock_; | 117 base::Lock lock_; |
141 // |lock_| must be acquired when accessing the following members. | |
142 base::ConditionVariable copy_operation_count_cv_; | |
143 int bytes_scheduled_since_last_flush_; | |
144 size_t issued_copy_operation_count_; | |
145 CopyOperation::Deque pending_copy_operations_; | |
146 CopySequenceNumber next_copy_operation_sequence_; | |
147 bool check_for_completed_copy_operations_pending_; | |
148 base::TimeTicks last_check_for_completed_copy_operations_time_; | |
149 bool shutdown_; | 118 bool shutdown_; |
| 119 // Fence used for CopyResource if CHROMIUM_sync_query is not supported. |
| 120 scoped_refptr<ResourceProvider::SynchronousFence> synchronous_fence_; |
| 121 scoped_refptr<ResourceProvider::Fence> read_lock_fence_; |
150 | 122 |
151 base::WeakPtrFactory<OneCopyTileTaskWorkerPool> weak_ptr_factory_; | 123 base::WeakPtrFactory<OneCopyTileTaskWorkerPool> weak_ptr_factory_; |
152 // "raster finished" tasks need their own factory as they need to be | 124 // "raster finished" tasks need their own factory as they need to be |
153 // canceled when ScheduleTasks() is called. | 125 // canceled when ScheduleTasks() is called. |
154 base::WeakPtrFactory<OneCopyTileTaskWorkerPool> | 126 base::WeakPtrFactory<OneCopyTileTaskWorkerPool> |
155 task_set_finished_weak_ptr_factory_; | 127 task_set_finished_weak_ptr_factory_; |
156 | 128 |
157 DISALLOW_COPY_AND_ASSIGN(OneCopyTileTaskWorkerPool); | 129 DISALLOW_COPY_AND_ASSIGN(OneCopyTileTaskWorkerPool); |
158 }; | 130 }; |
159 | 131 |
160 } // namespace cc | 132 } // namespace cc |
161 | 133 |
162 #endif // CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_ | 134 #endif // CC_RASTER_ONE_COPY_TILE_TASK_WORKER_POOL_H_ |
OLD | NEW |