// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef TOOLS_MAC_POWER_POWER_SAMPLER_MONITOR_H_
#define TOOLS_MAC_POWER_POWER_SAMPLER_MONITOR_H_
#include <memory>
#include <vector>
#include "base/containers/flat_map.h"
#include "base/time/time.h"
namespace power_sampler {
// A DataColumnKey uniquely identifies data columns given to Monitor.
struct DataColumnKey {
std::string sampler_name;
std::string column_name;
bool operator==(const DataColumnKey& other) const {
return std::make_pair(sampler_name, column_name) ==
std::make_pair(other.sampler_name, other.column_name);
}
bool operator<(const DataColumnKey& other) const {
return std::make_pair(sampler_name, column_name) <
std::make_pair(other.sampler_name, other.column_name);
}
};
using DataRow = base::flat_map<DataColumnKey, double>;
// Concrete monitor classes override this interface.
class Monitor {
public:
using DataColumnKeyUnits = base::flat_map<DataColumnKey, std::string>;
Monitor() = default;
virtual ~Monitor() = 0;
// TODO(siggi): Add more callouts.
// - Add a callout for pre-session notification with all samplers.
// - Add a callot for post-session.
// - This will allow monitors to do the output, whether it's done as you
// go for e.g. CSV, or all-in-one for e.g. JSON.
// Called once before any OnSample calls are made.
// Can be used to e.g. open a file, output a file header or other
// one-time setup.
virtual void OnStartSession(const DataColumnKeyUnits& data_columns_units) = 0;
// Called each time a new set of |samples| has been acquired. The
// |sample_time| is the time when the acquisition of |samples| started.
// |data_row| is a potentially sparse collection of named datums provided in
// OnStartSession(). Returns true if the sampling session should be ended.
virtual bool OnSample(base::TimeTicks sample_time,
const DataRow& data_row) = 0;
// Called once after all OnSample calls have been made.
// Can be used to e.g. close files, flush output or other one-time teardown.
virtual void OnEndSession() = 0;
};
} // namespace power_sampler
#endif // TOOLS_MAC_POWER_POWER_SAMPLER_MONITOR_H_