summaryrefslogtreecommitdiff
path: root/simpleperf/command.cpp
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2020-07-22 14:50:35 -0700
committerYabin Cui <yabinc@google.com>2020-07-28 10:37:25 -0700
commit6f09467ddb459e7b75f11cc9db99a7c94b144ccd (patch)
tree7f615eb6642a2546a92cdd892c49398cb73b2016 /simpleperf/command.cpp
parent9a615c405f3d7dc7316bad16733a7304a9aad7f4 (diff)
downloadextras-6f09467ddb459e7b75f11cc9db99a7c94b144ccd.tar.gz
simpleperf: share option formats with simpleperf_app_runner.
This CL avoids the need to define option formats in simpleperf_app_runner. Each time an option is changed in simpleperf, it's also changed in simpleperf_app_runner. 1. Use OptionFormatMap to parse options for api-collect and stat cmd. 2. Add OptionFormatMap for common options. 3. Add AppRunnerType in OptionFormat, and define its value for each option in api-collect, stat and record cmd. 4. Use OptionFormatMap in simpleperf_app_runner. Bug: 161387498 Test: run simpleperf_unit_test. Test: run CtsSimpleperfTestCases. Change-Id: Ib4600b4b62839dee1002eec090d7db86ce8fd346
Diffstat (limited to 'simpleperf/command.cpp')
-rw-r--r--simpleperf/command.cpp43
1 files changed, 26 insertions, 17 deletions
diff --git a/simpleperf/command.cpp b/simpleperf/command.cpp
index a7b7eb5a..c9bcd752 100644
--- a/simpleperf/command.cpp
+++ b/simpleperf/command.cpp
@@ -42,8 +42,7 @@ bool Command::NextArgumentOrError(const std::vector<std::string>& args, size_t*
}
bool Command::PreprocessOptions(const std::vector<std::string>& args,
- const std::unordered_map<OptionName, OptionFormat>& option_formats,
- OptionValueMap* options,
+ const OptionFormatMap& option_formats, OptionValueMap* options,
std::vector<std::pair<OptionName, OptionValue>>* ordered_options,
std::vector<std::string>* non_option_args) {
options->values.clear();
@@ -224,33 +223,43 @@ bool RunSimpleperfCmd(int argc, char** argv) {
std::vector<std::string> args;
android::base::LogSeverity log_severity = android::base::INFO;
log_to_android_buffer = false;
+ const OptionFormatMap& common_option_formats = GetCommonOptionFormatMap();
- for (int i = 1; i < argc; ++i) {
- if (strcmp(argv[i], "--help") == 0 || strcmp(argv[i], "-h") == 0) {
+ int i;
+ for (i = 1; i < argc && strcmp(argv[i], "--") != 0; ++i) {
+ std::string option_name = argv[i];
+ auto it = common_option_formats.find(option_name);
+ if (it == common_option_formats.end()) {
+ args.emplace_back(std::move(option_name));
+ continue;
+ }
+ if (it->second.value_type != OptionValueType::NONE && i + 1 == argc) {
+ LOG(ERROR) << "Missing argument for " << option_name;
+ return false;
+ }
+ if (option_name == "-h" || option_name == "--help") {
args.insert(args.begin(), "help");
- } else if (strcmp(argv[i], "--log") == 0) {
- if (i + 1 < argc) {
- ++i;
- if (!GetLogSeverity(argv[i], &log_severity)) {
- LOG(ERROR) << "Unknown log severity: " << argv[i];
- return false;
- }
- } else {
- LOG(ERROR) << "Missing argument for --log option.\n";
- return false;
+ } else if (option_name == "--log") {
+ if (!GetLogSeverity(argv[i+1], &log_severity)) {
+ LOG(ERROR) << "Unknown log severity: " << argv[i+1];
}
+ ++i;
#if defined(__ANDROID__)
- } else if (strcmp(argv[i], "--log-to-android-buffer") == 0) {
+ } else if (option_name == "--log-to-android-buffer") {
android::base::SetLogger(android::base::LogdLogger());
log_to_android_buffer = true;
#endif
- } else if (strcmp(argv[i], "--version") == 0) {
+ } else if (option_name == "--version") {
LOG(INFO) << "Simpleperf version " << GetSimpleperfVersion();
return true;
} else {
- args.push_back(argv[i]);
+ CHECK(false) << "Unreachable code";
}
}
+ while (i < argc) {
+ args.emplace_back(argv[i++]);
+ }
+
android::base::ScopedLogSeverity severity(log_severity);
if (args.empty()) {