| // 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, |
| kConnectionClosed = 2, |
| kMaxValue = kConnectionClosed |
| }; |
| |
| Metrics(); |
| Metrics(const Metrics&) = delete; |
| Metrics& operator=(const Metrics&) = delete; |
| |
| // 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_; |
| }; |
| |
| } // namespace ml |
| |
| #endif // ML_METRICS_H_ |