summaryrefslogtreecommitdiff
path: root/simpleperf/cmd_api.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'simpleperf/cmd_api.cpp')
-rw-r--r--simpleperf/cmd_api.cpp84
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