Core: Speed up some debugger usage in interepter if not being used

This commit is contained in:
zilmar 2025-02-06 12:24:39 +10:30
parent d918225639
commit 4a68941c08
8 changed files with 45 additions and 3 deletions

View File

@ -121,7 +121,10 @@ void R4300iOp::ExecuteOps(uint32_t Cycles)
g_Settings->SaveBool(Debugger_SteppingOps, true); g_Settings->SaveBool(Debugger_SteppingOps, true);
} }
g_Debugger->CPUStepStarted(); // May set stepping ops/skip op if (TrackCPUStepStarted())
{
g_Debugger->CPUStepStarted(); // May set stepping ops/skip op
}
if (isStepping()) if (isStepping())
{ {
@ -136,7 +139,10 @@ void R4300iOp::ExecuteOps(uint32_t Cycles)
continue; continue;
} }
g_Debugger->CPUStep(); if (TrackCPUStep())
{
g_Debugger->CPUStep();
}
} }
(this->*Jump_Opcode[m_Opcode.op])(); (this->*Jump_Opcode[m_Opcode.op])();
@ -147,7 +153,7 @@ void R4300iOp::ExecuteOps(uint32_t Cycles)
Cycles -= CountPerOp; Cycles -= CountPerOp;
} }
if (CDebugSettings::HaveDebugger()) if (TrackCPUStepEnded())
{ {
g_Debugger->CPUStepEnded(); g_Debugger->CPUStepEnded();
} }

View File

@ -344,6 +344,8 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
AddHandler(Debugger_AppLogFlush, new CSettingTypeApplication("Logging", "Log Auto Flush", (uint32_t) false)); AddHandler(Debugger_AppLogFlush, new CSettingTypeApplication("Logging", "Log Auto Flush", (uint32_t) false));
AddHandler(Debugger_RecordRecompilerAsm, new CSettingTypeApplication("Debugger", "Record Recompiler Asm", false)); AddHandler(Debugger_RecordRecompilerAsm, new CSettingTypeApplication("Debugger", "Record Recompiler Asm", false));
AddHandler(Debugger_AutorunScripts, new CSettingTypeApplication("Debugger", "Autorun Scripts", "")); AddHandler(Debugger_AutorunScripts, new CSettingTypeApplication("Debugger", "Autorun Scripts", ""));
AddHandler(Debugger_TrackCPUStepStarted, new CSettingTypeTempBool(false));
AddHandler(Debugger_TrackCPUStepEnded, new CSettingTypeTempBool(false));
// Logging // Logging
AddHandler(Debugger_TraceMD5, new CSettingTypeApplication("Logging", "MD5", (uint32_t)g_ModuleLogLevel[TraceMD5])); AddHandler(Debugger_TraceMD5, new CSettingTypeApplication("Logging", "MD5", (uint32_t)g_ModuleLogLevel[TraceMD5]));

View File

