xref: /aosp_15_r20/external/cronet/components/metrics/metrics_rotation_scheduler.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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