// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef ML_METRICS_H_
#define ML_METRICS_H_

#include <memory>

#include <base/macros.h>
#include <base/process/process_metrics.h>
#include <metrics/cumulative_metrics.h>
#include <metrics/metrics_library.h>

namespace ml {

// Performs UMA metrics logging for the ML Service daemon.
// Periodically gathers some process metrics (e.g. memory) and cumulative
// metrics (e.g. peak memory) itself.
// Threading: Create and use on a single sequence.
class Metrics {
 public:
  // These values are persisted to logs. Entries should not be renumbered and
  // numeric values should never be reused.
  // |kMaxValue| must equal to the maximum value in this enum.
  enum class MojoConnectionEvent {
    kBootstrapRequested = 0,
    kBootstrapSucceeded = 1,
    kConnectionError = 2,
    kMaxValue = kConnectionError
  };

  Metrics();

  // Starts periodic sampling of process metrics.
  void StartCollectingProcessMetrics();

  // Immediately samples & updates cumulative process metrics (i.e. peak RAM).
  // This does not change how often metrics are reported, but might increase the
  // accuracy of reported metrics.
  // Clients can call this manually in contexts where they know that e.g. memory
  // usage may have just increased, to help capture short-lived spikes that
  // might be missed by periodic sampling.
  void UpdateCumulativeMetricsNow();

  void RecordMojoConnectionEvent(MojoConnectionEvent event);

 private:
  // Fetches process metrics (e.g. RAM) and updates |cumulative_metrics|.
  // If |record_current_metrics| is true, also logs current process metrics.
  void UpdateAndRecordMetrics(
      bool record_current_metrics,
      chromeos_metrics::CumulativeMetrics* cumulative_metrics);

  const std::unique_ptr<base::ProcessMetrics> process_metrics_;

  MetricsLibrary metrics_library_;

  // Accumulator of process metrics (even across restarts).
  std::unique_ptr<chromeos_metrics::CumulativeMetrics> cumulative_metrics_;

  DISALLOW_COPY_AND_ASSIGN(Metrics);
};

}  // namespace ml

#endif  // ML_METRICS_H_
