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

Side by Side Diff: cc/tiles/software_image_decode_controller.cc

Issue 2130683002: [Experiment] purge-and-suspend Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/tiles/software_image_decode_controller.h" 5 #include "cc/tiles/software_image_decode_controller.h"
6 6
7 #include <inttypes.h> 7 #include <inttypes.h>
8 #include <stdint.h> 8 #include <stdint.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
11 #include <functional> 11 #include <functional>
12 12
13 #include "base/allocator/allocator_extension.h"
13 #include "base/format_macros.h" 14 #include "base/format_macros.h"
14 #include "base/macros.h" 15 #include "base/macros.h"
15 #include "base/memory/discardable_memory.h" 16 #include "base/memory/discardable_memory.h"
16 #include "base/memory/ptr_util.h" 17 #include "base/memory/ptr_util.h"
17 #include "base/metrics/histogram_macros.h" 18 #include "base/metrics/histogram_macros.h"
18 #include "base/strings/stringprintf.h" 19 #include "base/strings/stringprintf.h"
19 #include "base/threading/thread_task_runner_handle.h" 20 #include "base/threading/thread_task_runner_handle.h"
20 #include "base/trace_event/memory_dump_manager.h" 21 #include "base/trace_event/memory_dump_manager.h"
21 #include "cc/debug/devtools_instrumentation.h" 22 #include "cc/debug/devtools_instrumentation.h"
22 #include "cc/raster/tile_task.h" 23 #include "cc/raster/tile_task.h"
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
147 at_raster_decoded_images_(ImageMRUCache::NO_AUTO_EVICT), 148 at_raster_decoded_images_(ImageMRUCache::NO_AUTO_EVICT),
148 locked_images_budget_(locked_memory_limit_bytes), 149 locked_images_budget_(locked_memory_limit_bytes),
149 format_(format) { 150 format_(format) {
150 // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview). 151 // In certain cases, ThreadTaskRunnerHandle isn't set (Android Webview).
151 // Don't register a dump provider in these cases. 152 // Don't register a dump provider in these cases.
152 if (base::ThreadTaskRunnerHandle::IsSet()) { 153 if (base::ThreadTaskRunnerHandle::IsSet()) {
153 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider( 154 base::trace_event::MemoryDumpManager::GetInstance()->RegisterDumpProvider(
154 this, "cc::SoftwareImageDecodeController", 155 this, "cc::SoftwareImageDecodeController",
155 base::ThreadTaskRunnerHandle::Get()); 156 base::ThreadTaskRunnerHandle::Get());
156 } 157 }
158 memory_pressure_listener_.reset(new base::MemoryPressureListener(
159 base::Bind(&SoftwareImageDecodeController::OnMemoryPressure,
160 base::Unretained(this))));
157 } 161 }
158 162
159 SoftwareImageDecodeController::~SoftwareImageDecodeController() { 163 SoftwareImageDecodeController::~SoftwareImageDecodeController() {
160 DCHECK_EQ(0u, decoded_images_ref_counts_.size()); 164 DCHECK_EQ(0u, decoded_images_ref_counts_.size());
161 DCHECK_EQ(0u, at_raster_decoded_images_ref_counts_.size()); 165 DCHECK_EQ(0u, at_raster_decoded_images_ref_counts_.size());
162 166
163 // It is safe to unregister, even if we didn't register in the constructor. 167 // It is safe to unregister, even if we didn't register in the constructor.
164 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider( 168 base::trace_event::MemoryDumpManager::GetInstance()->UnregisterDumpProvider(
165 this); 169 this);
166 } 170 }
(...skipping 526 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 base::AutoLock lock(lock_); 697 base::AutoLock lock(lock_);
694 698
695 // Dump each of our caches. 699 // Dump each of our caches.
696 DumpImageMemoryForCache(decoded_images_, "cached", pmd); 700 DumpImageMemoryForCache(decoded_images_, "cached", pmd);
697 DumpImageMemoryForCache(at_raster_decoded_images_, "at_raster", pmd); 701 DumpImageMemoryForCache(at_raster_decoded_images_, "at_raster", pmd);
698 702
699 // Memory dump can't fail, always return true. 703 // Memory dump can't fail, always return true.
700 return true; 704 return true;
701 } 705 }
702 706
707 void SoftwareImageDecodeController::OnMemoryPressure(
708 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
709 decoded_images_.Clear();
710 at_raster_decoded_images_.Clear();
711 base::allocator::ReleaseFreeMemory();
712 }
713
703 void SoftwareImageDecodeController::DumpImageMemoryForCache( 714 void SoftwareImageDecodeController::DumpImageMemoryForCache(
704 const ImageMRUCache& cache, 715 const ImageMRUCache& cache,
705 const char* cache_name, 716 const char* cache_name,
706 base::trace_event::ProcessMemoryDump* pmd) const { 717 base::trace_event::ProcessMemoryDump* pmd) const {
707 lock_.AssertAcquired(); 718 lock_.AssertAcquired();
708 719
709 for (const auto& image_pair : cache) { 720 for (const auto& image_pair : cache) {
710 std::string dump_name = base::StringPrintf( 721 std::string dump_name = base::StringPrintf(
711 "cc/image_memory/controller_0x%" PRIXPTR "/%s/image_%" PRIu64 "_id_%d", 722 "cc/image_memory/controller_0x%" PRIXPTR "/%s/image_%" PRIu64 "_id_%d",
712 reinterpret_cast<uintptr_t>(this), cache_name, 723 reinterpret_cast<uintptr_t>(this), cache_name,
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 void SoftwareImageDecodeController::MemoryBudget::ResetUsage() { 982 void SoftwareImageDecodeController::MemoryBudget::ResetUsage() {
972 current_usage_bytes_ = 0; 983 current_usage_bytes_ = 0;
973 } 984 }
974 985
975 size_t SoftwareImageDecodeController::MemoryBudget::GetCurrentUsageSafe() 986 size_t SoftwareImageDecodeController::MemoryBudget::GetCurrentUsageSafe()
976 const { 987 const {
977 return current_usage_bytes_.ValueOrDie(); 988 return current_usage_bytes_.ValueOrDie();
978 } 989 }
979 990
980 } // namespace cc 991 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698