diff options
author | Yabin Cui <yabinc@google.com> | 2020-10-26 14:54:43 -0700 |
---|---|---|
committer | Yabin Cui <yabinc@google.com> | 2020-10-26 14:54:43 -0700 |
commit | d0afec3d198a06f9b525243f930b73ae0ae349f5 (patch) | |
tree | 21025600d9748ca23815091e5c370c0a0b5afa76 | |
parent | 7ebc9e6cd61d5b167ccccbea85f42387370f51a7 (diff) | |
download | extras-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.cpp | 39 |
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; } |