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 25class 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 43bool 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 61void 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 80void HelpCommand::PrintLongHelpForOneCommand(const Command& command) { 81 printf("%s\n", command.LongHelpString().c_str()); 82} 83 84void RegisterHelpCommand() { 85 RegisterCommand("help", 86 [] { return std::unique_ptr<Command>(new HelpCommand); }); 87} 88