// 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.

#include <cstdio>
#include <cstring>
#include <sstream>
#include <vector>

#include "chromiumos-wide-profiling/perf_recorder.h"
#include "chromiumos-wide-profiling/perf_serializer.h"
#include "chromiumos-wide-profiling/quipper_string.h"
#include "chromiumos-wide-profiling/scoped_temp_path.h"
#include "chromiumos-wide-profiling/utils.h"

namespace quipper {

string PerfRecorder::GetSleepCommand(const int time) {
  stringstream ss;
  ss << "sleep " << time;
  return ss.str();
}

bool PerfRecorder::RecordAndConvertToProtobuf(
    const string& perf_command,
    const int time,
    quipper::PerfDataProto* perf_data) {
  ScopedTempFile output_file;
  string full_perf_command = perf_command + " -o " + output_file.path() +
                             " -- " + GetSleepCommand(time);

  // The perf command writes the output to a file. |stdout_data| is just a dummy
  // container so we have something to pass to RunCommandAndGetStdout().
  std::vector<char> stdout_data;
  RunCommandAndGetStdout(full_perf_command, &stdout_data);

  // Now convert it into a protobuf.
  PerfSerializer perf_serializer;
  PerfSerializer::Options options;
  // Make sure to remap address for security reasons.
  options.do_remap = true;
  // Discard unused perf events to reduce the protobuf size.
  options.discard_unused_events = true;

  perf_serializer.set_options(options);

  return perf_serializer.SerializeFromFile(output_file.path(), perf_data);
}

}  // namespace quipper
