// Copyright (c) 2012 The Chromium OS 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 CHROMIUMOS_WIDE_PROFILING_PERF_RECORDER_H_
#define CHROMIUMOS_WIDE_PROFILING_PERF_RECORDER_H_

#include <string>
#include <vector>

#include "base/macros.h"

#include "chromiumos-wide-profiling/compat/string.h"
#include "chromiumos-wide-profiling/perf_reader.h"

namespace quipper {

class PerfRecorder {
 public:
  PerfRecorder();

  // Mostly for testing.
  // Security critical: No user-provided strings should be used!
  explicit PerfRecorder(const std::vector<string>& perf_binary_command);

  // Runs the perf command specified in |perf_args| for |time_sec| seconds. The
  // output is returned as a serialized protobuf in |output_string|. The
  // protobuf format depends on the provided perf command.
  bool RunCommandAndGetSerializedOutput(const std::vector<string>& perf_args,
                                        const double time_sec,
                                        string* output_string);

  // The command prefix for running perf. e.g., "perf", or "/usr/bin/perf",
  // or perhaps {"sudo", "/usr/bin/perf"}.
  const std::vector<string>& perf_binary_command() const {
    return perf_binary_command_;
  }

 private:
  const std::vector<string> perf_binary_command_;

  DISALLOW_COPY_AND_ASSIGN(PerfRecorder);
};

}  // namespace quipper

#endif  // CHROMIUMOS_WIDE_PROFILING_PERF_RECORDER_H_
