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

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

Issue 2130683002: [Experiment] purge-and-suspend Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Updated Created 4 years, 5 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
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> 7 #include <memory>
8 8
9 #include "base/allocator/allocator_extension.h"
9 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
10 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
11 #include "base/threading/thread_task_runner_handle.h" 12 #include "base/threading/thread_task_runner_handle.h"
12 #include "base/trace_event/memory_dump_manager.h" 13 #include "base/trace_event/memory_dump_manager.h"
13 #include "cc/base/container_util.h" 14 #include "cc/base/container_util.h"
14 #include "cc/debug/traced_value.h" 15 #include "cc/debug/traced_value.h"
15 #include "cc/resources/scoped_resource.h" 16 #include "cc/resources/scoped_resource.h"
16 #include "gpu/command_buffer/client/gles2_interface.h" 17 #include "gpu/command_buffer/client/gles2_interface.h"
17 18
18 namespace cc { 19 namespace cc {
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 free_staging_buffer_usage_in_bytes_(0), 135 free_staging_buffer_usage_in_bytes_(0),
135 staging_buffer_expiration_delay_( 136 staging_buffer_expiration_delay_(
136 base::TimeDelta::FromMilliseconds(kStagingBufferExpirationDelayMs)), 137 base::TimeDelta::FromMilliseconds(kStagingBufferExpirationDelayMs)),
137 reduce_memory_usage_pending_(false), 138 reduce_memory_usage_pending_(false),
138 weak_ptr_factory_(this) { 139 weak_ptr_factory_(this) {
139 DCHECK(worker_context_provider_); 140 DCHECK(worker_context_provider_);
140 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( 141 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
141 this, "cc::StagingBufferPool", base::ThreadTaskRunnerHandle::Get()); 142 this, "cc::StagingBufferPool", base::ThreadTaskRunnerHandle::Get());
142 reduce_memory_usage_callback_ = base::Bind( 143 reduce_memory_usage_callback_ = base::Bind(
143 &StagingBufferPool::ReduceMemoryUsage, weak_ptr_factory_.GetWeakPtr()); 144 &StagingBufferPool::ReduceMemoryUsage, weak_ptr_factory_.GetWeakPtr());
145
146 memory_pressure_listener_.reset(new base::MemoryPressureListener(base::Bind(
147 &StagingBufferPool::OnMemoryPressure, base::Unretained(this))));
144 } 148 }
145 149
146 StagingBufferPool::~StagingBufferPool() { 150 StagingBufferPool::~StagingBufferPool() {
147 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 151 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
148 this); 152 this);
149 } 153 }
150 154
151 void StagingBufferPool::Shutdown() { 155 void StagingBufferPool::Shutdown() {
152 base::AutoLock lock(lock_); 156 base::AutoLock lock(lock_);
153 if (buffers_.empty()) 157 if (buffers_.empty())
(...skipping 25 matching lines...) Expand all
179 [buffer](const std::unique_ptr<StagingBuffer>& b) { 183 [buffer](const std::unique_ptr<StagingBuffer>& b) {
180 return b.get() == buffer; 184 return b.get() == buffer;
181 }); 185 });
182 buffer->OnMemoryDump(pmd, buffer->format, 186 buffer->OnMemoryDump(pmd, buffer->format,
183 in_free_buffers != free_buffers_.end()); 187 in_free_buffers != free_buffers_.end());
184 } 188 }
185 189
186 return true; 190 return true;
187 } 191 }
188 192
193 void StagingBufferPool::OnMemoryPressure(
194 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
195 base::AutoLock lock(lock_);
196 if (buffers_.empty())
197 return;
198
199 ReleaseBuffersNotUsedSince(base::TimeTicks() + base::TimeDelta::Max());
200 base::allocator::ReleaseFreeMemory();
esprehn 2016/08/05 23:00:57 is this is very strange inside the cc/raster code.
tasak 2016/08/08 04:47:36 Acknowledged. Yeah, I agree that MemoryCoordinato
201 }
202
189 void StagingBufferPool::AddStagingBuffer(const StagingBuffer* staging_buffer, 203 void StagingBufferPool::AddStagingBuffer(const StagingBuffer* staging_buffer,
190 ResourceFormat format) { 204 ResourceFormat format) {
191 lock_.AssertAcquired(); 205 lock_.AssertAcquired();
192 206
193 DCHECK(buffers_.find(staging_buffer) == buffers_.end()); 207 DCHECK(buffers_.find(staging_buffer) == buffers_.end());
194 buffers_.insert(staging_buffer); 208 buffers_.insert(staging_buffer);
195 int buffer_usage_in_bytes = 209 int buffer_usage_in_bytes =
196 ResourceUtil::UncheckedSizeInBytes<int>(staging_buffer->size, format); 210 ResourceUtil::UncheckedSizeInBytes<int>(staging_buffer->size, format);
197 staging_buffer_usage_in_bytes_ += buffer_usage_in_bytes; 211 staging_buffer_usage_in_bytes_ += buffer_usage_in_bytes;
198 } 212 }
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
403 return; 417 return;
404 418
405 busy_buffers_.front()->DestroyGLResources(gl); 419 busy_buffers_.front()->DestroyGLResources(gl);
406 RemoveStagingBuffer(busy_buffers_.front().get()); 420 RemoveStagingBuffer(busy_buffers_.front().get());
407 busy_buffers_.pop_front(); 421 busy_buffers_.pop_front();
408 } 422 }
409 } 423 }
410 } 424 }
411 425
412 } // namespace cc 426 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698