xref: /aosp_15_r20/external/cronet/components/metrics/metrics_rotation_scheduler.h (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 #ifndef COMPONENTS_METRICS_METRICS_ROTATION_SCHEDULER_H_
6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_METRICS_ROTATION_SCHEDULER_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
10*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_scheduler.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace metrics {
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker // Scheduler task to drive a MetricsService object's uploading.
15*6777b538SAndroid Build Coastguard Worker class MetricsRotationScheduler : public MetricsScheduler {
16*6777b538SAndroid Build Coastguard Worker  public:
17*6777b538SAndroid Build Coastguard Worker   // Creates MetricsRotationScheduler object with the given |rotation_callback|
18*6777b538SAndroid Build Coastguard Worker   // callback to call when log rotation should happen and |interval_callback|
19*6777b538SAndroid Build Coastguard Worker   // to determine the interval between rotations in steady state.
20*6777b538SAndroid Build Coastguard Worker   // |rotation_callback| must arrange to call RotationFinished on completion.
21*6777b538SAndroid Build Coastguard Worker   MetricsRotationScheduler(
22*6777b538SAndroid Build Coastguard Worker       const base::RepeatingClosure& rotation_callback,
23*6777b538SAndroid Build Coastguard Worker       const base::RepeatingCallback<base::TimeDelta(void)>& interval_callback,
24*6777b538SAndroid Build Coastguard Worker       bool fast_startup_for_testing);
25*6777b538SAndroid Build Coastguard Worker 
26*6777b538SAndroid Build Coastguard Worker   MetricsRotationScheduler(const MetricsRotationScheduler&) = delete;
27*6777b538SAndroid Build Coastguard Worker   MetricsRotationScheduler& operator=(const MetricsRotationScheduler&) = delete;
28*6777b538SAndroid Build Coastguard Worker 
29*6777b538SAndroid Build Coastguard Worker   ~MetricsRotationScheduler() override;
30*6777b538SAndroid Build Coastguard Worker 
31*6777b538SAndroid Build Coastguard Worker   // Callback from MetricsService when the startup init task has completed.
32*6777b538SAndroid Build Coastguard Worker   void InitTaskComplete();
33*6777b538SAndroid Build Coastguard Worker 
34*6777b538SAndroid Build Coastguard Worker   // Callback from MetricsService when a triggered rotation finishes.
35*6777b538SAndroid Build Coastguard Worker   void RotationFinished();
36*6777b538SAndroid Build Coastguard Worker 
37*6777b538SAndroid Build Coastguard Worker  protected:
38*6777b538SAndroid Build Coastguard Worker   enum InitSequence {
39*6777b538SAndroid Build Coastguard Worker     TIMER_FIRED_FIRST,
40*6777b538SAndroid Build Coastguard Worker     INIT_TASK_COMPLETED_FIRST,
41*6777b538SAndroid Build Coastguard Worker     INIT_SEQUENCE_ENUM_SIZE,
42*6777b538SAndroid Build Coastguard Worker   };
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker  private:
45*6777b538SAndroid Build Coastguard Worker   // Record the init sequence order histogram.
46*6777b538SAndroid Build Coastguard Worker   virtual void LogMetricsInitSequence(InitSequence sequence);
47*6777b538SAndroid Build Coastguard Worker 
48*6777b538SAndroid Build Coastguard Worker   // MetricsScheduler:
49*6777b538SAndroid Build Coastguard Worker   void TriggerTask() override;
50*6777b538SAndroid Build Coastguard Worker 
51*6777b538SAndroid Build Coastguard Worker   // Whether the InitTaskComplete() callback has been called.
52*6777b538SAndroid Build Coastguard Worker   bool init_task_complete_;
53*6777b538SAndroid Build Coastguard Worker 
54*6777b538SAndroid Build Coastguard Worker   // Whether the initial scheduled upload timer has fired before the init task
55*6777b538SAndroid Build Coastguard Worker   // has been completed.
56*6777b538SAndroid Build Coastguard Worker   bool waiting_for_init_task_complete_;
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker   // Callback function used to get the standard upload time.
59*6777b538SAndroid Build Coastguard Worker   base::RepeatingCallback<base::TimeDelta(void)> upload_interval_callback_;
60*6777b538SAndroid Build Coastguard Worker };
61*6777b538SAndroid Build Coastguard Worker 
62*6777b538SAndroid Build Coastguard Worker }  // namespace metrics
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker #endif  // COMPONENTS_METRICS_METRICS_ROTATION_SCHEDULER_H_
65