forked from OSchip/llvm-project
107 lines
3.6 KiB
C++
107 lines
3.6 KiB
C++
//===-- 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;
|