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..eaf8071ffa4f87e00f6e4352b14509e80400d36f 100644 |
--- a/content/browser/service_worker/service_worker_metrics.cc |
+++ b/content/browser/service_worker/service_worker_metrics.cc |
@@ -10,6 +10,7 @@ |
#include "base/metrics/histogram_macros.h" |
#include "base/metrics/sparse_histogram.h" |
#include "base/strings/string_util.h" |
+#include "content/browser/service_worker/embedded_worker_status.h" |
#include "content/common/service_worker/service_worker_types.h" |
#include "content/public/browser/browser_thread.h" |
#include "content/public/browser/content_browser_client.h" |
@@ -72,6 +73,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 +316,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), |