chromium/chrome/browser/ash/power/power_metrics_reporter.h

// Copyright 2017 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_POWER_POWER_METRICS_REPORTER_H_
#define CHROME_BROWSER_ASH_POWER_POWER_METRICS_REPORTER_H_

#include <map>
#include <memory>
#include <string>

#include "base/memory/raw_ptr.h"
#include "base/timer/timer.h"
#include "chromeos/dbus/power/power_manager_client.h"
#include "chromeos/dbus/power_manager/idle.pb.h"
#include "components/metrics/daily_event.h"

class PrefRegistrySimple;
class PrefService;

namespace ash {

// PowerMetricsReporter reports power-management-related metrics.
// Prefs are used to retain metrics across Chrome restarts and system reboots.
class PowerMetricsReporter : public chromeos::PowerManagerClient::Observer {
 public:
  // Histogram names.
  static const char kDailyEventIntervalName[];

  // Registers prefs used by PowerMetricsReporter in |registry|.
  static void RegisterLocalStatePrefs(PrefRegistrySimple* registry);

  // RegisterLocalStatePrefs() must be called before instantiating this class.
  PowerMetricsReporter(chromeos::PowerManagerClient* power_manager_client,
                       PrefService* local_state_pref_service);

  PowerMetricsReporter(const PowerMetricsReporter&) = delete;
  PowerMetricsReporter& operator=(const PowerMetricsReporter&) = delete;

  ~PowerMetricsReporter() override;

  // PowerManagerClient::Observer:
  void SuspendDone(base::TimeDelta duration) override;

 private:
  friend class PowerMetricsReporterTest;

  raw_ptr<chromeos::PowerManagerClient> power_manager_client_;  // Not owned.
  raw_ptr<PrefService> pref_service_;                   // Not owned.

  std::unique_ptr<metrics::DailyEvent> daily_event_;

  // Instructs |daily_event_| to check if a day has passed.
  base::RepeatingTimer timer_;

  // Map from local store pref name backing a daily count to the count itself.
  std::map<std::string, int> daily_counts_;
};

}  // namespace ash

#endif  // CHROME_BROWSER_ASH_POWER_POWER_METRICS_REPORTER_H_