56 lines
1.7 KiB
C++
56 lines
1.7 KiB
C++
// Copyright 2017 The Chromium Authors
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#include "components/metrics/metrics_rotation_scheduler.h"
|
|
|
|
#include "base/metrics/histogram_macros.h"
|
|
#include "build/build_config.h"
|
|
|
|
namespace metrics {
|
|
|
|
MetricsRotationScheduler::MetricsRotationScheduler(
|
|
const base::RepeatingClosure& upload_callback,
|
|
const base::RepeatingCallback<base::TimeDelta(void)>&
|
|
upload_interval_callback,
|
|
bool fast_startup_for_testing)
|
|
: MetricsScheduler(upload_callback, fast_startup_for_testing),
|
|
init_task_complete_(false),
|
|
waiting_for_init_task_complete_(false),
|
|
upload_interval_callback_(upload_interval_callback) {}
|
|
|
|
MetricsRotationScheduler::~MetricsRotationScheduler() {}
|
|
|
|
void MetricsRotationScheduler::InitTaskComplete() {
|
|
DCHECK(!init_task_complete_);
|
|
init_task_complete_ = true;
|
|
if (waiting_for_init_task_complete_) {
|
|
waiting_for_init_task_complete_ = false;
|
|
TriggerTask();
|
|
} else {
|
|
LogMetricsInitSequence(INIT_TASK_COMPLETED_FIRST);
|
|
}
|
|
}
|
|
|
|
void MetricsRotationScheduler::RotationFinished() {
|
|
TaskDone(upload_interval_callback_.Run());
|
|
}
|
|
|
|
void MetricsRotationScheduler::LogMetricsInitSequence(InitSequence sequence) {
|
|
UMA_HISTOGRAM_ENUMERATION("UMA.InitSequence", sequence,
|
|
INIT_SEQUENCE_ENUM_SIZE);
|
|
}
|
|
|
|
void MetricsRotationScheduler::TriggerTask() {
|
|
// If the timer fired before the init task has completed, don't trigger the
|
|
// upload yet - wait for the init task to complete and do it then.
|
|
if (!init_task_complete_) {
|
|
LogMetricsInitSequence(TIMER_FIRED_FIRST);
|
|
waiting_for_init_task_complete_ = true;
|
|
return;
|
|
}
|
|
MetricsScheduler::TriggerTask();
|
|
}
|
|
|
|
} // namespace metrics
|