From f02bd4daff968d44c9c348cec93cd3ef64d4754b Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Thu, 19 Apr 2018 21:14:01 -0700 Subject: [PATCH] Debugger: Use a counter when entering stepping. This allows us to poll coreState and know if a new stepping needs to be sent. This is useful to allow e.g. regs to show changes per step. --- Core/Debugger/WebSocket/SteppingBroadcaster.cpp | 15 +++++++++------ Core/Debugger/WebSocket/SteppingBroadcaster.h | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/Core/Debugger/WebSocket/SteppingBroadcaster.cpp b/Core/Debugger/WebSocket/SteppingBroadcaster.cpp index 89e91bc63d..35b1a8c124 100644 --- a/Core/Debugger/WebSocket/SteppingBroadcaster.cpp +++ b/Core/Debugger/WebSocket/SteppingBroadcaster.cpp @@ -21,15 +21,18 @@ #include "Core/System.h" void SteppingBroadcaster::Broadcast(net::WebSocketServer *ws) { - // TODO: This is somewhat primitive. It'd be nice to register a callback with Core instead? - if (coreState != prevState_ && PSP_IsInited()) { - // We ignore CORE_POWERDOWN. - if (coreState == CORE_STEPPING) { + if (PSP_IsInited()) { + int steppingCounter = Core_GetSteppingCounter(); + // We ignore CORE_POWERDOWN as a stepping state. + if (coreState == CORE_STEPPING && steppingCounter != lastCounter_) { // TODO: Should send more data proactively. ws->Send(R"({"event":"cpu.stepping"})"); - } else if (prevState_ == CORE_STEPPING && Core_IsActive()) { + } else if (prevState_ == CORE_STEPPING && coreState != CORE_STEPPING && Core_IsActive()) { ws->Send(R"({"event":"cpu.resume"})"); } + lastCounter_ = steppingCounter; + prevState_ = coreState; + } else { + prevState_ = CORE_POWERDOWN; } - prevState_ = coreState; } diff --git a/Core/Debugger/WebSocket/SteppingBroadcaster.h b/Core/Debugger/WebSocket/SteppingBroadcaster.h index df196d9ff8..4ca34f4552 100644 --- a/Core/Debugger/WebSocket/SteppingBroadcaster.h +++ b/Core/Debugger/WebSocket/SteppingBroadcaster.h @@ -33,4 +33,5 @@ public: private: CoreState prevState_; + int lastCounter_ = 0; };