1 // Copyright (c) 2012 The Chromium OS Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include <sstream> 6 #include <string> 7 8 #include "base/logging.h" 9 10 #include "compat/string.h" 11 #include "file_utils.h" 12 #include "perf_recorder.h" 13 14 namespace { 15 16 const char kDefaultOutputFile[] = "/dev/stdout"; 17 18 int StringToInt(const string& s) { 19 int r; 20 std::stringstream ss; 21 ss << s; 22 ss >> r; 23 return r; 24 } 25 26 bool ParseArguments(int argc, char* argv[], std::vector<string>* perf_args, 27 int* duration) { 28 if (argc < 3) { 29 LOG(ERROR) << "Invalid command line."; 30 LOG(ERROR) << "Usage: " << argv[0] << " <duration in seconds>" 31 << " <path to perf>" 32 << " <perf arguments>"; 33 return false; 34 } 35 36 *duration = StringToInt(argv[1]); 37 38 for (int i = 2; i < argc; i++) { 39 perf_args->emplace_back(argv[i]); 40 } 41 return true; 42 } 43 44 } // namespace 45 46 // Usage is: 47 // <exe> <duration in seconds> <perf command line> 48 int main(int argc, char* argv[]) { 49 std::vector<string> perf_args; 50 int perf_duration; 51 52 if (!ParseArguments(argc, argv, &perf_args, &perf_duration)) return 1; 53 54 quipper::PerfRecorder perf_recorder; 55 string output_string; 56 if (!perf_recorder.RunCommandAndGetSerializedOutput(perf_args, perf_duration, 57 &output_string)) { 58 return 1; 59 } 60 61 if (!quipper::BufferToFile(kDefaultOutputFile, output_string)) return 1; 62 63 return 0; 64 } 65