Core: Speed up some debugger usage in interepter if not being used
This commit is contained in:
parent
d918225639
commit
4a68941c08
|
@ -121,7 +121,10 @@ void R4300iOp::ExecuteOps(uint32_t Cycles)
|
|||
g_Settings->SaveBool(Debugger_SteppingOps, true);
|
||||
}
|
||||
|
||||
if (TrackCPUStepStarted())
|
||||
{
|
||||
g_Debugger->CPUStepStarted(); // May set stepping ops/skip op
|
||||
}
|
||||
|
||||
if (isStepping())
|
||||
{
|
||||
|
@ -136,8 +139,11 @@ void R4300iOp::ExecuteOps(uint32_t Cycles)
|
|||
continue;
|
||||
}
|
||||
|
||||
if (TrackCPUStep())
|
||||
{
|
||||
g_Debugger->CPUStep();
|
||||
}
|
||||
}
|
||||
|
||||
(this->*Jump_Opcode[m_Opcode.op])();
|
||||
m_GPR[0].DW = 0; // MIPS $zero hard-wired to 0
|
||||
|
@ -147,7 +153,7 @@ void R4300iOp::ExecuteOps(uint32_t Cycles)
|
|||
Cycles -= CountPerOp;
|
||||
}
|
||||
|
||||
if (CDebugSettings::HaveDebugger())
|
||||
if (TrackCPUStepEnded())
|
||||
{
|
||||
g_Debugger->CPUStepEnded();
|
||||
}
|
||||
|
|
|
@ -344,6 +344,8 @@ void CSettings::AddHowToHandleSetting(const char * BaseDirectory)
|
|||
AddHandler(Debugger_AppLogFlush, new CSettingTypeApplication("Logging", "Log Auto Flush", (uint32_t) false));
|
||||
AddHandler(Debugger_RecordRecompilerAsm, new CSettingTypeApplication("Debugger", "Record Recompiler Asm", false));
|
||||
AddHandler(Debugger_AutorunScripts, new CSettingTypeApplication("Debugger", "Autorun Scripts", ""));
|
||||
AddHandler(Debugger_TrackCPUStepStarted, new CSettingTypeTempBool(false));
|
||||
AddHandler(Debugger_TrackCPUStepEnded, new CSettingTypeTempBool(false));
|
||||
|
||||
// Logging
|
||||
AddHandler(Debugger_TraceMD5, new CSettingTypeApplication("Logging", "MD5", (uint32_t)g_ModuleLogLevel[TraceMD5]));
|
||||
|
|
|
@ -26,6 +26,8 @@ bool CDebugSettings::m_EndOnPermLoop = false;
|
|||
bool CDebugSettings::m_BreakOnUnhandledMemory = false;
|
||||
bool CDebugSettings::m_BreakOnAddressError = false;
|
||||
bool CDebugSettings::m_StepOnBreakOpCode = false;
|
||||
bool CDebugSettings::m_TrackCPUStepStarted = false;
|
||||
bool CDebugSettings::m_TrackCPUStepEnded = false;
|
||||
|
||||
CDebugSettings::CDebugSettings()
|
||||
{
|
||||
|
@ -52,6 +54,8 @@ CDebugSettings::CDebugSettings()
|
|||
g_Settings->RegisterChangeCB(Debugger_BreakOnUnhandledMemory, 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_TrackCPUStepStarted, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
|
||||
g_Settings->RegisterChangeCB(Debugger_TrackCPUStepEnded, this, (CSettings::SettingChangedFunc)StaticRefreshSettings);
|
||||
|
||||
RefreshSettings();
|
||||
}
|
||||
|
@ -80,6 +84,8 @@ CDebugSettings::~CDebugSettings()
|
|||
g_Settings->UnregisterChangeCB(Debugger_BreakOnUnhandledMemory, 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_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_BreakOnAddressError = m_HaveDebugger && g_Settings->LoadBool(Debugger_BreakOnAddressError);
|
||||
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);
|
||||
}
|
|
@ -93,6 +93,21 @@ public:
|
|||
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:
|
||||
static void StaticRefreshSettings(CDebugSettings * _this)
|
||||
{
|
||||
|
@ -122,6 +137,8 @@ private:
|
|||
static bool m_BreakOnUnhandledMemory;
|
||||
static bool m_BreakOnAddressError;
|
||||
static bool m_StepOnBreakOpCode;
|
||||
static bool m_TrackCPUStepStarted;
|
||||
static bool m_TrackCPUStepEnded;
|
||||
|
||||
static int32_t m_RefCount;
|
||||
static bool m_Registered;
|
||||
|
|
|
@ -270,6 +270,8 @@ enum SettingID
|
|||
Debugger_IntrBreakpoints,
|
||||
Debugger_RcpIntrBreakpoints,
|
||||
Debugger_AutorunScripts,
|
||||
Debugger_TrackCPUStepStarted,
|
||||
Debugger_TrackCPUStepEnded,
|
||||
|
||||
// Trace
|
||||
Debugger_TraceMD5,
|
||||
|
|
|
@ -318,6 +318,7 @@ void CBreakpoints::ToggleMemLock(uint32_t address)
|
|||
if (m_MemLocks.count(address) == 0)
|
||||
{
|
||||
m_MemLocks.insert(address);
|
||||
g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true);
|
||||
return;
|
||||
}
|
||||
m_MemLocks.erase(address);
|
||||
|
@ -348,6 +349,10 @@ size_t CBreakpoints::NumMemLocks()
|
|||
void CBreakpoints::UpdateHaveRegBP(void)
|
||||
{
|
||||
m_bHaveRegBP = HaveAnyGPRWriteBP() || HaveAnyGPRReadBP() || HaveHIWriteBP() || HaveHIReadBP() || HaveLOWriteBP() || HaveLOReadBP();
|
||||
if (m_bHaveRegBP)
|
||||
{
|
||||
g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true);
|
||||
}
|
||||
}
|
||||
|
||||
void CBreakpoints::ToggleGPRWriteBP(int nReg)
|
||||
|
|
|
@ -427,6 +427,7 @@ void CDebuggerUI::OpenStackTraceWindow(void)
|
|||
if (m_StackTrace == nullptr)
|
||||
{
|
||||
m_StackTrace = new CDebugStackTrace(this);
|
||||
g_Settings->SaveBool(Debugger_TrackCPUStepEnded, true);
|
||||
}
|
||||
m_StackTrace->ShowWindow();
|
||||
}
|
||||
|
|
|
@ -487,6 +487,7 @@ JSAppCallbackID CScriptSystem::RawAddAppCallback(JSAppHookID hookId, JSAppCallba
|
|||
return JS_INVALID_CALLBACK;
|
||||
}
|
||||
|
||||
g_Settings->SaveBool(Debugger_TrackCPUStepStarted, true);
|
||||
callback.m_Instance->IncRefCount();
|
||||
callback.m_CallbackId = m_NextAppCallbackId++;
|
||||
m_AppCallbackHooks[hookId].push_back(callback);
|
||||
|
|
Loading…
Reference in New Issue