Home | History | Annotate | Download | only in quipper
      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 #ifndef CHROMIUMOS_WIDE_PROFILING_PERF_RECORDER_H_
      6 #define CHROMIUMOS_WIDE_PROFILING_PERF_RECORDER_H_
      7 
      8 #include <string>
      9 #include <vector>
     10 
     11 #include "base/macros.h"
     12 
     13 #include "compat/string.h"
     14 #include "perf_reader.h"
     15 
     16 namespace quipper {
     17 
     18 class PerfRecorder {
     19  public:
     20   PerfRecorder();
     21 
     22   // Mostly for testing.
     23   // Security critical: No user-provided strings should be used!
     24   explicit PerfRecorder(const std::vector<string>& perf_binary_command);
     25 
     26   // Runs the perf command specified in |perf_args| for |time_sec| seconds. The
     27   // output is returned as a serialized protobuf in |output_string|. The
     28   // protobuf format depends on the provided perf command.
     29   bool RunCommandAndGetSerializedOutput(const std::vector<string>& perf_args,
     30                                         const double time_sec,
     31                                         string* output_string);
     32 
     33   // The command prefix for running perf. e.g., "perf", or "/usr/bin/perf",
     34   // or perhaps {"sudo", "/usr/bin/perf"}.
     35   const std::vector<string>& perf_binary_command() const {
     36     return perf_binary_command_;
     37   }
     38 
     39  private:
     40   const std::vector<string> perf_binary_command_;
     41 
     42   DISALLOW_COPY_AND_ASSIGN(PerfRecorder);
     43 };
     44 
     45 }  // namespace quipper
     46 
     47 #endif  // CHROMIUMOS_WIDE_PROFILING_PERF_RECORDER_H_
     48