diff options
Diffstat (limited to 'simpleperf/cmd_api.cpp')
-rw-r--r-- | simpleperf/cmd_api.cpp | 84 |
1 files changed, 46 insertions, 38 deletions
diff --git a/simpleperf/cmd_api.cpp b/simpleperf/cmd_api.cpp index 736f239c..7f933736 100644 --- a/simpleperf/cmd_api.cpp +++ b/simpleperf/cmd_api.cpp @@ -28,23 +28,21 @@ #include <android-base/unique_fd.h> #include <ziparchive/zip_writer.h> -#include "cmd_api_impl.h" #include "command.h" -#include "environment.h" #include "event_type.h" +#include "environment.h" #include "utils.h" #include "workload.h" -namespace simpleperf { namespace { - const std::string SIMPLEPERF_DATA_DIR = "simpleperf_data"; class PrepareCommand : public Command { public: PrepareCommand() - : Command("api-prepare", "Prepare recording via app api", "Usage: simpleperf api-prepare\n") { - } + : Command("api-prepare", "Prepare recording via app api", + "Usage: simpleperf api-prepare\n" + ) {} bool Run(const std::vector<std::string>& args); }; @@ -54,7 +52,12 @@ bool PrepareCommand::Run(const std::vector<std::string>&) { return false; } // Create tracepoint_events file. - return EventTypeManager::Instance().WriteTracepointsToFile("/data/local/tmp/tracepoint_events"); + if (!android::base::WriteStringToFile(GetTracepointEvents(), + "/data/local/tmp/tracepoint_events")) { + PLOG(ERROR) << "failed to write tracepoint_events file"; + return false; + } + return true; } class CollectCommand : public Command { @@ -73,8 +76,7 @@ class CollectCommand : public Command { "--stop-signal-fd <fd> Stop recording when fd is readable.\n" #endif // clang-format on - ) { - } + ) {} bool Run(const std::vector<std::string>& args); private: @@ -102,30 +104,36 @@ bool CollectCommand::Run(const std::vector<std::string>& args) { } bool CollectCommand::ParseOptions(const std::vector<std::string>& args) { - OptionValueMap options; - std::vector<std::pair<OptionName, OptionValue>> ordered_options; - if (!PreprocessOptions(args, GetApiCollectCmdOptionFormats(), &options, &ordered_options, - nullptr)) { - return false; - } - - if (auto value = options.PullValue("--app"); value) { - app_name_ = *value->str_value; - } - in_app_context_ = options.PullBoolValue("--in-app"); - - if (auto value = options.PullValue("-o"); value) { - output_filepath_ = *value->str_value; - } - if (auto value = options.PullValue("--out-fd"); value) { - out_fd_.reset(static_cast<int>(value->uint_value)); - } - if (auto value = options.PullValue("--stop-signal-fd"); value) { - stop_signal_fd_.reset(static_cast<int>(value->uint_value)); + for (size_t i = 0; i < args.size(); ++i) { + if (args[i] == "--app") { + if (!NextArgumentOrError(args, &i)) { + return false; + } + app_name_ = args[i]; + } else if (args[i] == "--in-app") { + in_app_context_ = true; + } else if (args[i] == "-o") { + if (!NextArgumentOrError(args, &i)) { + return false; + } + output_filepath_ = args[i]; + } else if (args[i] == "--out-fd") { + int fd; + if (!GetUintOption(args, &i, &fd)) { + return false; + } + out_fd_.reset(fd); + } else if (args[i] == "--stop-signal-fd") { + int fd; + if (!GetUintOption(args, &i, &fd)) { + return false; + } + stop_signal_fd_.reset(fd); + } else { + ReportUnknownOption(args, i); + return false; + } } - - CHECK(options.values.empty()); - CHECK(ordered_options.empty()); if (!in_app_context_) { if (app_name_.empty()) { LOG(ERROR) << "--app is missing"; @@ -146,8 +154,8 @@ void CollectCommand::HandleStopSignal() { } bool CollectCommand::CollectRecordingData() { - std::unique_ptr<FILE, decltype(&fclose)> fp(android::base::Fdopen(std::move(out_fd_), "w"), - fclose); + std::unique_ptr<FILE, decltype(&fclose)> fp(android::base::Fdopen(std::move(out_fd_), "w"), + fclose); if (fp == nullptr) { PLOG(ERROR) << "failed to call fdopen"; return false; @@ -208,8 +216,8 @@ bool CollectCommand::RemoveRecordingData() { } // namespace void RegisterAPICommands() { - RegisterCommand("api-prepare", [] { return std::unique_ptr<Command>(new PrepareCommand()); }); - RegisterCommand("api-collect", [] { return std::unique_ptr<Command>(new CollectCommand()); }); + RegisterCommand("api-prepare", + []{ return std::unique_ptr<Command>(new PrepareCommand()); }); + RegisterCommand("api-collect", + []{ return std::unique_ptr<Command>(new CollectCommand()); }); } - -} // namespace simpleperf |