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_UPLOAD_SCHEDULER_H_ 6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_METRICS_UPLOAD_SCHEDULER_H_ 7*6777b538SAndroid Build Coastguard Worker 8*6777b538SAndroid Build Coastguard Worker #include "base/feature_list.h" 9*6777b538SAndroid Build Coastguard Worker #include "base/functional/callback.h" 10*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h" 11*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_scheduler.h" 12*6777b538SAndroid Build Coastguard Worker 13*6777b538SAndroid Build Coastguard Worker namespace metrics { 14*6777b538SAndroid Build Coastguard Worker 15*6777b538SAndroid Build Coastguard Worker // Scheduler task to drive a ReportingService object's uploading. 16*6777b538SAndroid Build Coastguard Worker class MetricsUploadScheduler : public MetricsScheduler { 17*6777b538SAndroid Build Coastguard Worker public: 18*6777b538SAndroid Build Coastguard Worker // Creates MetricsUploadScheduler object with the given |upload_callback| 19*6777b538SAndroid Build Coastguard Worker // callback to call when uploading should happen. The callback must 20*6777b538SAndroid Build Coastguard Worker // arrange to call either UploadFinished or UploadCancelled on completion. 21*6777b538SAndroid Build Coastguard Worker MetricsUploadScheduler(const base::RepeatingClosure& upload_callback, 22*6777b538SAndroid Build Coastguard Worker bool fast_startup_for_testing); 23*6777b538SAndroid Build Coastguard Worker 24*6777b538SAndroid Build Coastguard Worker MetricsUploadScheduler(const MetricsUploadScheduler&) = delete; 25*6777b538SAndroid Build Coastguard Worker MetricsUploadScheduler& operator=(const MetricsUploadScheduler&) = delete; 26*6777b538SAndroid Build Coastguard Worker 27*6777b538SAndroid Build Coastguard Worker ~MetricsUploadScheduler() override; 28*6777b538SAndroid Build Coastguard Worker 29*6777b538SAndroid Build Coastguard Worker // Callback from MetricsService when a triggered upload finishes. 30*6777b538SAndroid Build Coastguard Worker void UploadFinished(bool server_is_healthy); 31*6777b538SAndroid Build Coastguard Worker 32*6777b538SAndroid Build Coastguard Worker // Callback from MetricsService when an upload is cancelled. 33*6777b538SAndroid Build Coastguard Worker // Also stops the scheduler. 34*6777b538SAndroid Build Coastguard Worker void StopAndUploadCancelled(); 35*6777b538SAndroid Build Coastguard Worker 36*6777b538SAndroid Build Coastguard Worker // Callback from MetricsService when an upload is cancelled because it would 37*6777b538SAndroid Build Coastguard Worker // be over the allowed data usage cap. 38*6777b538SAndroid Build Coastguard Worker void UploadOverDataUsageCap(); 39*6777b538SAndroid Build Coastguard Worker 40*6777b538SAndroid Build Coastguard Worker // Time delay after a log is uploaded successfully before attempting another. 41*6777b538SAndroid Build Coastguard Worker // On mobile, keeping the radio on is very expensive, so prefer to keep this 42*6777b538SAndroid Build Coastguard Worker // short and send in bursts. 43*6777b538SAndroid Build Coastguard Worker static base::TimeDelta GetUnsentLogsInterval(); 44*6777b538SAndroid Build Coastguard Worker 45*6777b538SAndroid Build Coastguard Worker // Initial time delay after a log uploaded fails before retrying it. 46*6777b538SAndroid Build Coastguard Worker static base::TimeDelta GetInitialBackoffInterval(); 47*6777b538SAndroid Build Coastguard Worker 48*6777b538SAndroid Build Coastguard Worker private: 49*6777b538SAndroid Build Coastguard Worker // Time to wait between uploads on success. 50*6777b538SAndroid Build Coastguard Worker const base::TimeDelta unsent_logs_interval_; 51*6777b538SAndroid Build Coastguard Worker 52*6777b538SAndroid Build Coastguard Worker // Initial time to wait between upload retry attempts. 53*6777b538SAndroid Build Coastguard Worker const base::TimeDelta initial_backoff_interval_; 54*6777b538SAndroid Build Coastguard Worker 55*6777b538SAndroid Build Coastguard Worker // Time to wait for the next upload attempt if the next one fails. 56*6777b538SAndroid Build Coastguard Worker base::TimeDelta backoff_interval_; 57*6777b538SAndroid Build Coastguard Worker }; 58*6777b538SAndroid Build Coastguard Worker 59*6777b538SAndroid Build Coastguard Worker } // namespace metrics 60*6777b538SAndroid Build Coastguard Worker 61*6777b538SAndroid Build Coastguard Worker #endif // COMPONENTS_METRICS_METRICS_UPLOAD_SCHEDULER_H_ 62