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

Unified Diff: content/browser/cache_storage/cache_storage_index.cc

Issue 2416713002: Write out CacheStorageCache size to index file. (Closed)
Patch Set: BrowserThread::PostDelayedTask(IO, ...) --> base::ThreadTaskRunnerHandle::Get()->Post* Created 4 years 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 side-by-side diff with in-line comments
Download patch
Index: content/browser/cache_storage/cache_storage_index.cc
diff --git a/content/browser/cache_storage/cache_storage_index.cc b/content/browser/cache_storage/cache_storage_index.cc
new file mode 100644
index 0000000000000000000000000000000000000000..a5ddcb33692b53b986a8859949b64c4e3ce19730
--- /dev/null
+++ b/content/browser/cache_storage/cache_storage_index.cc
@@ -0,0 +1,114 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "content/browser/cache_storage/cache_storage_index.h"
+
+#include <utility>
+
+namespace content {
+
+CacheStorageIndex::CacheStorageIndex()
+ : doomed_cache_metadata_("", CacheStorage::kSizeUnknown) {
+ ClearDoomedCache();
+}
+
+CacheStorageIndex::~CacheStorageIndex() = default;
+
+CacheStorageIndex& CacheStorageIndex::operator=(CacheStorageIndex&& rhs) {
+ DCHECK(!has_doomed_cache_);
+ ordered_cache_metadata_ = std::move(rhs.ordered_cache_metadata_);
+ cache_metadata_map_ = std::move(rhs.cache_metadata_map_);
+ storage_size_ = rhs.storage_size_;
+ rhs.storage_size_ = CacheStorage::kSizeUnknown;
+ return *this;
+}
+
+void CacheStorageIndex::Insert(const CacheMetadata& cache_metadata) {
+ DCHECK(!has_doomed_cache_);
+ DCHECK(cache_metadata_map_.find(cache_metadata.name) ==
+ cache_metadata_map_.end());
+ ordered_cache_metadata_.push_back(cache_metadata);
+ cache_metadata_map_[cache_metadata.name] = --ordered_cache_metadata_.end();
+ storage_size_ = CacheStorage::kSizeUnknown;
+}
+
+void CacheStorageIndex::Delete(const std::string& cache_name) {
+ DCHECK(!has_doomed_cache_);
+ auto it = cache_metadata_map_.find(cache_name);
+ DCHECK(it != cache_metadata_map_.end());
+ ordered_cache_metadata_.erase(it->second);
+ cache_metadata_map_.erase(it);
+ storage_size_ = CacheStorage::kSizeUnknown;
+}
+
+bool CacheStorageIndex::SetCacheSize(const std::string& cache_name,
+ int64_t size) {
+ if (has_doomed_cache_)
+ DCHECK_NE(cache_name, doomed_cache_metadata_.name);
+ auto it = cache_metadata_map_.find(cache_name);
+ DCHECK(it != cache_metadata_map_.end());
+ if (it->second->size == size)
+ return false;
+ it->second->size = size;
+ storage_size_ = CacheStorage::kSizeUnknown;
+ return true;
+}
+
+int64_t CacheStorageIndex::GetCacheSize(const std::string& cache_name) const {
+ const auto& it = cache_metadata_map_.find(cache_name);
+ if (it == cache_metadata_map_.end())
+ return CacheStorage::kSizeUnknown;
+ return it->second->size;
+}
+
+int64_t CacheStorageIndex::GetStorageSize() {
+ if (storage_size_ == CacheStorage::kSizeUnknown)
+ UpdateStorageSize();
+ return storage_size_;
+}
+
+void CacheStorageIndex::UpdateStorageSize() {
+ int64_t storage_size = 0;
+ storage_size_ = CacheStorage::kSizeUnknown;
+ for (const CacheMetadata& info : ordered_cache_metadata_) {
+ if (info.size == CacheStorage::kSizeUnknown)
+ return;
+ storage_size += info.size;
+ }
+ storage_size_ = storage_size;
+}
+
+void CacheStorageIndex::DoomCache(const std::string& cache_name) {
+ DCHECK(!has_doomed_cache_);
+ auto map_it = cache_metadata_map_.find(cache_name);
+ DCHECK(map_it != cache_metadata_map_.end());
+ doomed_cache_metadata_ = std::move(*(map_it->second));
+ after_doomed_cache_metadata_ = ordered_cache_metadata_.erase(map_it->second);
+ cache_metadata_map_.erase(map_it);
+ storage_size_ = CacheStorage::kSizeUnknown;
+ has_doomed_cache_ = true;
+}
+
+void CacheStorageIndex::FinalizeDoomedCache() {
+ DCHECK(has_doomed_cache_);
+ ClearDoomedCache();
+}
+
+void CacheStorageIndex::RestoreDoomedCache() {
+ DCHECK(has_doomed_cache_);
+ const auto cache_name = doomed_cache_metadata_.name;
+ cache_metadata_map_[cache_name] = ordered_cache_metadata_.insert(
+ after_doomed_cache_metadata_, std::move(doomed_cache_metadata_));
+ after_doomed_cache_metadata_ = ordered_cache_metadata_.end();
+ storage_size_ = CacheStorage::kSizeUnknown;
+ ClearDoomedCache();
+}
+
+void CacheStorageIndex::ClearDoomedCache() {
+ doomed_cache_metadata_.name.clear();
+ after_doomed_cache_metadata_ = ordered_cache_metadata_.end();
+ has_doomed_cache_ = false;
+}
+
+} // namespace content

Powered by Google App Engine
This is Rietveld 408576698