| // Copyright 2017 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef COMPONENTS_METRICS_METRICS_UPLOAD_SCHEDULER_H_ | |
| #define COMPONENTS_METRICS_METRICS_UPLOAD_SCHEDULER_H_ | |
| #include "base/functional/callback.h" | |
| #include "base/time/time.h" | |
| #include "components/metrics/metrics_scheduler.h" | |
| namespace metrics { | |
| // Scheduler task to drive a ReportingService object's uploading. | |
| class MetricsUploadScheduler : public MetricsScheduler { | |
| public: | |
| // Creates MetricsUploadScheduler object with the given |upload_callback| | |
| // callback to call when uploading should happen. The callback must | |
| // arrange to call either UploadFinished or UploadCancelled on completion. | |
| MetricsUploadScheduler(const base::RepeatingClosure& upload_callback, | |
| bool fast_startup); | |
| MetricsUploadScheduler(const MetricsUploadScheduler&) = delete; | |
| MetricsUploadScheduler& operator=(const MetricsUploadScheduler&) = delete; | |
| ~MetricsUploadScheduler() override; | |
| // Callback from MetricsService when a triggered upload finishes. | |
| void UploadFinished(bool server_is_healthy); | |
| // Callback from MetricsService when an upload is cancelled. | |
| // Also stops the scheduler. | |
| void StopAndUploadCancelled(); | |
| // Re-schedules the next upload with the successful unsent logs interval (see | |
| // GetUnsentLogsInterval() below). This is useful for resetting the scheduler | |
| // when it is using backoff logic (see GetInitialBackoffInterval() below). | |
| // This should only be called while the scheduler is running, but not while | |
| // a callback is pending. This is currently only used for the feature | |
| // kResetMetricsUploadBackoffOnForeground. | |
| void RestartWithUnsentLogsInterval(); | |
| // Callback from MetricsService when an upload is cancelled because it would | |
| // be over the allowed data usage cap. | |
| void UploadOverDataUsageCap(); | |
| // Time delay after a log is uploaded successfully before attempting another. | |
| // On mobile, keeping the radio on is very expensive, so prefer to keep this | |
| // short and send in bursts. | |
| static base::TimeDelta GetUnsentLogsInterval(); | |
| // Initial time delay after a log uploaded fails before retrying it. | |
| static base::TimeDelta GetInitialBackoffInterval(); | |
| private: | |
| // Time to wait between uploads on success. | |
| const base::TimeDelta unsent_logs_interval_; | |
| // Initial time to wait between upload retry attempts. | |
| const base::TimeDelta initial_backoff_interval_; | |
| // Time to wait for the next upload attempt if the next one fails. | |
| base::TimeDelta backoff_interval_; | |
| }; | |
| } // namespace metrics | |
| #endif // COMPONENTS_METRICS_METRICS_UPLOAD_SCHEDULER_H_ |