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 5095b53b9877f5d8cb2e2fb7e6f63995efc3db61..36a524529cd40cdec84bfe57962f23d29d16f522 100644 |
--- a/content/browser/service_worker/service_worker_metrics.cc |
+++ b/content/browser/service_worker/service_worker_metrics.cc |
@@ -72,6 +72,33 @@ std::string EventTypeToSuffix(ServiceWorkerMetrics::EventType event_type) { |
return "_UNKNOWN"; |
} |
+std::string GetWorkerPreparationSuffix( |
+ EmbeddedWorkerStatus initial_worker_status, |
+ ServiceWorkerMetrics::StartSituation start_situation) { |
+ 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 EmbeddedWorkerStatus::STARTING: |
+ return "_StartingWorker"; |
+ case EmbeddedWorkerStatus::RUNNING: |
+ return "_RunningWorker"; |
+ case EmbeddedWorkerStatus::STOPPING: |
+ return "_StoppingWorker"; |
+ } |
+ NOTREACHED(); |
+ return "_UNKNOWN"; |
+} |
+ |
// Use this for histograms with dynamically generated names, which |
// otherwise can't use the UMA_HISTOGRAM macro without code duplication. |
void RecordSuffixedTimeHistogram(const std::string& name, |
@@ -288,6 +315,18 @@ void ServiceWorkerMetrics::RecordStartWorkerTime(base::TimeDelta time, |
} |
} |
+void ServiceWorkerMetrics::RecordActivatedWorkerPreparationTimeForMainFrame( |
+ base::TimeDelta time, |
+ EmbeddedWorkerStatus initial_worker_status, |
+ StartSituation start_situation) { |
+ std::string name = |
+ "ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time"; |
+ UMA_HISTOGRAM_MEDIUM_TIMES(name, time); |
+ RecordSuffixedTimeHistogram( |
+ name, GetWorkerPreparationSuffix(initial_worker_status, start_situation), |
+ time); |
+} |
+ |
void ServiceWorkerMetrics::RecordWorkerStopped(StopStatus status) { |
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.WorkerStopped", |
static_cast<int>(status), |