Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(384)

Side by Side Diff: cc/raster/staging_buffer_pool.cc

Issue 1866203004: Convert //cc from scoped_ptr to std::unique_ptr. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: scopedptrcc: rebase Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « cc/raster/staging_buffer_pool.h ('k') | cc/raster/task_graph_runner.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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/staging_buffer_pool.h" 5 #include "cc/raster/staging_buffer_pool.h"
6 6
7 #include <memory>
8
9 #include "base/memory/ptr_util.h"
7 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
8 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
9 #include "base/trace_event/memory_dump_manager.h" 12 #include "base/trace_event/memory_dump_manager.h"
10 #include "cc/base/container_util.h" 13 #include "cc/base/container_util.h"
11 #include "cc/debug/traced_value.h" 14 #include "cc/debug/traced_value.h"
12 #include "cc/resources/scoped_resource.h" 15 #include "cc/resources/scoped_resource.h"
13 #include "gpu/command_buffer/client/gles2_interface.h" 16 #include "gpu/command_buffer/client/gles2_interface.h"
14 17
15 namespace cc { 18 namespace cc {
16 namespace { 19 namespace {
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 gfx::GetGpuMemoryBufferGUIDForTracing(tracing_process_id, buffer_id); 114 gfx::GetGpuMemoryBufferGUIDForTracing(tracing_process_id, buffer_id);
112 pmd->CreateSharedGlobalAllocatorDump(shared_buffer_guid); 115 pmd->CreateSharedGlobalAllocatorDump(shared_buffer_guid);
113 116
114 // By creating an edge with a higher |importance| (w.r.t. browser-side dumps) 117 // By creating an edge with a higher |importance| (w.r.t. browser-side dumps)
115 // the tracing UI will account the effective size of the buffer to the child. 118 // the tracing UI will account the effective size of the buffer to the child.
116 const int kImportance = 2; 119 const int kImportance = 2;
117 pmd->AddOwnershipEdge(buffer_dump->guid(), shared_buffer_guid, kImportance); 120 pmd->AddOwnershipEdge(buffer_dump->guid(), shared_buffer_guid, kImportance);
118 } 121 }
119 122
120 // static 123 // static
121 scoped_ptr<StagingBufferPool> StagingBufferPool::Create( 124 std::unique_ptr<StagingBufferPool> StagingBufferPool::Create(
122 base::SequencedTaskRunner* task_runner, 125 base::SequencedTaskRunner* task_runner,
123 ResourceProvider* resource_provider, 126 ResourceProvider* resource_provider,
124 bool use_partial_raster, 127 bool use_partial_raster,
125 int max_staging_buffer_usage_in_bytes) { 128 int max_staging_buffer_usage_in_bytes) {
126 return make_scoped_ptr<StagingBufferPool>( 129 return base::WrapUnique(
127 new StagingBufferPool(task_runner, resource_provider, use_partial_raster, 130 new StagingBufferPool(task_runner, resource_provider, use_partial_raster,
128 max_staging_buffer_usage_in_bytes)); 131 max_staging_buffer_usage_in_bytes));
129 } 132 }
130 133
131 StagingBufferPool::StagingBufferPool(base::SequencedTaskRunner* task_runner, 134 StagingBufferPool::StagingBufferPool(base::SequencedTaskRunner* task_runner,
132 ResourceProvider* resource_provider, 135 ResourceProvider* resource_provider,
133 bool use_partial_raster, 136 bool use_partial_raster,
134 int max_staging_buffer_usage_in_bytes) 137 int max_staging_buffer_usage_in_bytes)
135 : task_runner_(task_runner), 138 : task_runner_(task_runner),
136 resource_provider_(resource_provider), 139 resource_provider_(resource_provider),
(...skipping 20 matching lines...) Expand all
157 base::AutoLock lock(lock_); 160 base::AutoLock lock(lock_);
158 if (buffers_.empty()) 161 if (buffers_.empty())
159 return; 162 return;
160 163
161 ReleaseBuffersNotUsedSince(base::TimeTicks() + base::TimeDelta::Max()); 164 ReleaseBuffersNotUsedSince(base::TimeTicks() + base::TimeDelta::Max());
162 DCHECK_EQ(staging_buffer_usage_in_bytes_, 0); 165 DCHECK_EQ(staging_buffer_usage_in_bytes_, 0);
163 DCHECK_EQ(free_staging_buffer_usage_in_bytes_, 0); 166 DCHECK_EQ(free_staging_buffer_usage_in_bytes_, 0);
164 } 167 }
165 168
166 void StagingBufferPool::ReleaseStagingBuffer( 169 void StagingBufferPool::ReleaseStagingBuffer(
167 scoped_ptr<StagingBuffer> staging_buffer) { 170 std::unique_ptr<StagingBuffer> staging_buffer) {
168 base::AutoLock lock(lock_); 171 base::AutoLock lock(lock_);
169 172
170 staging_buffer->last_usage = base::TimeTicks::Now(); 173 staging_buffer->last_usage = base::TimeTicks::Now();
171 busy_buffers_.push_back(std::move(staging_buffer)); 174 busy_buffers_.push_back(std::move(staging_buffer));
172 175
173 ScheduleReduceMemoryUsage(); 176 ScheduleReduceMemoryUsage();
174 } 177 }
175 178
176 bool StagingBufferPool::OnMemoryDump( 179 bool StagingBufferPool::OnMemoryDump(
177 const base::trace_event::MemoryDumpArgs& args, 180 const base::trace_event::MemoryDumpArgs& args,
178 base::trace_event::ProcessMemoryDump* pmd) { 181 base::trace_event::ProcessMemoryDump* pmd) {
179 base::AutoLock lock(lock_); 182 base::AutoLock lock(lock_);
180 183
181 for (const auto* buffer : buffers_) { 184 for (const auto* buffer : buffers_) {
182 auto in_free_buffers = 185 auto in_free_buffers =
183 std::find_if(free_buffers_.begin(), free_buffers_.end(), 186 std::find_if(free_buffers_.begin(), free_buffers_.end(),
184 [buffer](const scoped_ptr<StagingBuffer>& b) { 187 [buffer](const std::unique_ptr<StagingBuffer>& b) {
185 return b.get() == buffer; 188 return b.get() == buffer;
186 }); 189 });
187 buffer->OnMemoryDump(pmd, buffer->format, 190 buffer->OnMemoryDump(pmd, buffer->format,
188 in_free_buffers != free_buffers_.end()); 191 in_free_buffers != free_buffers_.end());
189 } 192 }
190 193
191 return true; 194 return true;
192 } 195 }
193 196
194 void StagingBufferPool::AddStagingBuffer(const StagingBuffer* staging_buffer, 197 void StagingBufferPool::AddStagingBuffer(const StagingBuffer* staging_buffer,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 void StagingBufferPool::MarkStagingBufferAsBusy( 229 void StagingBufferPool::MarkStagingBufferAsBusy(
227 const StagingBuffer* staging_buffer) { 230 const StagingBuffer* staging_buffer) {
228 lock_.AssertAcquired(); 231 lock_.AssertAcquired();
229 232
230 int buffer_usage_in_bytes = ResourceUtil::UncheckedSizeInBytes<int>( 233 int buffer_usage_in_bytes = ResourceUtil::UncheckedSizeInBytes<int>(
231 staging_buffer->size, staging_buffer->format); 234 staging_buffer->size, staging_buffer->format);
232 DCHECK_GE(free_staging_buffer_usage_in_bytes_, buffer_usage_in_bytes); 235 DCHECK_GE(free_staging_buffer_usage_in_bytes_, buffer_usage_in_bytes);
233 free_staging_buffer_usage_in_bytes_ -= buffer_usage_in_bytes; 236 free_staging_buffer_usage_in_bytes_ -= buffer_usage_in_bytes;
234 } 237 }
235 238
236 scoped_ptr<StagingBuffer> StagingBufferPool::AcquireStagingBuffer( 239 std::unique_ptr<StagingBuffer> StagingBufferPool::AcquireStagingBuffer(
237 const Resource* resource, 240 const Resource* resource,
238 uint64_t previous_content_id) { 241 uint64_t previous_content_id) {
239 base::AutoLock lock(lock_); 242 base::AutoLock lock(lock_);
240 243
241 scoped_ptr<StagingBuffer> staging_buffer; 244 std::unique_ptr<StagingBuffer> staging_buffer;
242 245
243 ContextProvider* context_provider = 246 ContextProvider* context_provider =
244 resource_provider_->output_surface()->worker_context_provider(); 247 resource_provider_->output_surface()->worker_context_provider();
245 DCHECK(context_provider); 248 DCHECK(context_provider);
246 249
247 ContextProvider::ScopedContextLock scoped_context(context_provider); 250 ContextProvider::ScopedContextLock scoped_context(context_provider);
248 251
249 gpu::gles2::GLES2Interface* gl = scoped_context.ContextGL(); 252 gpu::gles2::GLES2Interface* gl = scoped_context.ContextGL();
250 DCHECK(gl); 253 DCHECK(gl);
251 254
(...skipping 28 matching lines...) Expand all
280 free_buffers_.push_back(PopFront(&busy_buffers_)); 283 free_buffers_.push_back(PopFront(&busy_buffers_));
281 } 284 }
282 } 285 }
283 } 286 }
284 287
285 // Find a staging buffer that allows us to perform partial raster when 288 // Find a staging buffer that allows us to perform partial raster when
286 // using persistent GpuMemoryBuffers. 289 // using persistent GpuMemoryBuffers.
287 if (use_partial_raster_ && previous_content_id) { 290 if (use_partial_raster_ && previous_content_id) {
288 StagingBufferDeque::iterator it = std::find_if( 291 StagingBufferDeque::iterator it = std::find_if(
289 free_buffers_.begin(), free_buffers_.end(), 292 free_buffers_.begin(), free_buffers_.end(),
290 [previous_content_id](const scoped_ptr<StagingBuffer>& buffer) { 293 [previous_content_id](const std::unique_ptr<StagingBuffer>& buffer) {
291 return buffer->content_id == previous_content_id; 294 return buffer->content_id == previous_content_id;
292 }); 295 });
293 if (it != free_buffers_.end()) { 296 if (it != free_buffers_.end()) {
294 staging_buffer = std::move(*it); 297 staging_buffer = std::move(*it);
295 free_buffers_.erase(it); 298 free_buffers_.erase(it);
296 MarkStagingBufferAsBusy(staging_buffer.get()); 299 MarkStagingBufferAsBusy(staging_buffer.get());
297 } 300 }
298 } 301 }
299 302
300 // Find staging buffer of correct size and format. 303 // Find staging buffer of correct size and format.
301 if (!staging_buffer) { 304 if (!staging_buffer) {
302 StagingBufferDeque::iterator it = 305 StagingBufferDeque::iterator it =
303 std::find_if(free_buffers_.begin(), free_buffers_.end(), 306 std::find_if(free_buffers_.begin(), free_buffers_.end(),
304 [resource](const scoped_ptr<StagingBuffer>& buffer) { 307 [resource](const std::unique_ptr<StagingBuffer>& buffer) {
305 return buffer->size == resource->size() && 308 return buffer->size == resource->size() &&
306 buffer->format == resource->format(); 309 buffer->format == resource->format();
307 }); 310 });
308 if (it != free_buffers_.end()) { 311 if (it != free_buffers_.end()) {
309 staging_buffer = std::move(*it); 312 staging_buffer = std::move(*it);
310 free_buffers_.erase(it); 313 free_buffers_.erase(it);
311 MarkStagingBufferAsBusy(staging_buffer.get()); 314 MarkStagingBufferAsBusy(staging_buffer.get());
312 } 315 }
313 } 316 }
314 317
315 // Create new staging buffer if necessary. 318 // Create new staging buffer if necessary.
316 if (!staging_buffer) { 319 if (!staging_buffer) {
317 staging_buffer = make_scoped_ptr( 320 staging_buffer = base::WrapUnique(
318 new StagingBuffer(resource->size(), resource->format())); 321 new StagingBuffer(resource->size(), resource->format()));
319 AddStagingBuffer(staging_buffer.get(), resource->format()); 322 AddStagingBuffer(staging_buffer.get(), resource->format());
320 } 323 }
321 324
322 // Release enough free buffers to stay within the limit. 325 // Release enough free buffers to stay within the limit.
323 while (staging_buffer_usage_in_bytes_ > max_staging_buffer_usage_in_bytes_) { 326 while (staging_buffer_usage_in_bytes_ > max_staging_buffer_usage_in_bytes_) {
324 if (free_buffers_.empty()) 327 if (free_buffers_.empty())
325 break; 328 break;
326 329
327 free_buffers_.front()->DestroyGLResources(gl); 330 free_buffers_.front()->DestroyGLResources(gl);
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 return; 419 return;
417 420
418 busy_buffers_.front()->DestroyGLResources(gl); 421 busy_buffers_.front()->DestroyGLResources(gl);
419 RemoveStagingBuffer(busy_buffers_.front().get()); 422 RemoveStagingBuffer(busy_buffers_.front().get());
420 busy_buffers_.pop_front(); 423 busy_buffers_.pop_front();
421 } 424 }
422 } 425 }
423 } 426 }
424 427
425 } // namespace cc 428 } // namespace cc
OLDNEW
« no previous file with comments | « cc/raster/staging_buffer_pool.h ('k') | cc/raster/task_graph_runner.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698