| // Copyright 2022 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_ASH_APP_MODE_METRICS_PERIODIC_METRICS_SERVICE_H_ |
| #define CHROME_BROWSER_ASH_APP_MODE_METRICS_PERIODIC_METRICS_SERVICE_H_ |
| |
| #include "base/timer/timer.h" |
| #include "components/prefs/pref_service.h" |
| |
| namespace ash { |
| |
| extern const char kKioskRamUsagePercentageHistogram[]; |
| extern const char kKioskSwapUsagePercentageHistogram[]; |
| extern const char kKioskDiskUsagePercentageHistogram[]; |
| extern const char kKioskChromeProcessCountHistogram[]; |
| extern const char kKioskSessionRestartInternetAccessHistogram[]; |
| extern const char kKioskSessionRestartUserActivityHistogram[]; |
| extern const char kKioskInternetAccessInfo[]; |
| extern const char kKioskUserActivity[]; |
| |
| extern const base::TimeDelta kPeriodicMetricsInterval; |
| extern const base::TimeDelta kFirstIdleTimeout; |
| extern const base::TimeDelta kRegularIdleTimeout; |
| |
| // These values are used in UMA metrics. Entries should not be renumbered and |
| // numeric values should never be reused. Keep in sync with respective enum in |
| // tools/metrics/histograms/enums.xml |
| enum class KioskInternetAccessInfo { |
| kOnlineAndAppRequiresInternet = 0, |
| kOnlineAndAppSupportsOffline = 1, |
| kOfflineAndAppRequiresInternet = 2, |
| kOfflineAndAppSupportsOffline = 3, |
| kMaxValue = kOfflineAndAppSupportsOffline, |
| }; |
| |
| // These values are used in UMA metrics. Entries should not be renumbered and |
| // numeric values should never be reused. Keep in sync with respective enum in |
| // tools/metrics/histograms/enums.xml |
| enum class KioskUserActivity { |
| kActive = 0, |
| kIdle = 1, |
| kMaxValue = kIdle, |
| }; |
| |
| class DiskSpaceCalculator; |
| |
| // This class save and record kiosk UMA metrics every |
| // `kPeriodicMetricsInterval`. |
| class PeriodicMetricsService { |
| public: |
| explicit PeriodicMetricsService(PrefService* prefs); |
| PeriodicMetricsService(const PeriodicMetricsService&) = delete; |
| PeriodicMetricsService& operator=(const PeriodicMetricsService&) = delete; |
| ~PeriodicMetricsService(); |
| |
| // Record metrics about the previous kiosk session. Should be called in the |
| // beginning of the kiosk session and before `StartRecordingPeriodicMetrics`. |
| void RecordPreviousSessionMetrics() const; |
| |
| void StartRecordingPeriodicMetrics(bool is_offline_enabled); |
| |
| private: |
| void RecordPeriodicMetrics(const base::TimeDelta& idle_timeout); |
| |
| void RecordRamUsage() const; |
| |
| void RecordSwapUsage() const; |
| |
| void RecordDiskSpaceUsage() const; |
| |
| void RecordChromeProcessCount() const; |
| |
| void RecordPreviousInternetAccessInfo() const; |
| |
| void RecordPreviousUserActivity() const; |
| |
| // Save the Internet access info to record |
| // `kKioskSessionRestartInternetAccessHistogram` during the next kiosk session |
| // start. |
| void SaveInternetAccessInfo() const; |
| |
| // Save the user activity info to record |
| // `kKioskSessionRestartUserActivityHistogram` during the next kiosk session |
| // start. The first idle timeout is `kFirstIdleTimeout`, but then when |
| // ChromeOS records user activity, it uses `kRegularIdleTimeout`. |
| void SaveUserActivity(const base::TimeDelta& idle_timeout) const; |
| |
| // Invokes callback to record continuously monitored metrics. Starts when |
| // the kiosk session is started. |
| base::RepeatingTimer metrics_timer_; |
| |
| bool is_offline_enabled_ = true; |
| |
| raw_ptr<PrefService> prefs_; |
| |
| const std::unique_ptr<DiskSpaceCalculator> disk_space_calculator_; |
| base::WeakPtrFactory<PeriodicMetricsService> weak_ptr_factory_{this}; |
| }; |
| |
| } // namespace ash |
| |
| #endif // CHROME_BROWSER_ASH_APP_MODE_METRICS_PERIODIC_METRICS_SERVICE_H_ |