| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef COMPONENTS_METRICS_METRICS_ROTATION_SCHEDULER_H_ |
| #define COMPONENTS_METRICS_METRICS_ROTATION_SCHEDULER_H_ |
| |
| #include "base/callback.h" |
| #include "base/macros.h" |
| #include "base/time/time.h" |
| #include "components/metrics/metrics_scheduler.h" |
| |
| namespace metrics { |
| |
| // Scheduler task to drive a MetricsService object's uploading. |
| class MetricsRotationScheduler : public MetricsScheduler { |
| public: |
| // Creates MetricsRotationScheduler object with the given |rotation_callback| |
| // callback to call when log rotation should happen and |interval_callback| |
| // to determine the interval between rotations in steady state. |
| // |rotation_callback| must arrange to call RotationFinished on completion. |
| MetricsRotationScheduler( |
| const base::Closure& rotation_callback, |
| const base::Callback<base::TimeDelta(void)>& interval_callback); |
| ~MetricsRotationScheduler() override; |
| |
| // Callback from MetricsService when the startup init task has completed. |
| void InitTaskComplete(); |
| |
| // Callback from MetricsService when a triggered rotation finishes. |
| void RotationFinished(); |
| |
| protected: |
| enum InitSequence { |
| TIMER_FIRED_FIRST, |
| INIT_TASK_COMPLETED_FIRST, |
| INIT_SEQUENCE_ENUM_SIZE, |
| }; |
| |
| private: |
| // Record the init sequence order histogram. |
| virtual void LogMetricsInitSequence(InitSequence sequence); |
| |
| // MetricsScheduler: |
| void TriggerTask() override; |
| |
| // Whether the InitTaskComplete() callback has been called. |
| bool init_task_complete_; |
| |
| // Whether the initial scheduled upload timer has fired before the init task |
| // has been completed. |
| bool waiting_for_init_task_complete_; |
| |
| // Callback function used to get the standard upload time. |
| base::Callback<base::TimeDelta(void)> upload_interval_callback_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MetricsRotationScheduler); |
| }; |
| |
| } // namespace metrics |
| |
| #endif // COMPONENTS_METRICS_METRICS_ROTATION_SCHEDULER_H_ |