@ -26,6 +26,8 @@ bool CDebugSettings::m_EndOnPermLoop = false;
bool CDebugSettings::m_BreakOnUnhandledMemory = false; bool CDebugSettings::m_BreakOnUnhandledMemory = false;
bool CDebugSettings::m_BreakOnAddressError = false; bool CDebugSettings::m_BreakOnAddressError = false;
bool CDebugSettings::m_StepOnBreakOpCode = false; bool CDebugSettings::m_StepOnBreakOpCode = false;
bool CDebugSettings::m_TrackCPUStepStarted = false;
bool CDebugSettings::m_TrackCPUStepEnded = false;
CDebugSettings::CDebugSettings() CDebugSettings::CDebugSettings()
{ {
@ -52,6 +54,8 @@ CDebugSettings::CDebugSettings()
g_Settings->RegisterChangeCB(Debugger_BreakOnUnhandledMemory, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_BreakOnUnhandledMemory, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_BreakOnAddressError, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_BreakOnAddressError, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_StepOnBreakOpCode, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->RegisterChangeCB(Debugger_StepOnBreakOpCode, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_TrackCPUStepStarted, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->RegisterChangeCB(Debugger_TrackCPUStepEnded, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
RefreshSettings(); RefreshSettings();
} }
@ -80,6 +84,8 @@ CDebugSettings::~CDebugSettings()
g_Settings->UnregisterChangeCB(Debugger_BreakOnUnhandledMemory, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->UnregisterChangeCB(Debugger_BreakOnUnhandledMemory, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->UnregisterChangeCB(Debugger_BreakOnAddressError, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->UnregisterChangeCB(Debugger_BreakOnAddressError, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->UnregisterChangeCB(Debugger_StepOnBreakOpCode, this, (CSettings::SettingChangedFunc)StaticRefreshSettings); g_Settings->UnregisterChangeCB(Debugger_StepOnBreakOpCode, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->UnregisterChangeCB(Debugger_TrackCPUStepStarted, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
g_Settings->UnregisterChangeCB(Debugger_TrackCPUStepEnded, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
} }
} }
@ -104,6 +110,8 @@ void CDebugSettings::RefreshSettings()
m_BreakOnUnhandledMemory = m_HaveDebugger && g_Settings->LoadBool(Debugger_BreakOnUnhandledMemory); m_BreakOnUnhandledMemory = m_HaveDebugger && g_Settings->LoadBool(Debugger_BreakOnUnhandledMemory);
m_BreakOnAddressError = m_HaveDebugger && g_Settings->LoadBool(Debugger_BreakOnAddressError); m_BreakOnAddressError = m_HaveDebugger && g_Settings->LoadBool(Debugger_BreakOnAddressError);
m_StepOnBreakOpCode = m_HaveDebugger && g_Settings->LoadBool(Debugger_StepOnBreakOpCode); m_StepOnBreakOpCode = m_HaveDebugger && g_Settings->LoadBool(Debugger_StepOnBreakOpCode);
m_TrackCPUStepStarted = m_Stepping || m_ExceptionBreakpoints || (m_HaveDebugger && g_Settings->LoadBool(Debugger_TrackCPUStepStarted));
m_TrackCPUStepEnded = m_HaveDebugger && g_Settings->LoadBool(Debugger_TrackCPUStepEnded);
m_Debugging = m_HaveDebugger && (m_HaveExecutionBP || m_WaitingForStep || m_HaveWriteBP || m_HaveReadBP); m_Debugging = m_HaveDebugger && (m_HaveExecutionBP || m_WaitingForStep || m_HaveWriteBP || m_HaveReadBP);
} }

View File

@ -93,6 +93,21 @@ public:
return m_StepOnBreakOpCode; return m_StepOnBreakOpCode;
} }
static inline bool TrackCPUStepStarted(void)
{
return m_TrackCPUStepStarted;
}
static inline bool TrackCPUStepEnded(void)
{
return m_TrackCPUStepEnded;
}
static inline bool TrackCPUStep(void)
{
return m_bCPULoggingEnabled;
}
private: private:
static void StaticRefreshSettings(CDebugSettings * _this) static void StaticRefreshSettings(CDebugSettings * _this)
{ {
@ -122,6 +137,8 @@ private:
static bool m_BreakOnUnhandledMemory; static bool m_BreakOnUnhandledMemory;
static bool m_BreakOnAddressError; static bool m_BreakOnAddressError;
static bool m_StepOnBreakOpCode; static bool m_StepOnBreakOpCode;
static bool m_TrackCPUStepStarted;
static bool m_TrackCPUStepEnded;
static int32_t m_RefCount; static int32_t m_RefCount;
static bool m_Registered; static bool m_Registered;

View File

@ -270,6 +270,8 @@ enum SettingID
Debugger_IntrBreakpoints, Debugger_IntrBreakpoints,
Debugger_RcpIntrBreakpoints, Debugger_RcpIntrBreakpoints,
Debugger_AutorunScripts, Debugger_AutorunScripts,
Debugger_TrackCPUStepStarted,
Debugger_TrackCPUStepEnded,
// Trace // Trace
Debugger_TraceMD5, Debugger_TraceMD5,

View File

@ -318,6 +318,7 @@ void CBreakpoints::ToggleMemLock(uint32_t address)
if (m_MemLocks.count(address) == 0) if (m_MemLocks.count(address) == 0)
{ {
m_MemLocks.insert(address); m_MemLocks.insert(address);
g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true);
return; return;
} }
m_MemLocks.erase(address); m_MemLocks.erase(address);
@ -348,6 +349,10 @@ size_t CBreakpoints::NumMemLocks()
void CBreakpoints::UpdateHaveRegBP(void) void CBreakpoints::UpdateHaveRegBP(void)
{ {
m_bHaveRegBP = HaveAnyGPRWriteBP() || HaveAnyGPRReadBP() || HaveHIWriteBP() || HaveHIReadBP() || HaveLOWriteBP() || HaveLOReadBP(); m_bHaveRegBP = HaveAnyGPRWriteBP() || HaveAnyGPRReadBP() || HaveHIWriteBP() || HaveHIReadBP() || HaveLOWriteBP() || HaveLOReadBP();
if (m_bHaveRegBP)
{
g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true);
}
} }
void CBreakpoints::ToggleGPRWriteBP(int nReg) void CBreakpoints::ToggleGPRWriteBP(int nReg)

View File

@ -427,6 +427,7 @@ void CDebuggerUI::OpenStackTraceWindow(void)
if (m_StackTrace == nullptr) if (m_StackTrace == nullptr)
{ {
m_StackTrace = new CDebugStackTrace(this); m_StackTrace = new CDebugStackTrace(this);
g_Settings->SaveBool(Debugger_TrackCPUStepEnded, true);
} }
m_StackTrace->ShowWindow(); m_StackTrace->ShowWindow();
} }

View File

@ -487,6 +487,7 @@ JSAppCallbackID CScriptSystem::RawAddAppCallback(JSAppHookID hookId, JSAppCallba
return JS_INVALID_CALLBACK; return JS_INVALID_CALLBACK;
} }
g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true);
callback.m_Instance->IncRefCount(); callback.m_Instance->IncRefCount();
callback.m_CallbackId = m_NextAppCallbackId++; callback.m_CallbackId = m_NextAppCallbackId++;
m_AppCallbackHooks[hookId].push_back(callback); m_AppCallbackHooks[hookId].push_back(callback);