1 /* 2 * Copyright (C) 2015 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #include <stdio.h> 18 #include <string> 19 #include <vector> 20 21 #include <android-base/logging.h> 22 23 #include "command.h" 24 25 class HelpCommand : public Command { 26 public: 27 HelpCommand() 28 : Command("help", "print help information for simpleperf", 29 // clang-format off 30 "Usage: simpleperf help [subcommand]\n" 31 " Without subcommand, print short help string for every subcommand.\n" 32 " With subcommand, print long help string for the subcommand.\n\n" 33 // clang-format on 34 ) {} 35 36 bool Run(const std::vector<std::string>& args) override; 37 38 private: 39 void PrintShortHelp(); 40 void PrintLongHelpForOneCommand(const Command& cmd); 41 }; 42 43 bool HelpCommand::Run(const std::vector<std::string>& args) { 44 if (args.empty()) { 45 PrintShortHelp(); 46 } else { 47 std::unique_ptr<Command> cmd = CreateCommandInstance(args[0]); 48 if (cmd == nullptr) { 49 LOG(ERROR) << "malformed command line: can't find help string for " 50 "unknown command " 51 << args[0]; 52 LOG(ERROR) << "try using \"--help\""; 53 return false; 54 } else { 55 PrintLongHelpForOneCommand(*cmd); 56 } 57 } 58 return true; 59 } 60 61 void HelpCommand::PrintShortHelp() { 62 printf( 63 // clang-format off 64 "Usage: simpleperf [common options] subcommand [args_for_subcommand]\n" 65 "common options:\n" 66 " -h/--help Print this help information.\n" 67 " --log <severity> Set the minimum severity of logging. Possible severities\n" 68 " include verbose, debug, warning, info, error, fatal.\n" 69 " Default is info.\n" 70 " --version Print version of simpleperf.\n" 71 "subcommands:\n" 72 // clang-format on 73 ); 74 for (auto& cmd_name : GetAllCommandNames()) { 75 std::unique_ptr<Command> cmd = CreateCommandInstance(cmd_name); 76 printf(" %-20s%s\n", cmd_name.c_str(), cmd->ShortHelpString().c_str()); 77 } 78 } 79 80 void HelpCommand::PrintLongHelpForOneCommand(const Command& command) { 81 printf("%s\n", command.LongHelpString().c_str()); 82 } 83 84 void RegisterHelpCommand() { 85 RegisterCommand("help", 86 [] { return std::unique_ptr<Command>(new HelpCommand); }); 87 } 88