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

Side by Side Diff: content/browser/cache_storage/cache_storage_index.cc

Issue 2901083002: [CacheStorage] Pad and bin opaque resource sizes. (Closed)
Patch Set: Creating single padding key per session. Created 3 years, 6 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 "content/browser/cache_storage/cache_storage_index.h" 5 #include "content/browser/cache_storage/cache_storage_index.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 namespace content { 9 namespace content {
10 10
11 CacheStorageIndex::CacheStorageIndex() 11 CacheStorageIndex::CacheStorageIndex()
12 : doomed_cache_metadata_("", CacheStorage::kSizeUnknown) { 12 : doomed_cache_metadata_("",
13 CacheStorage::kSizeUnknown,
14 CacheStorage::kSizeUnknown,
15 "") {
13 ClearDoomedCache(); 16 ClearDoomedCache();
14 } 17 }
15 18
16 CacheStorageIndex::~CacheStorageIndex() = default; 19 CacheStorageIndex::~CacheStorageIndex() = default;
17 20
18 CacheStorageIndex& CacheStorageIndex::operator=(CacheStorageIndex&& rhs) { 21 CacheStorageIndex& CacheStorageIndex::operator=(CacheStorageIndex&& rhs) {
19 DCHECK(!has_doomed_cache_); 22 DCHECK(!has_doomed_cache_);
20 ordered_cache_metadata_ = std::move(rhs.ordered_cache_metadata_); 23 ordered_cache_metadata_ = std::move(rhs.ordered_cache_metadata_);
21 cache_metadata_map_ = std::move(rhs.cache_metadata_map_); 24 cache_metadata_map_ = std::move(rhs.cache_metadata_map_);
22 storage_size_ = rhs.storage_size_; 25 storage_size_ = rhs.storage_size_;
26 storage_padding_ = rhs.storage_padding_;
23 rhs.storage_size_ = CacheStorage::kSizeUnknown; 27 rhs.storage_size_ = CacheStorage::kSizeUnknown;
28 rhs.storage_padding_ = CacheStorage::kSizeUnknown;
24 return *this; 29 return *this;
25 } 30 }
26 31
27 void CacheStorageIndex::Insert(const CacheMetadata& cache_metadata) { 32 void CacheStorageIndex::Insert(const CacheMetadata& cache_metadata) {
28 DCHECK(!has_doomed_cache_); 33 DCHECK(!has_doomed_cache_);
29 DCHECK(cache_metadata_map_.find(cache_metadata.name) == 34 DCHECK(cache_metadata_map_.find(cache_metadata.name) ==
30 cache_metadata_map_.end()); 35 cache_metadata_map_.end());
31 ordered_cache_metadata_.push_back(cache_metadata); 36 ordered_cache_metadata_.push_back(cache_metadata);
32 cache_metadata_map_[cache_metadata.name] = --ordered_cache_metadata_.end(); 37 cache_metadata_map_[cache_metadata.name] = --ordered_cache_metadata_.end();
33 storage_size_ = CacheStorage::kSizeUnknown; 38 storage_size_ = CacheStorage::kSizeUnknown;
39 storage_padding_ = CacheStorage::kSizeUnknown;
34 } 40 }
35 41
36 void CacheStorageIndex::Delete(const std::string& cache_name) { 42 void CacheStorageIndex::Delete(const std::string& cache_name) {
37 DCHECK(!has_doomed_cache_); 43 DCHECK(!has_doomed_cache_);
38 auto it = cache_metadata_map_.find(cache_name); 44 auto it = cache_metadata_map_.find(cache_name);
39 DCHECK(it != cache_metadata_map_.end()); 45 DCHECK(it != cache_metadata_map_.end());
40 ordered_cache_metadata_.erase(it->second); 46 ordered_cache_metadata_.erase(it->second);
41 cache_metadata_map_.erase(it); 47 cache_metadata_map_.erase(it);
42 storage_size_ = CacheStorage::kSizeUnknown; 48 storage_size_ = CacheStorage::kSizeUnknown;
49 storage_padding_ = CacheStorage::kSizeUnknown;
43 } 50 }
44 51
45 bool CacheStorageIndex::SetCacheSize(const std::string& cache_name, 52 bool CacheStorageIndex::SetCacheSize(const std::string& cache_name,
46 int64_t size) { 53 int64_t size) {
47 if (has_doomed_cache_) 54 if (has_doomed_cache_)
48 DCHECK_NE(cache_name, doomed_cache_metadata_.name); 55 DCHECK_NE(cache_name, doomed_cache_metadata_.name);
49 auto it = cache_metadata_map_.find(cache_name); 56 auto it = cache_metadata_map_.find(cache_name);
50 DCHECK(it != cache_metadata_map_.end()); 57 DCHECK(it != cache_metadata_map_.end());
51 if (it->second->size == size) 58 if (it->second->size == size)
52 return false; 59 return false;
53 it->second->size = size; 60 it->second->size = size;
54 storage_size_ = CacheStorage::kSizeUnknown; 61 storage_size_ = CacheStorage::kSizeUnknown;
55 return true; 62 return true;
56 } 63 }
57 64
65 const CacheStorageIndex::CacheMetadata* CacheStorageIndex::FindMetadata(
66 const std::string& cache_name) const {
67 const auto& it = cache_metadata_map_.find(cache_name);
68 if (it == cache_metadata_map_.end())
69 return nullptr;
70 return &*it->second;
71 }
72
58 int64_t CacheStorageIndex::GetCacheSize(const std::string& cache_name) const { 73 int64_t CacheStorageIndex::GetCacheSize(const std::string& cache_name) const {
59 const auto& it = cache_metadata_map_.find(cache_name); 74 const auto& it = cache_metadata_map_.find(cache_name);
60 if (it == cache_metadata_map_.end()) 75 if (it == cache_metadata_map_.end())
61 return CacheStorage::kSizeUnknown; 76 return CacheStorage::kSizeUnknown;
62 return it->second->size; 77 return it->second->size;
63 } 78 }
64 79
65 int64_t CacheStorageIndex::GetStorageSize() { 80 bool CacheStorageIndex::SetCachePadding(const std::string& cache_name,
81 int64_t padding) {
82 DCHECK(!has_doomed_cache_ || cache_name == doomed_cache_metadata_.name)
83 << cache_name << " != " << doomed_cache_metadata_.name;
84 auto it = cache_metadata_map_.find(cache_name);
85 DCHECK(it != cache_metadata_map_.end());
86 if (it->second->padding == padding)
87 return false;
88 it->second->padding = padding;
89 storage_padding_ = CacheStorage::kSizeUnknown;
90 return true;
91 }
92
93 int64_t CacheStorageIndex::GetCachePadding(
94 const std::string& cache_name) const {
95 const auto& it = cache_metadata_map_.find(cache_name);
96 if (it == cache_metadata_map_.end())
97 return CacheStorage::kSizeUnknown;
98 return it->second->padding;
99 }
100
101 int64_t CacheStorageIndex::GetPaddedStorageSize() {
66 if (storage_size_ == CacheStorage::kSizeUnknown) 102 if (storage_size_ == CacheStorage::kSizeUnknown)
67 UpdateStorageSize(); 103 UpdateStorageSize();
68 return storage_size_; 104 if (storage_padding_ == CacheStorage::kSizeUnknown)
105 UpdateStoragePadding();
106 if (storage_size_ == CacheStorage::kSizeUnknown ||
107 storage_padding_ == CacheStorage::kSizeUnknown) {
108 return CacheStorage::kSizeUnknown;
109 }
110 return storage_size_ + storage_padding_;
69 } 111 }
70 112
71 void CacheStorageIndex::UpdateStorageSize() { 113 void CacheStorageIndex::UpdateStorageSize() {
72 int64_t storage_size = 0; 114 int64_t storage_size = 0;
73 storage_size_ = CacheStorage::kSizeUnknown; 115 storage_size_ = CacheStorage::kSizeUnknown;
74 for (const CacheMetadata& info : ordered_cache_metadata_) { 116 for (const CacheMetadata& info : ordered_cache_metadata_) {
75 if (info.size == CacheStorage::kSizeUnknown) 117 if (info.size == CacheStorage::kSizeUnknown)
76 return; 118 return;
77 storage_size += info.size; 119 storage_size += info.size;
78 } 120 }
79 storage_size_ = storage_size; 121 storage_size_ = storage_size;
80 } 122 }
81 123
124 void CacheStorageIndex::UpdateStoragePadding() {
jkarlin 2017/06/15 16:08:35 Perhaps rename to CalculateStoragePadding?
cmumford 2017/06/20 18:22:04 Done.
125 int64_t storage_padding = 0;
126 storage_padding_ = CacheStorage::kSizeUnknown;
127 for (const CacheMetadata& info : ordered_cache_metadata_) {
128 if (info.padding == CacheStorage::kSizeUnknown)
129 return;
130 storage_padding += info.padding;
131 }
132 storage_padding_ = storage_padding;
133 }
134
82 void CacheStorageIndex::DoomCache(const std::string& cache_name) { 135 void CacheStorageIndex::DoomCache(const std::string& cache_name) {
83 DCHECK(!has_doomed_cache_); 136 DCHECK(!has_doomed_cache_);
84 auto map_it = cache_metadata_map_.find(cache_name); 137 auto map_it = cache_metadata_map_.find(cache_name);
85 DCHECK(map_it != cache_metadata_map_.end()); 138 DCHECK(map_it != cache_metadata_map_.end());
86 doomed_cache_metadata_ = std::move(*(map_it->second)); 139 doomed_cache_metadata_ = std::move(*(map_it->second));
87 after_doomed_cache_metadata_ = ordered_cache_metadata_.erase(map_it->second); 140 after_doomed_cache_metadata_ = ordered_cache_metadata_.erase(map_it->second);
88 cache_metadata_map_.erase(map_it); 141 cache_metadata_map_.erase(map_it);
89 storage_size_ = CacheStorage::kSizeUnknown; 142 storage_size_ = CacheStorage::kSizeUnknown;
143 storage_padding_ = CacheStorage::kSizeUnknown;
90 has_doomed_cache_ = true; 144 has_doomed_cache_ = true;
91 } 145 }
92 146
93 void CacheStorageIndex::FinalizeDoomedCache() { 147 void CacheStorageIndex::FinalizeDoomedCache() {
94 DCHECK(has_doomed_cache_); 148 DCHECK(has_doomed_cache_);
95 ClearDoomedCache(); 149 ClearDoomedCache();
96 } 150 }
97 151
98 void CacheStorageIndex::RestoreDoomedCache() { 152 void CacheStorageIndex::RestoreDoomedCache() {
99 DCHECK(has_doomed_cache_); 153 DCHECK(has_doomed_cache_);
100 const auto cache_name = doomed_cache_metadata_.name; 154 const auto cache_name = doomed_cache_metadata_.name;
101 cache_metadata_map_[cache_name] = ordered_cache_metadata_.insert( 155 cache_metadata_map_[cache_name] = ordered_cache_metadata_.insert(
102 after_doomed_cache_metadata_, std::move(doomed_cache_metadata_)); 156 after_doomed_cache_metadata_, std::move(doomed_cache_metadata_));
103 after_doomed_cache_metadata_ = ordered_cache_metadata_.end(); 157 after_doomed_cache_metadata_ = ordered_cache_metadata_.end();
104 storage_size_ = CacheStorage::kSizeUnknown; 158 storage_size_ = CacheStorage::kSizeUnknown;
159 storage_padding_ = CacheStorage::kSizeUnknown;
105 ClearDoomedCache(); 160 ClearDoomedCache();
106 } 161 }
107 162
108 void CacheStorageIndex::ClearDoomedCache() { 163 void CacheStorageIndex::ClearDoomedCache() {
109 doomed_cache_metadata_.name.clear(); 164 doomed_cache_metadata_.name.clear();
110 after_doomed_cache_metadata_ = ordered_cache_metadata_.end(); 165 after_doomed_cache_metadata_ = ordered_cache_metadata_.end();
111 has_doomed_cache_ = false; 166 has_doomed_cache_ = false;
112 } 167 }
113 168
114 } // namespace content 169 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698