// Copyright 2018 The Fuchsia 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 GARNET_BIN_CPUPERF_SESSION_SPEC_H_
#define GARNET_BIN_CPUPERF_SESSION_SPEC_H_

#include <cstddef>
#include <cstdint>
#include <string>

#include <src/lib/fxl/time/time_delta.h>
#include <lib/zircon-internal/device/cpu-trace/perf-mon.h>
#include <lib/zx/time.h>

#include "garnet/lib/perfmon/events.h"

namespace cpuperf {

// The parameters controlling data collection.

struct SessionSpec {
  static const char kDefaultModelName[];
  static constexpr uint32_t kDefaultBufferSizeInMb = 16u;
  static constexpr fxl::TimeDelta kDefaultDuration{fxl::TimeDelta::FromSeconds(10)};
  static constexpr size_t kDefaultNumIterations = 1u;
  static const char kDefaultOutputPathPrefix[];
  static const char kDefaultSessionResultSpecPath[];

  SessionSpec();

  // Name of the config for reporting and debugging purposes.
  std::string config_name;

  // The model being used.
  // This affects what performance counters are available.
  // The default is "default" which means use the default for the system
  // we're being run on. But it's useful to be able to modify the default
  // for test purposes.
  std::string model_name;

  // Configuration for collecting cpu performance data.
  perfmon_config_t perfmon_config{};

  // The size of the trace buffer to use, in MB.
  uint32_t buffer_size_in_mb{kDefaultBufferSizeInMb};

  // How long to collect data for.
  fxl::TimeDelta duration{kDefaultDuration};

  // How many iterations of data to collect.
  size_t num_iterations{kDefaultNumIterations};

  // The path prefix of all of the output files.
  std::string output_path_prefix;

  // The path of the session result spec.
  std::string session_result_spec_path;

  // The details of events for |model_name|.
  std::unique_ptr<perfmon::ModelEventManager> model_event_manager;
};

bool DecodeSessionSpec(const std::string& json, SessionSpec* spec);

}  // namespace cpuperf

#endif  // GARNET_BIN_CPUPERF_SESSION_SPEC_H_
