diff options
author | falken <falken@chromium.org> | 2015-04-13 19:34:53 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-04-14 02:35:14 +0000 |
commit | 517b5c8c5b25fe2bfd3429a6ebc068c52ce5c804 (patch) | |
tree | cfb9302e8be5c6cd18d669f8e67de7b2105f56a7 /content | |
parent | e3893dbb95252915f583a09e0fc6c3f007169584 (diff) | |
download | chromium_src-517b5c8c5b25fe2bfd3429a6ebc068c52ce5c804.zip chromium_src-517b5c8c5b25fe2bfd3429a6ebc068c52ce5c804.tar.gz chromium_src-517b5c8c5b25fe2bfd3429a6ebc068c52ce5c804.tar.bz2 |
Service Worker: Split StartWorker metrics into new and installed versions.
This starts track down why the "StartWorker.Status" metric shows more
failures than expected.
We expect different characteristics for starting a new worker vs. one that
is already installed. It wouldn't be surprising for a new worker to fail
to start due to a syntax error or take a longer time due to downloading
the script, for example. Therefore, split the metrics to distinguish between
the two cases.
BUG=448003
Review URL: https://codereview.chromium.org/1085553002
Cr-Commit-Position: refs/heads/master@{#324993}
Diffstat (limited to 'content')
3 files changed, 52 insertions, 6 deletions
diff --git a/content/browser/service_worker/service_worker_metrics.cc b/content/browser/service_worker/service_worker_metrics.cc index 5c10a67..69f0d85 100644 --- a/content/browser/service_worker/service_worker_metrics.cc +++ b/content/browser/service_worker/service_worker_metrics.cc @@ -4,7 +4,7 @@ #include "content/browser/service_worker/service_worker_metrics.h" -#include "base/metrics/histogram.h" +#include "base/metrics/histogram_macros.h" #include "base/metrics/user_metrics_action.h" #include "content/public/browser/browser_thread.h" #include "content/public/browser/content_browser_client.h" @@ -75,4 +75,24 @@ void ServiceWorkerMetrics::CountControlledPageLoad(const GURL& url) { base::Bind(&RecordURLMetricOnUI, url)); } +void ServiceWorkerMetrics::RecordStartWorkerStatus( + ServiceWorkerStatusCode status, + bool is_installed) { + if (is_installed) { + UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Status", status, + SERVICE_WORKER_ERROR_MAX_VALUE); + } else { + UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartNewWorker.Status", status, + SERVICE_WORKER_ERROR_MAX_VALUE); + } +} + +void ServiceWorkerMetrics::RecordStartWorkerTime(const base::TimeDelta& time, + bool is_installed) { + if (is_installed) + UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartWorker.Time", time); + else + UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartNewWorker.Time", time); +} + } // namespace content diff --git a/content/browser/service_worker/service_worker_metrics.h b/content/browser/service_worker/service_worker_metrics.h index 8b05856..705deb7 100644 --- a/content/browser/service_worker/service_worker_metrics.h +++ b/content/browser/service_worker/service_worker_metrics.h @@ -52,6 +52,16 @@ class ServiceWorkerMetrics { // Counts the number of page loads controlled by a Service Worker. static void CountControlledPageLoad(const GURL& url); + // Records the result of trying to start a worker. |is_installed| indicates + // whether the version has been installed. + static void RecordStartWorkerStatus(ServiceWorkerStatusCode status, + bool is_installed); + + // Records the time taken to successfully start a worker. |is_installed| + // indicates whether the version has been installed. + static void RecordStartWorkerTime(const base::TimeDelta& time, + bool is_installed); + private: DISALLOW_IMPLICIT_CONSTRUCTORS(ServiceWorkerMetrics); }; diff --git a/content/browser/service_worker/service_worker_version.cc b/content/browser/service_worker/service_worker_version.cc index 681e2b6..0c5202d 100644 --- a/content/browser/service_worker/service_worker_version.cc +++ b/content/browser/service_worker/service_worker_version.cc @@ -19,6 +19,7 @@ #include "content/browser/service_worker/embedded_worker_registry.h" #include "content/browser/service_worker/service_worker_context_core.h" #include "content/browser/service_worker/service_worker_context_wrapper.h" +#include "content/browser/service_worker/service_worker_metrics.h" #include "content/browser/service_worker/service_worker_registration.h" #include "content/browser/service_worker/service_worker_utils.h" #include "content/browser/storage_partition_impl.h" @@ -343,6 +344,21 @@ void AddNonWindowClient(ServiceWorkerProviderHost* host, clients->push_back(client_info); } +bool IsInstalled(ServiceWorkerVersion::Status status) { + switch (status) { + case ServiceWorkerVersion::NEW: + case ServiceWorkerVersion::INSTALLING: + case ServiceWorkerVersion::REDUNDANT: + return false; + case ServiceWorkerVersion::INSTALLED: + case ServiceWorkerVersion::ACTIVATING: + case ServiceWorkerVersion::ACTIVATED: + return true; + } + NOTREACHED() << "Unexpected status: " << status; + return false; +} + } // namespace const int ServiceWorkerVersion::kStartWorkerTimeoutMinutes = 5; @@ -1731,15 +1747,15 @@ void ServiceWorkerVersion::RecordStartWorkerResult( // Failing to start a doomed worker isn't interesting and very common when // update dooms because the script is byte-to-byte identical. - if (is_doomed_) + if (is_doomed_ || status_ == REDUNDANT) return; - UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Status", status, - SERVICE_WORKER_ERROR_MAX_VALUE); + ServiceWorkerMetrics::RecordStartWorkerStatus(status, IsInstalled(status_)); + if (status == SERVICE_WORKER_OK && !start_time.is_null() && !skip_recording_startup_time_) { - UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartWorker.Time", - GetTickDuration(start_time)); + ServiceWorkerMetrics::RecordStartWorkerTime(GetTickDuration(start_time), + IsInstalled(status_)); } if (status != SERVICE_WORKER_ERROR_TIMEOUT) |