Commit 64263b57 authored by Daniel Cheng's avatar Daniel Cheng Committed by Commit Bot

More simplification in service worker metrics

- Use the helpers in histogram_functions.h instead of using custom
  versions.
- Use kMaxValue version of UMA_HISTOGRAM_ENUM in one more place
- Return const char* for enum stringification helpers to reduce number
  of temporary strings.
- Use StrCat() to build dynamic histogram names to reduce number of
  temporary strings.

  Bug: none

Change-Id: I720d11ad16c245f3ea59d55c2b75af8914eea7e8
Reviewed-on: https://chromium-review.googlesource.com/1174014
Commit-Queue: Daniel Cheng <dcheng@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Reviewed-by: default avatarMatt Falkenhagen <falken@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582877}
parent efb957f2
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
#include "base/metrics/histogram_functions.h" #include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h" #include "base/metrics/histogram_macros.h"
#include "base/strings/strcat.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "base/time/time.h" #include "base/time/time.h"
#include "content/browser/service_worker/embedded_worker_status.h" #include "content/browser/service_worker/embedded_worker_status.h"
...@@ -22,7 +23,7 @@ namespace content { ...@@ -22,7 +23,7 @@ namespace content {
namespace { namespace {
std::string StartSituationToSuffix( const char* StartSituationToSuffix(
ServiceWorkerMetrics::StartSituation situation) { ServiceWorkerMetrics::StartSituation situation) {
// Don't change these returned strings. They are written (in hashed form) into // Don't change these returned strings. They are written (in hashed form) into
// logs. // logs.
...@@ -44,18 +45,28 @@ std::string StartSituationToSuffix( ...@@ -44,18 +45,28 @@ std::string StartSituationToSuffix(
} }
// TODO(falken): Remove this when the associated UMA are removed. // TODO(falken): Remove this when the associated UMA are removed.
std::string StartSituationToDeprecatedSuffix( const char* StartSituationToDeprecatedSuffix(
ServiceWorkerMetrics::StartSituation situation) { ServiceWorkerMetrics::StartSituation situation) {
// Don't change this returned string. It is written (in hashed form) into // Don't change this returned string. It is written (in hashed form) into
// logs. // logs.
std::string suffix = StartSituationToSuffix(situation); switch (situation) {
// Replace '.' separator with '_'. case ServiceWorkerMetrics::StartSituation::UNKNOWN:
DCHECK(suffix.length() > 1 && suffix[0] == '.'); NOTREACHED();
suffix[0] = '_'; return "_Unknown";
return suffix; case ServiceWorkerMetrics::StartSituation::DURING_STARTUP:
return "_DuringStartup";
case ServiceWorkerMetrics::StartSituation::NEW_PROCESS:
return "_NewProcess";
case ServiceWorkerMetrics::StartSituation::EXISTING_UNREADY_PROCESS:
return "_ExistingUnreadyProcess";
case ServiceWorkerMetrics::StartSituation::EXISTING_READY_PROCESS:
return "_ExistingReadyProcess";
}
NOTREACHED() << static_cast<int>(situation);
return "_Unknown";
} }
std::string EventTypeToSuffix(ServiceWorkerMetrics::EventType event_type) { const char* EventTypeToSuffix(ServiceWorkerMetrics::EventType event_type) {
// Don't change these returned strings. They are written (in hashed form) into // Don't change these returned strings. They are written (in hashed form) into
// logs. // logs.
switch (event_type) { switch (event_type) {
...@@ -147,7 +158,7 @@ ServiceWorkerMetrics::WorkerPreparationType GetWorkerPreparationType( ...@@ -147,7 +158,7 @@ ServiceWorkerMetrics::WorkerPreparationType GetWorkerPreparationType(
return Preparation::UNKNOWN; return Preparation::UNKNOWN;
} }
std::string GetWorkerPreparationSuffix( const char* GetWorkerPreparationSuffix(
ServiceWorkerMetrics::WorkerPreparationType status) { ServiceWorkerMetrics::WorkerPreparationType status) {
using Preparation = ServiceWorkerMetrics::WorkerPreparationType; using Preparation = ServiceWorkerMetrics::WorkerPreparationType;
switch (status) { switch (status) {
...@@ -172,44 +183,6 @@ std::string GetWorkerPreparationSuffix( ...@@ -172,44 +183,6 @@ std::string GetWorkerPreparationSuffix(
return "_UNKNOWN"; 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,
const std::string& suffix,
base::TimeDelta sample) {
const std::string name_with_suffix = name + suffix;
// This unrolls UMA_HISTOGRAM_TIMES.
base::HistogramBase* histogram_pointer = base::Histogram::FactoryTimeGet(
name_with_suffix, base::TimeDelta::FromMilliseconds(1),
base::TimeDelta::FromSeconds(10), 50,
base::HistogramBase::kUmaTargetedHistogramFlag);
histogram_pointer->AddTime(sample);
}
// Use this for histograms with dynamically generated names, which
// otherwise can't use the UMA_MEDIUM_HISTOGRAM macro without code duplication.
void RecordSuffixedMediumTimeHistogram(const std::string& name,
const std::string& suffix,
base::TimeDelta sample) {
const std::string name_with_suffix = name + suffix;
// This unrolls UMA_HISTOGRAM_MEDIUM_TIMES.
base::HistogramBase* histogram_pointer = base::Histogram::FactoryTimeGet(
name_with_suffix, base::TimeDelta::FromMilliseconds(10),
base::TimeDelta::FromMinutes(3), 50,
base::HistogramBase::kUmaTargetedHistogramFlag);
histogram_pointer->AddTime(sample);
}
// Use this for histograms with dynamically generated names, which
// otherwise can't use the UMA_HISTOGRAM macro without code duplication.
void RecordHistogramEnum(const std::string& name, int value, int max_value) {
// This unrolls UMA_HISTOGRAM_ENUMERATION.
base::HistogramBase* histogram_pointer = base::LinearHistogram::FactoryGet(
name, 1, max_value, max_value + 1,
base::HistogramBase::kUmaTargetedHistogramFlag);
histogram_pointer->Add(value);
}
void RecordURLMetricOnUI(const std::string& metric_name, const GURL& url) { void RecordURLMetricOnUI(const std::string& metric_name, const GURL& url) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
GetContentClient()->browser()->RecordURLMetric(metric_name, url); GetContentClient()->browser()->RecordURLMetric(metric_name, url);
...@@ -328,7 +301,7 @@ ServiceWorkerMetrics::Site ServiceWorkerMetrics::SiteFromURL(const GURL& url) { ...@@ -328,7 +301,7 @@ ServiceWorkerMetrics::Site ServiceWorkerMetrics::SiteFromURL(const GURL& url) {
return ServiceWorkerMetrics::Site::NEW_TAB_PAGE; return ServiceWorkerMetrics::Site::NEW_TAB_PAGE;
} }
const std::string host = url.host(); const base::StringPiece host = url.host_piece();
if (host == "plus.google.com") if (host == "plus.google.com")
return ServiceWorkerMetrics::Site::PLUS; return ServiceWorkerMetrics::Site::PLUS;
if (host == "inbox.google.com") if (host == "inbox.google.com")
...@@ -425,11 +398,10 @@ void ServiceWorkerMetrics::RecordStartWorkerStatus( ...@@ -425,11 +398,10 @@ void ServiceWorkerMetrics::RecordStartWorkerStatus(
} }
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Status", status); UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Status", status);
RecordHistogramEnum( base::UmaHistogramEnumeration(
std::string("ServiceWorker.StartWorker.StatusByPurpose") + base::StrCat({"ServiceWorker.StartWorker.StatusByPurpose",
EventTypeToSuffix(purpose), EventTypeToSuffix(purpose)}),
static_cast<uint32_t>(status), status);
static_cast<uint32_t>(blink::ServiceWorkerStatusCode::kMaxValue));
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Purpose", purpose); UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Purpose", purpose);
if (status == blink::ServiceWorkerStatusCode::kErrorTimeout) { if (status == blink::ServiceWorkerStatusCode::kErrorTimeout) {
UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Timeout.StartPurpose", UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartWorker.Timeout.StartPurpose",
...@@ -450,13 +422,14 @@ void ServiceWorkerMetrics::RecordStartWorkerTime(base::TimeDelta time, ...@@ -450,13 +422,14 @@ void ServiceWorkerMetrics::RecordStartWorkerTime(base::TimeDelta time,
EventType purpose) { EventType purpose) {
if (is_installed) { if (is_installed) {
UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartWorker.Time", time); UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartWorker.Time", time);
RecordSuffixedMediumTimeHistogram( base::UmaHistogramMediumTimes(
"ServiceWorker.StartWorker.Time", base::StrCat({"ServiceWorker.StartWorker.Time",
StartSituationToDeprecatedSuffix(start_situation), time); StartSituationToDeprecatedSuffix(start_situation)}),
RecordSuffixedMediumTimeHistogram( time);
"ServiceWorker.StartWorker.Time", base::UmaHistogramMediumTimes(
StartSituationToDeprecatedSuffix(start_situation) + base::StrCat({"ServiceWorker.StartWorker.Time",
EventTypeToSuffix(purpose), StartSituationToDeprecatedSuffix(start_situation),
EventTypeToSuffix(purpose)}),
time); time);
} else { } else {
UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartNewWorker.Time", time); UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartNewWorker.Time", time);
...@@ -477,12 +450,11 @@ void ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame( ...@@ -477,12 +450,11 @@ void ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame(
std::string suffix = std::string suffix =
GetContentClient()->browser()->GetMetricSuffixForURL(url); GetContentClient()->browser()->GetMetricSuffixForURL(url);
if (!suffix.empty()) { if (!suffix.empty()) {
RecordHistogramEnum( base::UmaHistogramEnumeration(
std::string( base::StrCat(
"ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type.") + {"ServiceWorker.ActivatedWorkerPreparationForMainFrame.Type.",
suffix, suffix}),
static_cast<int>(preparation), preparation);
static_cast<int>(WorkerPreparationType::kMaxValue));
} }
if (did_navigation_preload) { if (did_navigation_preload) {
...@@ -507,9 +479,10 @@ void ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame( ...@@ -507,9 +479,10 @@ void ServiceWorkerMetrics::RecordActivatedWorkerPreparationForMainFrame(
"ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time", time); "ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time", time);
// Record the preparation time using the worker preparation suffix. // Record the preparation time using the worker preparation suffix.
RecordSuffixedMediumTimeHistogram( base::UmaHistogramMediumTimes(
"ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time", base::StrCat({"ServiceWorker.ActivatedWorkerPreparationForMainFrame.Time",
GetWorkerPreparationSuffix(preparation), time); GetWorkerPreparationSuffix(preparation)}),
time);
// Record the preparation time using the navigation preload suffix. // Record the preparation time using the navigation preload suffix.
if (did_navigation_preload) { if (did_navigation_preload) {
...@@ -555,9 +528,10 @@ void ServiceWorkerMetrics::RecordInstallEventStatus( ...@@ -555,9 +528,10 @@ void ServiceWorkerMetrics::RecordInstallEventStatus(
void ServiceWorkerMetrics::RecordEventDispatchingDelay(EventType event_type, void ServiceWorkerMetrics::RecordEventDispatchingDelay(EventType event_type,
base::TimeDelta time) { base::TimeDelta time) {
const std::string name = "ServiceWorker.EventDispatchingDelay"; static constexpr char kName[] = "ServiceWorker.EventDispatchingDelay";
UMA_HISTOGRAM_TIMES(name, time); UMA_HISTOGRAM_TIMES(kName, time);
RecordSuffixedTimeHistogram(name, EventTypeToSuffix(event_type), time); base::UmaHistogramTimes(base::StrCat({kName, EventTypeToSuffix(event_type)}),
time);
} }
void ServiceWorkerMetrics::RecordEventTimeout(EventType event) { void ServiceWorkerMetrics::RecordEventTimeout(EventType event) {
...@@ -734,9 +708,10 @@ void ServiceWorkerMetrics::RecordStartWorkerTiming(const StartTimes& times, ...@@ -734,9 +708,10 @@ void ServiceWorkerMetrics::RecordStartWorkerTiming(const StartTimes& times,
// Total duration. // Total duration.
UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartTiming.Duration", UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartTiming.Duration",
times.local_end - times.local_start); times.local_end - times.local_start);
RecordSuffixedMediumTimeHistogram("ServiceWorker.StartTiming.Duration", base::UmaHistogramMediumTimes(
StartSituationToSuffix(situation), base::StrCat({"ServiceWorker.StartTiming.Duration",
times.local_end - times.local_start); StartSituationToSuffix(situation)}),
times.local_end - times.local_start);
// SentStartWorker milestone. // SentStartWorker milestone.
UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartTiming.StartToSentStartWorker", UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.StartTiming.StartToSentStartWorker",
...@@ -928,9 +903,8 @@ void ServiceWorkerMetrics::RecordUninstalledScriptImport(const GURL& url) { ...@@ -928,9 +903,8 @@ void ServiceWorkerMetrics::RecordUninstalledScriptImport(const GURL& url) {
void ServiceWorkerMetrics::RecordStartServiceWorkerForNavigationHintResult( void ServiceWorkerMetrics::RecordStartServiceWorkerForNavigationHintResult(
StartServiceWorkerForNavigationHintResult result) { StartServiceWorkerForNavigationHintResult result) {
UMA_HISTOGRAM_ENUMERATION( UMA_HISTOGRAM_ENUMERATION("ServiceWorker.StartForNavigationHint.Result",
"ServiceWorker.StartForNavigationHint.Result", result, result);
StartServiceWorkerForNavigationHintResult::NUM_TYPES);
} }
void ServiceWorkerMetrics::RecordRegisteredOriginCount(size_t origin_count) { void ServiceWorkerMetrics::RecordRegisteredOriginCount(size_t origin_count) {
......
...@@ -39,7 +39,7 @@ enum class StartServiceWorkerForNavigationHintResult { ...@@ -39,7 +39,7 @@ enum class StartServiceWorkerForNavigationHintResult {
// Something failed. // Something failed.
FAILED = 5, FAILED = 5,
// Add new result to record here. // Add new result to record here.
NUM_TYPES kMaxValue = FAILED,
}; };
// Represents the per-StoragePartition service worker data. // Represents the per-StoragePartition service worker data.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment