From b3e4bc8052b16de7df95aee9a9649fa515a56a4b Mon Sep 17 00:00:00 2001 From: Sour Date: Tue, 18 Jun 2024 22:45:40 +0900 Subject: [PATCH] Debugger: Fixed elapsed cycle counter sometimes giving an incorrect value when "refresh while running" is enabled --- .../StatusViews/BaseConsoleStatusViewModel.cs | 21 +++++++++++++++---- .../ViewModels/DebuggerWindowViewModel.cs | 2 +- 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/UI/Debugger/StatusViews/BaseConsoleStatusViewModel.cs b/UI/Debugger/StatusViews/BaseConsoleStatusViewModel.cs index 7eb3ca1db..2e0e02768 100644 --- a/UI/Debugger/StatusViews/BaseConsoleStatusViewModel.cs +++ b/UI/Debugger/StatusViews/BaseConsoleStatusViewModel.cs @@ -14,6 +14,9 @@ public abstract class BaseConsoleStatusViewModel : ViewModelBase private bool _isUpdatingUi = false; private bool _needUpdate = false; + private UInt64 _lastBreakCycleCount = 0; + private bool _isRunning = false; + public BaseConsoleStatusViewModel() { PropertyChanged += BaseConsoleStatusViewModel_PropertyChanged; @@ -34,19 +37,29 @@ private void BaseConsoleStatusViewModel_PropertyChanged(object? sender, Property public void UpdateCycleCount(UInt64 newCycleCount) { - if(newCycleCount > CycleCount) { - ElapsedCycles = newCycleCount - CycleCount; + CycleCount = newCycleCount; + + if(_isRunning) { + //Don't reset elapsed value if refresh done because "refresh while running" is enabled + return; + } + + if(newCycleCount > _lastBreakCycleCount) { + ElapsedCycles = newCycleCount - _lastBreakCycleCount; } else { ElapsedCycles = 0; } - CycleCount = newCycleCount; + + _lastBreakCycleCount = newCycleCount; } - public void UpdateUiState() + public void UpdateUiState(bool isRunning = false) { _isUpdatingUi = true; _needUpdate = false; + _isRunning = isRunning; InternalUpdateUiState(); + _isRunning = false; _isUpdatingUi = false; _needUpdate = false; } diff --git a/UI/Debugger/ViewModels/DebuggerWindowViewModel.cs b/UI/Debugger/ViewModels/DebuggerWindowViewModel.cs index a9f5105a7..033252eec 100644 --- a/UI/Debugger/ViewModels/DebuggerWindowViewModel.cs +++ b/UI/Debugger/ViewModels/DebuggerWindowViewModel.cs @@ -286,7 +286,7 @@ public void UpdateDebugger(bool forBreak = false, BreakEvent? evt = null) public void PartialRefresh(bool refreshWatch) { - ConsoleStatus?.UpdateUiState(); + ConsoleStatus?.UpdateUiState(true); MemoryMappings?.Refresh(); if(refreshWatch) { WatchList.UpdateWatch();