1*6777b538SAndroid Build Coastguard Worker // Copyright 2017 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker
5*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_rotation_scheduler.h"
6*6777b538SAndroid Build Coastguard Worker
7*6777b538SAndroid Build Coastguard Worker #include "base/metrics/histogram_macros.h"
8*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
9*6777b538SAndroid Build Coastguard Worker
10*6777b538SAndroid Build Coastguard Worker namespace metrics {
11*6777b538SAndroid Build Coastguard Worker
MetricsRotationScheduler(const base::RepeatingClosure & upload_callback,const base::RepeatingCallback<base::TimeDelta (void)> & upload_interval_callback,bool fast_startup_for_testing)12*6777b538SAndroid Build Coastguard Worker MetricsRotationScheduler::MetricsRotationScheduler(
13*6777b538SAndroid Build Coastguard Worker const base::RepeatingClosure& upload_callback,
14*6777b538SAndroid Build Coastguard Worker const base::RepeatingCallback<base::TimeDelta(void)>&
15*6777b538SAndroid Build Coastguard Worker upload_interval_callback,
16*6777b538SAndroid Build Coastguard Worker bool fast_startup_for_testing)
17*6777b538SAndroid Build Coastguard Worker : MetricsScheduler(upload_callback, fast_startup_for_testing),
18*6777b538SAndroid Build Coastguard Worker init_task_complete_(false),
19*6777b538SAndroid Build Coastguard Worker waiting_for_init_task_complete_(false),
20*6777b538SAndroid Build Coastguard Worker upload_interval_callback_(upload_interval_callback) {}
21*6777b538SAndroid Build Coastguard Worker
~MetricsRotationScheduler()22*6777b538SAndroid Build Coastguard Worker MetricsRotationScheduler::~MetricsRotationScheduler() {}
23*6777b538SAndroid Build Coastguard Worker
InitTaskComplete()24*6777b538SAndroid Build Coastguard Worker void MetricsRotationScheduler::InitTaskComplete() {
25*6777b538SAndroid Build Coastguard Worker DCHECK(!init_task_complete_);
26*6777b538SAndroid Build Coastguard Worker init_task_complete_ = true;
27*6777b538SAndroid Build Coastguard Worker if (waiting_for_init_task_complete_) {
28*6777b538SAndroid Build Coastguard Worker waiting_for_init_task_complete_ = false;
29*6777b538SAndroid Build Coastguard Worker TriggerTask();
30*6777b538SAndroid Build Coastguard Worker } else {
31*6777b538SAndroid Build Coastguard Worker LogMetricsInitSequence(INIT_TASK_COMPLETED_FIRST);
32*6777b538SAndroid Build Coastguard Worker }
33*6777b538SAndroid Build Coastguard Worker }
34*6777b538SAndroid Build Coastguard Worker
RotationFinished()35*6777b538SAndroid Build Coastguard Worker void MetricsRotationScheduler::RotationFinished() {
36*6777b538SAndroid Build Coastguard Worker TaskDone(upload_interval_callback_.Run());
37*6777b538SAndroid Build Coastguard Worker }
38*6777b538SAndroid Build Coastguard Worker
LogMetricsInitSequence(InitSequence sequence)39*6777b538SAndroid Build Coastguard Worker void MetricsRotationScheduler::LogMetricsInitSequence(InitSequence sequence) {
40*6777b538SAndroid Build Coastguard Worker UMA_HISTOGRAM_ENUMERATION("UMA.InitSequence", sequence,
41*6777b538SAndroid Build Coastguard Worker INIT_SEQUENCE_ENUM_SIZE);
42*6777b538SAndroid Build Coastguard Worker }
43*6777b538SAndroid Build Coastguard Worker
TriggerTask()44*6777b538SAndroid Build Coastguard Worker void MetricsRotationScheduler::TriggerTask() {
45*6777b538SAndroid Build Coastguard Worker // If the timer fired before the init task has completed, don't trigger the
46*6777b538SAndroid Build Coastguard Worker // upload yet - wait for the init task to complete and do it then.
47*6777b538SAndroid Build Coastguard Worker if (!init_task_complete_) {
48*6777b538SAndroid Build Coastguard Worker LogMetricsInitSequence(TIMER_FIRED_FIRST);
49*6777b538SAndroid Build Coastguard Worker waiting_for_init_task_complete_ = true;
50*6777b538SAndroid Build Coastguard Worker return;
51*6777b538SAndroid Build Coastguard Worker }
52*6777b538SAndroid Build Coastguard Worker MetricsScheduler::TriggerTask();
53*6777b538SAndroid Build Coastguard Worker }
54*6777b538SAndroid Build Coastguard Worker
55*6777b538SAndroid Build Coastguard Worker } // namespace metrics
56