blob: ce13125e84b3d72e00083150c00d353fe128a0a9 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/background_sync/background_sync_metrics.h"
#include "base/metrics/histogram_functions.h"
namespace {
content::BackgroundSyncMetrics::ResultPattern EventResultToResultPattern(
bool success,
bool finished_in_foreground) {
if (success) {
return finished_in_foreground ? content::BackgroundSyncMetrics::
RESULT_PATTERN_SUCCESS_FOREGROUND
: content::BackgroundSyncMetrics::
RESULT_PATTERN_SUCCESS_BACKGROUND;
}
return finished_in_foreground
? content::BackgroundSyncMetrics::RESULT_PATTERN_FAILED_FOREGROUND
: content::BackgroundSyncMetrics::RESULT_PATTERN_FAILED_BACKGROUND;
}
const std::string GetBackgroundSyncSuffix(
blink::mojom::BackgroundSyncType sync_type) {
if (sync_type == blink::mojom::BackgroundSyncType::ONE_SHOT)
return "OneShot";
else
return "Periodic";
}
const std::string GetBackgroundSyncPrefix(
blink::mojom::BackgroundSyncType sync_type) {
if (sync_type == blink::mojom::BackgroundSyncType::ONE_SHOT)
return "";
else
return "Periodic";
}
} // namespace
namespace content {
// static
void BackgroundSyncMetrics::RecordEventStarted(
blink::mojom::BackgroundSyncType sync_type,
bool started_in_foreground) {
base::UmaHistogramBoolean("BackgroundSync.Event." +
GetBackgroundSyncSuffix(sync_type) +
"StartedInForeground",
started_in_foreground);
}
// static
void BackgroundSyncMetrics::RecordRegistrationComplete(
bool event_succeeded,
int num_attempts_required) {
base::UmaHistogramBoolean(
"BackgroundSync.Registration.OneShot.EventSucceededAtCompletion",
event_succeeded);
if (!event_succeeded)
return;
base::UmaHistogramExactLinear(
"BackgroundSync.Registration.OneShot.NumAttemptsForSuccessfulEvent",
num_attempts_required, 50);
}
// static
void BackgroundSyncMetrics::RecordEventResult(
blink::mojom::BackgroundSyncType sync_type,
bool success,
bool finished_in_foreground) {
base::UmaHistogramEnumeration(
"BackgroundSync.Event." + GetBackgroundSyncSuffix(sync_type) +
"ResultPattern",
EventResultToResultPattern(success, finished_in_foreground),
static_cast<ResultPattern>(RESULT_PATTERN_MAX + 1));
}
// static
void BackgroundSyncMetrics::RecordBatchSyncEventComplete(
blink::mojom::BackgroundSyncType sync_type,
const base::TimeDelta& time,
bool from_wakeup_task,
int number_of_batched_sync_events) {
// The total batch handling time should be under 5 minutes; we'll record up to
// 6 minutes, to be safe.
base::UmaHistogramCustomTimes(
GetBackgroundSyncPrefix(sync_type) + "BackgroundSync.Event.Time", time,
/* min= */ base::Milliseconds(10),
/* max= */ base::Minutes(6),
/* buckets= */ 50);
base::UmaHistogramCounts100(
GetBackgroundSyncPrefix(sync_type) + "BackgroundSync.Event.BatchSize",
number_of_batched_sync_events);
base::UmaHistogramBoolean(GetBackgroundSyncPrefix(sync_type) +
"BackgroundSync.Event.FromWakeupTask",
from_wakeup_task);
}
// static
void BackgroundSyncMetrics::CountRegisterSuccess(
blink::mojom::BackgroundSyncType sync_type,
int64_t min_interval_ms,
RegistrationCouldFire registration_could_fire,
RegistrationIsDuplicate registration_is_duplicate) {
base::UmaHistogramEnumeration(
"BackgroundSync.Registration." + GetBackgroundSyncSuffix(sync_type),
BACKGROUND_SYNC_STATUS_OK,
static_cast<BackgroundSyncStatus>(BACKGROUND_SYNC_STATUS_MAX + 1));
if (sync_type == blink::mojom::BackgroundSyncType::ONE_SHOT) {
base::UmaHistogramBoolean(
"BackgroundSync.Registration.OneShot.CouldFire",
registration_could_fire == REGISTRATION_COULD_FIRE);
} else {
DCHECK_GE(min_interval_ms, 0);
base::UmaHistogramCounts10M(
"BackgroundSync.Registration.Periodic.MinInterval",
min_interval_ms / 1000);
}
base::UmaHistogramBoolean(
"BackgroundSync.Registration." + GetBackgroundSyncSuffix(sync_type) +
".IsDuplicate",
registration_is_duplicate == REGISTRATION_IS_DUPLICATE);
}
// static
void BackgroundSyncMetrics::CountRegisterFailure(
blink::mojom::BackgroundSyncType sync_type,
BackgroundSyncStatus result) {
base::UmaHistogramEnumeration(
std::string("BackgroundSync.Registration.") +
GetBackgroundSyncSuffix(sync_type),
result,
static_cast<BackgroundSyncStatus>(BACKGROUND_SYNC_STATUS_MAX + 1));
}
// static
void BackgroundSyncMetrics::CountUnregisterPeriodicSync(
BackgroundSyncStatus status) {
base::UmaHistogramEnumeration(
"BackgroundSync.Unregistration.Periodic", status,
static_cast<BackgroundSyncStatus>(BACKGROUND_SYNC_STATUS_MAX + 1));
}
// static
void BackgroundSyncMetrics::RecordEventsFiredFromWakeupTask(
blink::mojom::BackgroundSyncType sync_type,
bool fired_events) {
base::UmaHistogramBoolean("BackgroundSync.WakeupTaskFiredEvents." +
GetBackgroundSyncSuffix(sync_type),
fired_events);
}
} // namespace content