blob: e5074cc80d4817620819795c18e5efb3b1a2c519 [file] [log] [blame]
// 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 {
// 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,
kConnectionClosed = 2,
kMaxValue = kConnectionClosed
// 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);
// 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_;
} // namespace ml
#endif // ML_METRICS_H_