1 //===-- CommandObjectStats.cpp ----------------------------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "CommandObjectStats.h"
11 #include "lldb/Host/Host.h"
12 #include "lldb/Interpreter/CommandInterpreter.h"
13 #include "lldb/Interpreter/CommandReturnObject.h"
14 #include "lldb/Target/Target.h"
17 using namespace lldb_private;
19 class CommandObjectStatsEnable : public CommandObjectParsed {
21 CommandObjectStatsEnable(CommandInterpreter &interpreter)
22 : CommandObjectParsed(interpreter, "enable",
23 "Enable statistics collection", nullptr,
24 eCommandProcessMustBePaused) {}
26 ~CommandObjectStatsEnable() override = default;
29 bool DoExecute(Args &command, CommandReturnObject &result) override {
30 Target *target = GetSelectedOrDummyTarget();
32 if (target->GetCollectingStats()) {
33 result.AppendError("statistics already enabled");
34 result.SetStatus(eReturnStatusFailed);
38 target->SetCollectingStats(true);
39 result.SetStatus(eReturnStatusSuccessFinishResult);
44 class CommandObjectStatsDisable : public CommandObjectParsed {
46 CommandObjectStatsDisable(CommandInterpreter &interpreter)
47 : CommandObjectParsed(interpreter, "disable",
48 "Disable statistics collection", nullptr,
49 eCommandProcessMustBePaused) {}
51 ~CommandObjectStatsDisable() override = default;
54 bool DoExecute(Args &command, CommandReturnObject &result) override {
55 Target *target = GetSelectedOrDummyTarget();
57 if (!target->GetCollectingStats()) {
58 result.AppendError("need to enable statistics before disabling them");
59 result.SetStatus(eReturnStatusFailed);
63 target->SetCollectingStats(false);
64 result.SetStatus(eReturnStatusSuccessFinishResult);
69 class CommandObjectStatsDump : public CommandObjectParsed {
71 CommandObjectStatsDump(CommandInterpreter &interpreter)
72 : CommandObjectParsed(interpreter, "dump", "Dump statistics results",
73 nullptr, eCommandProcessMustBePaused) {}
75 ~CommandObjectStatsDump() override = default;
78 bool DoExecute(Args &command, CommandReturnObject &result) override {
79 Target *target = GetSelectedOrDummyTarget();
82 for (auto &stat : target->GetStatistics()) {
83 result.AppendMessageWithFormat(
85 lldb_private::GetStatDescription(static_cast<lldb_private::StatisticKind>(i))
90 result.SetStatus(eReturnStatusSuccessFinishResult);
95 CommandObjectStats::CommandObjectStats(CommandInterpreter &interpreter)
96 : CommandObjectMultiword(interpreter, "statistics",
97 "Print statistics about a debugging session",
98 "statistics <subcommand> [<subcommand-options>]") {
99 LoadSubCommand("enable",
100 CommandObjectSP(new CommandObjectStatsEnable(interpreter)));
101 LoadSubCommand("disable",
102 CommandObjectSP(new CommandObjectStatsDisable(interpreter)));
103 LoadSubCommand("dump",
104 CommandObjectSP(new CommandObjectStatsDump(interpreter)));
107 CommandObjectStats::~CommandObjectStats() = default;