Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1103)

Unified Diff: content/browser/service_worker/service_worker_metrics.cc

Issue 2641813002: Add UMA for service worker navigation preload. (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/service_worker/service_worker_metrics.cc
diff --git a/content/browser/service_worker/service_worker_metrics.cc b/content/browser/service_worker/service_worker_metrics.cc
index af9dcb14a7c45042bdba48b00796bcb98ca8eabb..786a75758c706df1144da3d3a2b500ab29da0644 100644
--- a/content/browser/service_worker/service_worker_metrics.cc
+++ b/content/browser/service_worker/service_worker_metrics.cc
@@ -86,27 +86,54 @@ std::string EventTypeToSuffix(ServiceWorkerMetrics::EventType event_type) {
return "_UNKNOWN";
}
-std::string GetWorkerPreparationSuffix(
+ServiceWorkerMetrics::WorkerPreparationType GetWorkerPreparationType(
EmbeddedWorkerStatus initial_worker_status,
ServiceWorkerMetrics::StartSituation start_situation) {
+ using Situation = ServiceWorkerMetrics::StartSituation;
+ using Preparation = ServiceWorkerMetrics::WorkerPreparationType;
switch (initial_worker_status) {
case EmbeddedWorkerStatus::STOPPED: {
switch (start_situation) {
- case ServiceWorkerMetrics::StartSituation::DURING_STARTUP:
- return "_StartWorkerDuringStartup";
- case ServiceWorkerMetrics::StartSituation::NEW_PROCESS:
- return "_StartWorkerNewProcess";
- case ServiceWorkerMetrics::StartSituation::EXISTING_PROCESS:
- return "_StartWorkerExistingProcess";
- default:
- NOTREACHED() << static_cast<int>(start_situation);
+ case Situation::DURING_STARTUP:
+ return Preparation::START_DURING_STARTUP;
+ case Situation::NEW_PROCESS:
+ return Preparation::START_IN_NEW_PROCESS;
+ case Situation::EXISTING_PROCESS:
+ return Preparation::START_IN_EXISTING_PROCESS;
+ case Situation::UNKNOWN:
+ break;
}
+ break;
}
case EmbeddedWorkerStatus::STARTING:
- return "_StartingWorker";
+ return Preparation::STARTING;
case EmbeddedWorkerStatus::RUNNING:
- return "_RunningWorker";
+ return Preparation::RUNNING;
case EmbeddedWorkerStatus::STOPPING:
+ return Preparation::STOPPING;
+ }
+ NOTREACHED() << static_cast<int>(initial_worker_status);
+ return Preparation::UNKNOWN;
+}
+
+std::string GetWorkerPreparationSuffix(
+ ServiceWorkerMetrics::WorkerPreparationType status) {
+ using Preparation = ServiceWorkerMetrics::WorkerPreparationType;
+ switch (status) {
+ case Preparation::UNKNOWN:
+ case Preparation::NUM_TYPES:
+ break;
+ case Preparation::START_DURING_STARTUP:
+ return "_StartWorkerDuringStartup";
+ case Preparation::START_IN_NEW_PROCESS:
+ return "_StartWorkerNewProcess";
+ case Preparation::START_IN_EXISTING_PROCESS:
+ return "_StartWorkerExistingProcess";
+ case Preparation::STARTING:
+ return "_StartingWorker";
+ case Preparation::RUNNING:
+ return "_RunningWorker";
+ case Preparation::STOPPING:
return "_StoppingWorker";
}
NOTREACHED();
@@ -382,30 +409,60 @@ void ServiceWorkerMetrics::RecordStartWorkerTime(base::TimeDelta time,
bool is_installed,
StartSituation start_situation,
EventType purpose) {
+ const std::string name = "ServiceWorker.StartWorker.Time";
if (is_installed) {
- std::string name = "ServiceWorker.StartWorker.Time";
UMA_HISTOGRAM_MEDIUM_TIMES(name, time);
RecordSuffixedMediumTimeHistogram(
name, StartSituationToSuffix(start_situation), time);
RecordSuffixedMediumTimeHistogram(
- "ServiceWorker.StartWorker.Time",
+ name,
StartSituationToSuffix(start_situation) + EventTypeToSuffix(purpose),
time);
} else {
- UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartNewWorker.Time", time);
+ UMA_HISTOGRAM_MEDIUM_TIMES(name, time);
}
}
-void ServiceWorkerMetrics::RecordActivatedWorkerPreparationTimeForMainFrame(
+void ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame(
base::TimeDelta time,
EmbeddedWorkerStatus initial_worker_status,
- StartSituation start_situation) {
- std::string name =
+ StartSituation start_situation,
+ bool did_navigation_preload) {
+ // Record the worker preparation type.
+ WorkerPreparationType preparation =
+ GetWorkerPreparationType(initial_worker_status, start_situation);
+ const std::string kTypeName =
+ "ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type";
+ UMA_HISTOGRAM_ENUMERATION(kTypeName, static_cast<int>(preparation),
+ static_cast<int>(WorkerPreparationType::NUM_TYPES));
+ if (did_navigation_preload) {
+ UMA_HISTOGRAM_ENUMERATION(
+ kTypeName + "_NavigationPreloadEnabled", static_cast<int>(preparation),
+ static_cast<int>(WorkerPreparationType::NUM_TYPES));
+ }
+
+ // Record the preparation time.
+ const std::string kTimeName =
"ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time";
- UMA_HISTOGRAM_MEDIUM_TIMES(name, time);
+ UMA_HISTOGRAM_MEDIUM_TIMES(kTimeName, time);
+
+ // Record the preparation time using the worker preparation suffix.
RecordSuffixedMediumTimeHistogram(
- name, GetWorkerPreparationSuffix(initial_worker_status, start_situation),
- time);
+ kTimeName, GetWorkerPreparationSuffix(preparation), time);
+
+ // Record the preparation time using the navigation preload suffix.
+ if (did_navigation_preload) {
+ UMA_HISTOGRAM_MEDIUM_TIMES(kTimeName + "_NavigationPreloadEnabled", time);
+ // We're mostly interested in when the worker needed to start up. To avoid
+ // using too much memory, just log the the common case of startup in an
+ // existing process.
+ if (preparation == WorkerPreparationType::START_IN_EXISTING_PROCESS) {
+ UMA_HISTOGRAM_MEDIUM_TIMES(kTimeName +
+ GetWorkerPreparationSuffix(preparation) +
+ "_NavigationPreloadEnabled",
+ time);
+ }
+ }
}
void ServiceWorkerMetrics::RecordWorkerStopped(StopStatus status) {

Powered by Google App Engine
This is Rietveld 408576698