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