Commit d954a0c1 authored by nhiroki's avatar nhiroki Committed by Commit bot

ServiceWorker: Add UMA for storage recovery operation

This CL adds UMA for results of SWStorage::DeleteAndStartOver() and
SWDatabase::DestroyDatabase(). Deleting the diskcache just returns
success/failure boolean and it will be recorded as a part of results
of DeleteAndStartOver().

BUG=461654,468926
TEST=n/a

Review URL: https://codereview.chromium.org/1030703003

Cr-Commit-Position: refs/heads/master@{#322332}
parent 6826023a
......@@ -969,8 +969,10 @@ ServiceWorkerDatabase::Status ServiceWorkerDatabase::DestroyDatabase() {
}
}
return LevelDBStatusToStatus(
leveldb::DestroyDB(path_.AsUTF8Unsafe(), options));
Status status =
LevelDBStatusToStatus(leveldb::DestroyDB(path_.AsUTF8Unsafe(), options));
ServiceWorkerMetrics::RecordDestroyDatabaseResult(status);
return status;
}
ServiceWorkerDatabase::Status ServiceWorkerDatabase::LazyOpen(
......
......@@ -23,47 +23,52 @@ void RecordURLMetricOnUI(const GURL& url) {
} // namespace
// static
void ServiceWorkerMetrics::CountInitDiskCacheResult(bool result) {
UMA_HISTOGRAM_BOOLEAN("ServiceWorker.DiskCache.InitResult", result);
}
// static
void ServiceWorkerMetrics::CountReadResponseResult(
ServiceWorkerMetrics::ReadResponseResult result) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.DiskCache.ReadResponseResult",
result, NUM_READ_RESPONSE_RESULT_TYPES);
}
// static
void ServiceWorkerMetrics::CountWriteResponseResult(
ServiceWorkerMetrics::WriteResponseResult result) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.DiskCache.WriteResponseResult",
result, NUM_WRITE_RESPONSE_RESULT_TYPES);
}
// static
void ServiceWorkerMetrics::CountOpenDatabaseResult(
ServiceWorkerDatabase::Status status) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.Database.OpenResult",
status, ServiceWorkerDatabase::STATUS_ERROR_MAX);
}
// static
void ServiceWorkerMetrics::CountReadDatabaseResult(
ServiceWorkerDatabase::Status status) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.Database.ReadResult",
status, ServiceWorkerDatabase::STATUS_ERROR_MAX);
}
// static
void ServiceWorkerMetrics::CountWriteDatabaseResult(
ServiceWorkerDatabase::Status status) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.Database.WriteResult",
status, ServiceWorkerDatabase::STATUS_ERROR_MAX);
}
// static
void ServiceWorkerMetrics::RecordDestroyDatabaseResult(
ServiceWorkerDatabase::Status status) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.Database.DestroyDatabase", status,
ServiceWorkerDatabase::STATUS_ERROR_MAX);
}
void ServiceWorkerMetrics::RecordDeleteAndStartOverResult(
DeleteAndStartOverResult result) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.Storage.DeleteAndStartOverResult",
result, NUM_DELETE_AND_START_OVER_RESULT_TYPES);
}
void ServiceWorkerMetrics::CountControlledPageLoad(const GURL& url) {
RecordAction(base::UserMetricsAction("ServiceWorker.ControlledPageLoad"));
BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
......
......@@ -28,6 +28,13 @@ class ServiceWorkerMetrics {
NUM_WRITE_RESPONSE_RESULT_TYPES,
};
enum DeleteAndStartOverResult {
DELETE_OK,
DELETE_DATABASE_ERROR,
DELETE_DISK_CACHE_ERROR,
NUM_DELETE_AND_START_OVER_RESULT_TYPES,
};
// Used for ServiceWorkerDiskCache.
static void CountInitDiskCacheResult(bool result);
static void CountReadResponseResult(ReadResponseResult result);
......@@ -37,6 +44,10 @@ class ServiceWorkerMetrics {
static void CountOpenDatabaseResult(ServiceWorkerDatabase::Status status);
static void CountReadDatabaseResult(ServiceWorkerDatabase::Status status);
static void CountWriteDatabaseResult(ServiceWorkerDatabase::Status status);
static void RecordDestroyDatabaseResult(ServiceWorkerDatabase::Status status);
// Used for ServiceWorkerStorage.
static void RecordDeleteAndStartOverResult(DeleteAndStartOverResult result);
// Counts the number of page loads controlled by a Service Worker.
static void CountControlledPageLoad(const GURL& url);
......
......@@ -1756,6 +1756,8 @@ void ServiceWorkerStorage::DidDeleteDatabase(
// Give up the corruption recovery until the browser restarts.
LOG(ERROR) << "Failed to delete the database: "
<< ServiceWorkerDatabase::StatusToString(status);
ServiceWorkerMetrics::RecordDeleteAndStartOverResult(
ServiceWorkerMetrics::DELETE_DATABASE_ERROR);
callback.Run(DatabaseStatusToStatusCode(status));
return;
}
......@@ -1780,10 +1782,14 @@ void ServiceWorkerStorage::DidDeleteDiskCache(
if (!result) {
// Give up the corruption recovery until the browser restarts.
LOG(ERROR) << "Failed to delete the diskcache.";
ServiceWorkerMetrics::RecordDeleteAndStartOverResult(
ServiceWorkerMetrics::DELETE_DISK_CACHE_ERROR);
callback.Run(SERVICE_WORKER_ERROR_FAILED);
return;
}
DVLOG(1) << "Deleted ServiceWorkerDiskCache successfully.";
ServiceWorkerMetrics::RecordDeleteAndStartOverResult(
ServiceWorkerMetrics::DELETE_OK);
callback.Run(SERVICE_WORKER_OK);
}
......
......@@ -33890,6 +33890,14 @@ Therefore, the affected-histogram name has to have at least one dot in it.
<summary>Execution time of ServiceWorkerGlobalScope.onactivate.</summary>
</histogram>
<histogram name="ServiceWorker.Database.DestroyDatabaseResult"
enum="ServiceWorkerDatabaseStatus">
<owner>nhiroki@chromium.org</owner>
<summary>
Records result of destroy database operations in ServiceWorkerDatabase.
</summary>
</histogram>
<histogram name="ServiceWorker.Database.OpenResult"
enum="ServiceWorkerDatabaseStatus">
<owner>nhiroki@chromium.org</owner>
......@@ -34004,6 +34012,14 @@ Therefore, the affected-histogram name has to have at least one dot in it.
</summary>
</histogram>
<histogram name="ServiceWorker.Storage.DeleteAndStartOverResult"
enum="ServiceWorkerDeleteAndStartOverResult">
<owner>nhiroki@chromium.org</owner>
<summary>
Records result of storage recovery operations in ServiceWorkerStorage.
</summary>
</histogram>
<histogram name="ServiceWorkerCache.Cache" units="milliseconds">
<owner>dmurph@chromium.org</owner>
<summary>
......@@ -59356,6 +59372,12 @@ To add a new entry, add it with any value and run test to compute valid value.
<int value="4" label="Operation Error"/>
</enum>
<enum name="ServiceWorkerDeleteAndStartOverResult" type="int">
<int value="0" label="OK"/>
<int value="1" label="Failed to delete ServiceWorkerDatabase"/>
<int value="2" label="Failed to delete ServiceWorkerDiskCache"/>
</enum>
<enum name="ServiceWorkerReadResponseResult" type="int">
<int value="0" label="OK"/>
<int value="1" label="Read headers error"/>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment