// 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_CSV_EXPORTER_H_
#define TOOLS_MAC_POWER_POWER_SAMPLER_CSV_EXPORTER_H_
#include <memory>
#include "base/containers/flat_set.h"
#include "base/files/file.h"
#include "base/time/time.h"
#include "tools/mac/power/power_sampler/monitor.h"
namespace power_sampler {
// Listens to Monitor notifications and writes data in CSV format as it arrives.
class CsvExporter : public Monitor {
public:
// Creates and initializes a new exporter, if possible.
// Prefer using the |file_path| over the |file| option, except when using
// special files such as e.g. STDOUT.
// Returns nullptr on failure.
static std::unique_ptr<CsvExporter> Create(base::TimeTicks time_base,
base::FilePath file_path);
static std::unique_ptr<CsvExporter> Create(base::TimeTicks time_base,
base::File file);
~CsvExporter() override;
// Monitor implementation:
void OnStartSession(const DataColumnKeyUnits& data_columns_units) override;
bool OnSample(base::TimeTicks sample_time, const DataRow& data_row) override;
void OnEndSession() override;
private:
CsvExporter(base::TimeTicks time_base, base::File file);
// Appends |text| to |file_|, returns true on success.
bool Append(const std::string& text);
const base::TimeTicks time_base_;
base::File file_;
// The column keys seen in |OnStartSession|.
base::flat_set<DataColumnKey> column_keys_;
};
} // namespace power_sampler
#endif // TOOLS_MAC_POWER_POWER_SAMPLER_CSV_EXPORTER_H_