1 //===-- CommandObjectStats.cpp --------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "CommandObjectStats.h" 10 #include "lldb/Interpreter/CommandReturnObject.h" 11 #include "lldb/Target/Target.h" 12 13 using namespace lldb; 14 using namespace lldb_private; 15 16 class CommandObjectStatsEnable : public CommandObjectParsed { 17 public: 18 CommandObjectStatsEnable(CommandInterpreter &interpreter) 19 : CommandObjectParsed(interpreter, "enable", 20 "Enable statistics collection", nullptr, 21 eCommandProcessMustBePaused) {} 22 23 ~CommandObjectStatsEnable() override = default; 24 25 protected: 26 bool DoExecute(Args &command, CommandReturnObject &result) override { 27 Target &target = GetSelectedOrDummyTarget(); 28 29 if (target.GetCollectingStats()) { 30 result.AppendError("statistics already enabled"); 31 return false; 32 } 33 34 target.SetCollectingStats(true); 35 result.SetStatus(eReturnStatusSuccessFinishResult); 36 return true; 37 } 38 }; 39 40 class CommandObjectStatsDisable : public CommandObjectParsed { 41 public: 42 CommandObjectStatsDisable(CommandInterpreter &interpreter) 43 : CommandObjectParsed(interpreter, "disable", 44 "Disable statistics collection", nullptr, 45 eCommandProcessMustBePaused) {} 46 47 ~CommandObjectStatsDisable() override = default; 48 49 protected: 50 bool DoExecute(Args &command, CommandReturnObject &result) override { 51 Target &target = GetSelectedOrDummyTarget(); 52 53 if (!target.GetCollectingStats()) { 54 result.AppendError("need to enable statistics before disabling them"); 55 return false; 56 } 57 58 target.SetCollectingStats(false); 59 result.SetStatus(eReturnStatusSuccessFinishResult); 60 return true; 61 } 62 }; 63 64 class CommandObjectStatsDump : public CommandObjectParsed { 65 public: 66 CommandObjectStatsDump(CommandInterpreter &interpreter) 67 : CommandObjectParsed(interpreter, "dump", "Dump statistics results", 68 nullptr, eCommandProcessMustBePaused) {} 69 70 ~CommandObjectStatsDump() override = default; 71 72 protected: 73 bool DoExecute(Args &command, CommandReturnObject &result) override { 74 Target &target = GetSelectedOrDummyTarget(); 75 76 uint32_t i = 0; 77 for (auto &stat : target.GetStatistics()) { 78 result.AppendMessageWithFormat( 79 "%s : %u\n", 80 lldb_private::GetStatDescription( 81 static_cast<lldb_private::StatisticKind>(i)) 82 .c_str(), 83 stat); 84 i += 1; 85 } 86 result.SetStatus(eReturnStatusSuccessFinishResult); 87 return true; 88 } 89 }; 90 91 CommandObjectStats::CommandObjectStats(CommandInterpreter &interpreter) 92 : CommandObjectMultiword(interpreter, "statistics", 93 "Print statistics about a debugging session", 94 "statistics <subcommand> [<subcommand-options>]") { 95 LoadSubCommand("enable", 96 CommandObjectSP(new CommandObjectStatsEnable(interpreter))); 97 LoadSubCommand("disable", 98 CommandObjectSP(new CommandObjectStatsDisable(interpreter))); 99 LoadSubCommand("dump", 100 CommandObjectSP(new CommandObjectStatsDump(interpreter))); 101 } 102 103 CommandObjectStats::~CommandObjectStats() = default; 104