text: // Copyright 2021 The Chromium 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 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_); }
  
   private:
    JsonExporter(base::FilePath file_path, base::TimeTicks time_base);
  
    base::FilePath file_path_;
    base::TimeTicks time_base_;
    base::Value column_labels_;
    std::vector<base::Value> data_rows_;
  };
  
  }  // namespace power_sampler
  
  #endif  // TOOLS_MAC_POWER_POWER_SAMPLER_JSON_EXPORTER_H_
  