1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/persistent_cache/persistent_cache.h"
#include <memory>
#include "base/metrics/histogram_functions.h"
#include "base/notreached.h"
#include "base/strings/strcat.h"
#include "base/timer/elapsed_timer.h"
#include "components/persistent_cache/backend.h"
#include "components/persistent_cache/backend_params.h"
#include "components/persistent_cache/entry.h"
#include "components/persistent_cache/sqlite/sqlite_backend_impl.h"
namespace persistent_cache {
const char* GetBackendTypeName(BackendType backend_type) {
switch (backend_type) {
case BackendType::kSqlite:
return "SQLite";
case BackendType::kMock:
return "Mock";
}
}
// static
std::unique_ptr<PersistentCache> PersistentCache::Open(
BackendParams backend_params) {
std::unique_ptr<Backend> backend;
switch (backend_params.type) {
case BackendType::kSqlite:
backend = std::make_unique<SqliteBackendImpl>(std::move(backend_params));
break;
case BackendType::kMock:
// Reserved for testing;
NOTREACHED();
}
return std::make_unique<PersistentCache>(std::move(backend));
}
PersistentCache::PersistentCache(std::unique_ptr<Backend> backend) {
CHECK(backend);
base::ElapsedTimer timer;
BackendType backend_type = backend->GetType();
if (backend->Initialize()) {
backend_ = std::move(backend);
// TODO (https://crbug.com/377475540): Implement read-only mode.
std::string histogram_name =
base::StrCat({"PersistentCache.BackendInitialize.",
GetBackendTypeName(backend_type), ".ReadWrite"});
base::UmaHistogramMicrosecondsTimes(histogram_name, timer.Elapsed());
}
}
PersistentCache::~PersistentCache() = default;
std::unique_ptr<Entry> PersistentCache::Find(std::string_view key) {
if (!backend_) {
return nullptr;
}
return backend_->Find(key);
}
void PersistentCache::Insert(std::string_view key,
base::span<const uint8_t> content,
EntryMetadata metadata) {
if (!backend_) {
return;
}
backend_->Insert(key, content, metadata);
}
Backend* PersistentCache::GetBackendForTesting() {
return backend_.get();
}
} // namespace persistent_cache
|