summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2020-10-26 14:54:43 -0700
committerYabin Cui <yabinc@google.com>2020-10-26 14:54:43 -0700
commitd0afec3d198a06f9b525243f930b73ae0ae349f5 (patch)
tree21025600d9748ca23815091e5c370c0a0b5afa76
parent7ebc9e6cd61d5b167ccccbea85f42387370f51a7 (diff)
downloadextras-d0afec3d198a06f9b525243f930b73ae0ae349f5.tar.gz
simpleperf: use PreprocessOptions in dump cmd.
Bug: 171719712 Test: run simpleperf_unit_test Change-Id: Ieb3abf14d25262a7c732fd72b1ecaa3b405f4469
-rw-r--r--simpleperf/cmd_dumprecord.cpp39
1 files changed, 21 insertions, 18 deletions
diff --git a/simpleperf/cmd_dumprecord.cpp b/simpleperf/cmd_dumprecord.cpp
index 86860f71..be85fc20 100644
--- a/simpleperf/cmd_dumprecord.cpp
+++ b/simpleperf/cmd_dumprecord.cpp
@@ -232,30 +232,33 @@ bool DumpRecordCommand::Run(const std::vector<std::string>& args) {
}
bool DumpRecordCommand::ParseOptions(const std::vector<std::string>& args) {
- size_t i;
- for (i = 0; i < args.size() && !args[i].empty() && args[i][0] == '-'; ++i) {
- if (args[i] == "--dump-etm") {
- if (!NextArgumentOrError(args, &i) || !ParseEtmDumpOption(args[i], &etm_dump_option_)) {
- return false;
- }
- } else if (args[i] == "--symdir") {
- if (!NextArgumentOrError(args, &i)) {
- return false;
- }
- if (!Dso::AddSymbolDir(args[i])) {
- return false;
- }
- } else {
- ReportUnknownOption(args, i);
+ const OptionFormatMap option_formats = {
+ {"--dump-etm", {OptionValueType::STRING, OptionType::SINGLE}},
+ {"--symdir", {OptionValueType::STRING, OptionType::MULTIPLE}},
+ };
+ OptionValueMap options;
+ std::vector<std::pair<OptionName, OptionValue>> ordered_options;
+ std::vector<std::string> non_option_args;
+ if (!PreprocessOptions(args, option_formats, &options, &ordered_options, &non_option_args)) {
+ return false;
+ }
+ if (auto value = options.PullValue("--dump-etm"); value) {
+ if (!ParseEtmDumpOption(*value->str_value, &etm_dump_option_)) {
+ return false;
+ }
+ }
+ for (const OptionValue& value : options.PullValues("--symdir")) {
+ if (!Dso::AddSymbolDir(*value.str_value)) {
return false;
}
}
- if (i + 1 < args.size()) {
+ CHECK(options.values.empty());
+ if (non_option_args.size() > 1) {
LOG(ERROR) << "too many record files";
return false;
}
- if (i + 1 == args.size()) {
- record_filename_ = args[i];
+ if (non_option_args.size() == 1) {
+ record_filename_ = non_option_args[0];
}
return true;
}