xref: /aosp_15_r20/external/cronet/components/metrics/stability_metrics_provider.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_STABILITY_METRICS_PROVIDER_H_
6*6777b538SAndroid Build Coastguard Worker #define COMPONENTS_METRICS_STABILITY_METRICS_PROVIDER_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/memory/raw_ptr.h"
9*6777b538SAndroid Build Coastguard Worker #include "base/time/time.h"
10*6777b538SAndroid Build Coastguard Worker #include "build/build_config.h"
11*6777b538SAndroid Build Coastguard Worker #include "components/metrics/metrics_provider.h"
12*6777b538SAndroid Build Coastguard Worker 
13*6777b538SAndroid Build Coastguard Worker class PrefService;
14*6777b538SAndroid Build Coastguard Worker class PrefRegistrySimple;
15*6777b538SAndroid Build Coastguard Worker 
16*6777b538SAndroid Build Coastguard Worker namespace metrics {
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker class SystemProfileProto;
19*6777b538SAndroid Build Coastguard Worker 
20*6777b538SAndroid Build Coastguard Worker // Stores and loads system information to prefs for stability logs.
21*6777b538SAndroid Build Coastguard Worker class StabilityMetricsProvider : public MetricsProvider {
22*6777b538SAndroid Build Coastguard Worker  public:
23*6777b538SAndroid Build Coastguard Worker   explicit StabilityMetricsProvider(PrefService* local_state);
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker   StabilityMetricsProvider(const StabilityMetricsProvider&) = delete;
26*6777b538SAndroid Build Coastguard Worker   StabilityMetricsProvider& operator=(const StabilityMetricsProvider&) = delete;
27*6777b538SAndroid Build Coastguard Worker 
28*6777b538SAndroid Build Coastguard Worker   ~StabilityMetricsProvider() override;
29*6777b538SAndroid Build Coastguard Worker 
30*6777b538SAndroid Build Coastguard Worker   static void RegisterPrefs(PrefRegistrySimple* registry);
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker   void LogCrash(base::Time last_live_timestamp);
33*6777b538SAndroid Build Coastguard Worker   void LogLaunch();
34*6777b538SAndroid Build Coastguard Worker 
35*6777b538SAndroid Build Coastguard Worker  private:
36*6777b538SAndroid Build Coastguard Worker #if BUILDFLAG(IS_WIN)
37*6777b538SAndroid Build Coastguard Worker   // This function is virtual for testing. The |last_live_timestamp| is a
38*6777b538SAndroid Build Coastguard Worker   // time point where the previous browser was known to be alive, and is used
39*6777b538SAndroid Build Coastguard Worker   // to determine whether the system session embedding that timestamp terminated
40*6777b538SAndroid Build Coastguard Worker   // uncleanly.
41*6777b538SAndroid Build Coastguard Worker   virtual bool IsUncleanSystemSession(base::Time last_live_timestamp);
42*6777b538SAndroid Build Coastguard Worker   void MaybeLogSystemCrash(base::Time last_live_timestamp);
43*6777b538SAndroid Build Coastguard Worker #endif
44*6777b538SAndroid Build Coastguard Worker   // Increments an Integer pref value specified by |path|.
45*6777b538SAndroid Build Coastguard Worker   void IncrementPrefValue(const char* path);
46*6777b538SAndroid Build Coastguard Worker 
47*6777b538SAndroid Build Coastguard Worker   // Gets pref value specified by |path| and resets it to 0 after retrieving.
48*6777b538SAndroid Build Coastguard Worker   int GetAndClearPrefValue(const char* path, int* value);
49*6777b538SAndroid Build Coastguard Worker 
50*6777b538SAndroid Build Coastguard Worker   // MetricsProvider:
51*6777b538SAndroid Build Coastguard Worker   void Init() override;
52*6777b538SAndroid Build Coastguard Worker   void ClearSavedStabilityMetrics() override;
53*6777b538SAndroid Build Coastguard Worker   void ProvideStabilityMetrics(
54*6777b538SAndroid Build Coastguard Worker       SystemProfileProto* system_profile_proto) override;
55*6777b538SAndroid Build Coastguard Worker 
56*6777b538SAndroid Build Coastguard Worker   raw_ptr<PrefService> local_state_;
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_STABILITY_METRICS_PROVIDER_H_
62