| // 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_JSON_EXPORTER_H_ |
| #define TOOLS_MAC_POWER_POWER_SAMPLER_JSON_EXPORTER_H_ |
| |
| #include <memory> |
| #include <vector> |
| |
| #include "base/files/file_path.h" |
| #include "base/time/time.h" |
| #include "base/values.h" |
| #include "tools/mac/power/power_sampler/monitor.h" |
| |
| namespace power_sampler { |
| |
| // Listens to Monitor notifications and write data in JSON format in a file upon |
| // OnEndSession(). |
| class JsonExporter : public Monitor { |
| public: |
| // Creates and initializes a new exporter, if possible. |
| // Returns nullptr on failure. |
| static std::unique_ptr<JsonExporter> Create(base::FilePath file_path, |
| base::TimeTicks time_base); |
| |
| ~JsonExporter() 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; |
| |
| const base::Value& GetColumnLabelsForTesting() const { |
| return column_labels_; |
| } |
| base::Value GetDataRowsForTesting() const { |
| return base::Value(data_rows_.Clone()); |
| } |
| |
| private: |
| JsonExporter(base::FilePath file_path, base::TimeTicks time_base); |
| |
| base::FilePath file_path_; |
| base::TimeTicks time_base_; |
| base::Value column_labels_; |
| base::Value::List data_rows_; |
| }; |
| |
| } // namespace power_sampler |
| |
| #endif // TOOLS_MAC_POWER_POWER_SAMPLER_JSON_EXPORTER_H_ |