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 #include "cc/raster/one_copy_tile_task_worker_pool.h" | 5 #include "cc/raster/one_copy_tile_task_worker_pool.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
102 // Number of in-flight copy operations to allow. | 102 // Number of in-flight copy operations to allow. |
103 const int kMaxCopyOperations = 32; | 103 const int kMaxCopyOperations = 32; |
104 | 104 |
105 // Delay been checking for copy operations to complete. | 105 // Delay been checking for copy operations to complete. |
106 const int kCheckForCompletedCopyOperationsTickRateMs = 1; | 106 const int kCheckForCompletedCopyOperationsTickRateMs = 1; |
107 | 107 |
108 // Number of failed attempts to allow before we perform a check that will | 108 // Number of failed attempts to allow before we perform a check that will |
109 // wait for copy operations to complete if needed. | 109 // wait for copy operations to complete if needed. |
110 const int kFailedAttemptsBeforeWaitIfNeeded = 256; | 110 const int kFailedAttemptsBeforeWaitIfNeeded = 256; |
111 | 111 |
| 112 // 4MiB is the size of 4 512x512 tiles, which has proven to be a good |
| 113 // default batch size for copy operations. |
| 114 const int kMaxBytesPerCopyOperation = 1024 * 1024 * 4; |
| 115 |
112 } // namespace | 116 } // namespace |
113 | 117 |
114 OneCopyTileTaskWorkerPool::CopyOperation::CopyOperation( | 118 OneCopyTileTaskWorkerPool::CopyOperation::CopyOperation( |
115 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> src_write_lock, | 119 scoped_ptr<ResourceProvider::ScopedWriteLockGpuMemoryBuffer> src_write_lock, |
116 const Resource* src, | 120 const Resource* src, |
117 const Resource* dst, | 121 const Resource* dst, |
118 const gfx::Rect& rect) | 122 const gfx::Rect& rect) |
119 : src_write_lock(src_write_lock.Pass()), src(src), dst(dst), rect(rect) { | 123 : src_write_lock(src_write_lock.Pass()), src(src), dst(dst), rect(rect) { |
120 } | 124 } |
121 | 125 |
122 OneCopyTileTaskWorkerPool::CopyOperation::~CopyOperation() { | 126 OneCopyTileTaskWorkerPool::CopyOperation::~CopyOperation() { |
123 } | 127 } |
124 | 128 |
125 // static | 129 // static |
126 scoped_ptr<TileTaskWorkerPool> OneCopyTileTaskWorkerPool::Create( | 130 scoped_ptr<TileTaskWorkerPool> OneCopyTileTaskWorkerPool::Create( |
127 base::SequencedTaskRunner* task_runner, | 131 base::SequencedTaskRunner* task_runner, |
128 TaskGraphRunner* task_graph_runner, | 132 TaskGraphRunner* task_graph_runner, |
129 ContextProvider* context_provider, | 133 ContextProvider* context_provider, |
130 ResourceProvider* resource_provider, | 134 ResourceProvider* resource_provider, |
131 ResourcePool* resource_pool, | 135 ResourcePool* resource_pool, |
132 int max_bytes_per_copy_operation, | 136 int max_copy_texture_chromium_size, |
133 bool have_persistent_gpu_memory_buffers) { | 137 bool have_persistent_gpu_memory_buffers) { |
134 return make_scoped_ptr<TileTaskWorkerPool>(new OneCopyTileTaskWorkerPool( | 138 return make_scoped_ptr<TileTaskWorkerPool>(new OneCopyTileTaskWorkerPool( |
135 task_runner, task_graph_runner, context_provider, resource_provider, | 139 task_runner, task_graph_runner, context_provider, resource_provider, |
136 resource_pool, max_bytes_per_copy_operation, | 140 resource_pool, max_copy_texture_chromium_size, |
137 have_persistent_gpu_memory_buffers)); | 141 have_persistent_gpu_memory_buffers)); |
138 } | 142 } |
139 | 143 |
140 OneCopyTileTaskWorkerPool::OneCopyTileTaskWorkerPool( | 144 OneCopyTileTaskWorkerPool::OneCopyTileTaskWorkerPool( |
141 base::SequencedTaskRunner* task_runner, | 145 base::SequencedTaskRunner* task_runner, |
142 TaskGraphRunner* task_graph_runner, | 146 TaskGraphRunner* task_graph_runner, |
143 ContextProvider* context_provider, | 147 ContextProvider* context_provider, |
144 ResourceProvider* resource_provider, | 148 ResourceProvider* resource_provider, |
145 ResourcePool* resource_pool, | 149 ResourcePool* resource_pool, |
146 int max_bytes_per_copy_operation, | 150 int max_copy_texture_chromium_size, |
147 bool have_persistent_gpu_memory_buffers) | 151 bool have_persistent_gpu_memory_buffers) |
148 : task_runner_(task_runner), | 152 : task_runner_(task_runner), |
149 task_graph_runner_(task_graph_runner), | 153 task_graph_runner_(task_graph_runner), |
150 namespace_token_(task_graph_runner->GetNamespaceToken()), | 154 namespace_token_(task_graph_runner->GetNamespaceToken()), |
151 context_provider_(context_provider), | 155 context_provider_(context_provider), |
152 resource_provider_(resource_provider), | 156 resource_provider_(resource_provider), |
153 resource_pool_(resource_pool), | 157 resource_pool_(resource_pool), |
154 max_bytes_per_copy_operation_(max_bytes_per_copy_operation), | 158 max_bytes_per_copy_operation_( |
| 159 max_copy_texture_chromium_size |
| 160 ? std::min(kMaxBytesPerCopyOperation, |
| 161 max_copy_texture_chromium_size) |
| 162 : kMaxBytesPerCopyOperation), |
155 have_persistent_gpu_memory_buffers_(have_persistent_gpu_memory_buffers), | 163 have_persistent_gpu_memory_buffers_(have_persistent_gpu_memory_buffers), |
156 last_issued_copy_operation_(0), | 164 last_issued_copy_operation_(0), |
157 last_flushed_copy_operation_(0), | 165 last_flushed_copy_operation_(0), |
158 lock_(), | 166 lock_(), |
159 copy_operation_count_cv_(&lock_), | 167 copy_operation_count_cv_(&lock_), |
160 bytes_scheduled_since_last_flush_(0), | 168 bytes_scheduled_since_last_flush_(0), |
161 issued_copy_operation_count_(0), | 169 issued_copy_operation_count_(0), |
162 next_copy_operation_sequence_(1), | 170 next_copy_operation_sequence_(1), |
163 check_for_completed_copy_operations_pending_(false), | 171 check_for_completed_copy_operations_pending_(false), |
164 shutdown_(false), | 172 shutdown_(false), |
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
568 "pending_copy_count", | 576 "pending_copy_count", |
569 static_cast<int>(resource_pool_->total_resource_count() - | 577 static_cast<int>(resource_pool_->total_resource_count() - |
570 resource_pool_->acquired_resource_count())); | 578 resource_pool_->acquired_resource_count())); |
571 staging_state->SetInteger( | 579 staging_state->SetInteger( |
572 "bytes_pending_copy", | 580 "bytes_pending_copy", |
573 static_cast<int>(resource_pool_->total_memory_usage_bytes() - | 581 static_cast<int>(resource_pool_->total_memory_usage_bytes() - |
574 resource_pool_->acquired_memory_usage_bytes())); | 582 resource_pool_->acquired_memory_usage_bytes())); |
575 } | 583 } |
576 | 584 |
577 } // namespace cc | 585 } // namespace cc |
OLD | NEW |