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