blob: ec7a7ce4f3a6ecaa238326a50d163e6fe2f535ed [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef RMAD_METRICS_STATE_METRICS_H_
#define RMAD_METRICS_STATE_METRICS_H_
#include <map>
#include <base/values.h>
#include "rmad/proto_bindings/rmad.pb.h"
namespace rmad {
// Internal structure for storing metrics of a state.
struct StateMetricsData {
public:
bool operator==(const StateMetricsData& other) const;
base::Value ToValue() const;
bool FromValue(const base::Value* value);
RmadState::StateCase state_case;
bool is_aborted;
double setup_timestamp;
double overall_time;
int transition_count;
int get_log_count;
int save_log_count;
};
base::Value ConvertToValue(const StateMetricsData& data);
bool ConvertFromValue(const base::Value* value, StateMetricsData* data);
// Internal structure for storing metrics of all states.
class StateMetricsMap {
public:
StateMetricsMap() = default;
explicit StateMetricsMap(
const std::map<int, StateMetricsData>& state_metrics_map);
~StateMetricsMap() = default;
StateMetricsData& operator[](RmadState::StateCase state_case) {
return state_metrics_map_[static_cast<int>(state_case)];
}
const StateMetricsData& operator[](RmadState::StateCase state_case) const {
return state_metrics_map_.at(static_cast<int>(state_case));
}
bool operator==(const StateMetricsMap& other) const {
return GetRawMap() == other.GetRawMap();
}
std::map<int, StateMetricsData> GetRawMap() const {
return state_metrics_map_;
}
bool InitializeState(RmadState::StateCase state_case, double setup_timestamp);
bool UpdateStateOverallTime(RmadState::StateCase state_case,
double leave_timestamp);
private:
std::map<int, StateMetricsData> state_metrics_map_;
};
base::Value ConvertToValue(const StateMetricsMap& data);
bool ConvertFromValue(const base::Value* value, StateMetricsMap* data);
} // namespace rmad
#endif // RMAD_METRICS_STATE_METRICS_H_