forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			106 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			106 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			C++
		
	
	
	
//===-- CommandObjectStats.cpp --------------------------------------------===//
 | 
						|
//
 | 
						|
// 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/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;
 |