summaryrefslogtreecommitdiffstats
path: root/content
diff options
context:
space:
mode:
authorfalken <falken@chromium.org>2015-04-13 19:34:53 -0700
committerCommit bot <commit-bot@chromium.org>2015-04-14 02:35:14 +0000
commit517b5c8c5b25fe2bfd3429a6ebc068c52ce5c804 (patch)
treecfb9302e8be5c6cd18d669f8e67de7b2105f56a7 /content
parente3893dbb95252915f583a09e0fc6c3f007169584 (diff)
downloadchromium_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')
-rw-r--r--content/browser/service_worker/service_worker_metrics.cc22
-rw-r--r--content/browser/service_worker/service_worker_metrics.h10
-rw-r--r--content/browser/service_worker/service_worker_version.cc26
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)