// 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 <sstream> #include <string> #include "base/logging.h" #include "compat/string.h" #include "file_utils.h" #include "perf_recorder.h" namespace { const char kDefaultOutputFile[] = "/dev/stdout"; int StringToInt(const string& s) { int r; std::stringstream ss; ss << s; ss >> r; return r; } bool ParseArguments(int argc, char* argv[], std::vector<string>* perf_args, int* duration) { if (argc < 3) { LOG(ERROR) << "Invalid command line."; LOG(ERROR) << "Usage: " << argv[0] << " <duration in seconds>" << " <path to perf>" << " <perf arguments>"; return false; } *duration = StringToInt(argv[1]); for (int i = 2; i < argc; i++) { perf_args->emplace_back(argv[i]); } return true; } } // namespace // Usage is: // <exe> <duration in seconds> <perf command line> int main(int argc, char* argv[]) { std::vector<string> perf_args; int perf_duration; if (!ParseArguments(argc, argv, &perf_args, &perf_duration)) return 1; quipper::PerfRecorder perf_recorder; string output_string; if (!perf_recorder.RunCommandAndGetSerializedOutput(perf_args, perf_duration, &output_string)) { return 1; } if (!quipper::BufferToFile(kDefaultOutputFile, output_string)) return 1; return 0; }