diff options
Diffstat (limited to 'lldb/source/Commands/CommandObjectStats.cpp')
| -rw-r--r-- | lldb/source/Commands/CommandObjectStats.cpp | 106 | 
1 files changed, 106 insertions, 0 deletions
diff --git a/lldb/source/Commands/CommandObjectStats.cpp b/lldb/source/Commands/CommandObjectStats.cpp new file mode 100644 index 000000000000..e3a1f9433662 --- /dev/null +++ b/lldb/source/Commands/CommandObjectStats.cpp @@ -0,0 +1,106 @@ +//===-- CommandObjectStats.cpp ----------------------------------*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "CommandObjectStats.h" +#include "lldb/Host/Host.h" +#include "lldb/Interpreter/CommandInterpreter.h" +#include "lldb/Interpreter/CommandReturnObject.h" +#include "lldb/Target/Target.h" + +using namespace lldb; +using namespace lldb_private; + +class CommandObjectStatsEnable : public CommandObjectParsed { +public: +  CommandObjectStatsEnable(CommandInterpreter &interpreter) +      : CommandObjectParsed(interpreter, "enable", +                            "Enable statistics collection", nullptr, +                            eCommandProcessMustBePaused) {} + +  ~CommandObjectStatsEnable() override = default; + +protected: +  bool DoExecute(Args &command, CommandReturnObject &result) override { +    Target &target = GetSelectedOrDummyTarget(); + +    if (target.GetCollectingStats()) { +      result.AppendError("statistics already enabled"); +      result.SetStatus(eReturnStatusFailed); +      return false; +    } + +    target.SetCollectingStats(true); +    result.SetStatus(eReturnStatusSuccessFinishResult); +    return true; +  } +}; + +class CommandObjectStatsDisable : public CommandObjectParsed { +public: +  CommandObjectStatsDisable(CommandInterpreter &interpreter) +      : CommandObjectParsed(interpreter, "disable", +                            "Disable statistics collection", nullptr, +                            eCommandProcessMustBePaused) {} + +  ~CommandObjectStatsDisable() override = default; + +protected: +  bool DoExecute(Args &command, CommandReturnObject &result) override { +    Target &target = GetSelectedOrDummyTarget(); + +    if (!target.GetCollectingStats()) { +      result.AppendError("need to enable statistics before disabling them"); +      result.SetStatus(eReturnStatusFailed); +      return false; +    } + +    target.SetCollectingStats(false); +    result.SetStatus(eReturnStatusSuccessFinishResult); +    return true; +  } +}; + +class CommandObjectStatsDump : public CommandObjectParsed { +public: +  CommandObjectStatsDump(CommandInterpreter &interpreter) +      : CommandObjectParsed(interpreter, "dump", "Dump statistics results", +                            nullptr, eCommandProcessMustBePaused) {} + +  ~CommandObjectStatsDump() override = default; + +protected: +  bool DoExecute(Args &command, CommandReturnObject &result) override { +    Target &target = GetSelectedOrDummyTarget(); + +    uint32_t i = 0; +    for (auto &stat : target.GetStatistics()) { +      result.AppendMessageWithFormat( +          "%s : %u\n", +          lldb_private::GetStatDescription(static_cast<lldb_private::StatisticKind>(i)) +              .c_str(), +          stat); +      i += 1; +    } +    result.SetStatus(eReturnStatusSuccessFinishResult); +    return true; +  } +}; + +CommandObjectStats::CommandObjectStats(CommandInterpreter &interpreter) +    : CommandObjectMultiword(interpreter, "statistics", +                             "Print statistics about a debugging session", +                             "statistics <subcommand> [<subcommand-options>]") { +  LoadSubCommand("enable", +                 CommandObjectSP(new CommandObjectStatsEnable(interpreter))); +  LoadSubCommand("disable", +                 CommandObjectSP(new CommandObjectStatsDisable(interpreter))); +  LoadSubCommand("dump", +                 CommandObjectSP(new CommandObjectStatsDump(interpreter))); +} + +CommandObjectStats::~CommandObjectStats() = default;  | 
