xref: /aosp_15_r20/external/cronet/components/metrics/metrics_upload_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_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