diff --git a/components/services/storage/dom_storage/local_storage_impl.cc b/components/services/storage/dom_storage/local_storage_impl.cc index 8a4cf174108e..20975e9e9b67 100644 --- a/components/services/storage/dom_storage/local_storage_impl.cc +++ b/components/services/storage/dom_storage/local_storage_impl.cc @@ -673,7 +673,7 @@ void LocalStorageImpl::OnDatabaseOpened(leveldb::Status status) { if (!status.ok()) { // If we failed to open the database, try to delete and recreate the // database, or ultimately fallback to an in-memory database. - DeleteAndRecreateDatabase(); + DeleteAndRecreateDatabase(DatabaseResetReason::kOpenFailed); return; } @@ -708,14 +708,14 @@ void LocalStorageImpl::OnGotDatabaseVersion(leveldb::Status status, &db_version) || db_version < kMinSchemaVersion || db_version > kCurrentLocalStorageSchemaVersion) { - DeleteAndRecreateDatabase(); + DeleteAndRecreateDatabase(DatabaseResetReason::kVersionMismatch); return; } database_initialized_ = true; } else { // Other read error. Possibly database corruption. - DeleteAndRecreateDatabase(); + DeleteAndRecreateDatabase(DatabaseResetReason::kReadError); return; } @@ -750,7 +750,9 @@ void LocalStorageImpl::OnConnectionFinished() { on_database_opened_callbacks_.clear(); } -void LocalStorageImpl::DeleteAndRecreateDatabase() { +void LocalStorageImpl::DeleteAndRecreateDatabase( + DatabaseResetReason reason /*= DatabaseResetReason::kUnknown*/) { + UMA_HISTOGRAM_ENUMERATION("Cobalt.LocalStorage.DatabaseResetReason", reason); if (connection_state_ == CONNECTION_SHUTDOWN) return; @@ -971,7 +973,7 @@ void LocalStorageImpl::OnCommitResult(leveldb::Status status) { // Deleting StorageAreas in here could cause more commits (and commit // errors), but those commits won't reach OnCommitResult because the area // will have been deleted before the commit finishes. - DeleteAndRecreateDatabase(); + DeleteAndRecreateDatabase(DatabaseResetReason::kCommitError); } } diff --git a/components/services/storage/dom_storage/local_storage_impl.h b/components/services/storage/dom_storage/local_storage_impl.h index 565200b95375..2ac6bb3fbc42 100644 --- a/components/services/storage/dom_storage/local_storage_impl.h +++ b/components/services/storage/dom_storage/local_storage_impl.h @@ -126,7 +126,18 @@ class LocalStorageImpl : public base::trace_event::MemoryDumpProvider, void OnGotDatabaseVersion(leveldb::Status status, DomStorageDatabase::Value value); void OnConnectionFinished(); - void DeleteAndRecreateDatabase(); + + enum class DatabaseResetReason { + kOpenFailed, + kVersionMismatch, + kReadError, + kCommitError, + kUnknown, + kMaxValue = kUnknown, + }; + + void DeleteAndRecreateDatabase(DatabaseResetReason reason = + DatabaseResetReason::kUnknown); void OnDBDestroyed(bool recreate_in_memory, leveldb::Status status); StorageAreaHolder* GetOrCreateStorageArea( diff --git a/tools/metrics/histograms/metadata/cobalt/histograms.xml b/tools/metrics/histograms/metadata/cobalt/histograms.xml index 1ac3ad94797d..d24c97c4e813 100644 --- a/tools/metrics/histograms/metadata/cobalt/histograms.xml +++ b/tools/metrics/histograms/metadata/cobalt/histograms.xml @@ -304,6 +304,7 @@ Always run the pretty print utility on this file after editing: +<<<<<<< HEAD colinliang@google.com @@ -346,6 +347,13 @@ Always run the pretty print utility on this file after editing: all memory the process can access, including shared libraries, stack, heap, and memory-mapped files. Recorded at regular intervals when memory metrics are emitted. +======= + + charleykim@google.com + + Records the reason why the Local Storage database was reset. +>>>>>>> bca1d8a8ba (adding UMA for local storage DeleteAndRecreateDatabase() (#9354))