diff options
| author | Admiral H. Curtiss <pikachu025@gmail.com> | 2025-02-05 18:27:22 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-02-05 18:27:22 +0100 |
| commit | 6ee08fb9db58a8c05143673c8b5f2afd543c0181 (patch) | |
| tree | ab768952b052f466f82f9f777f87de7d8a256c5d /Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp | |
| parent | 99e3c6e2656df635896a3faf6c3f92caf32988e9 (diff) | |
| parent | bbf72e79f90714be6f1de4eea080911e7070f488 (diff) | |
Merge pull request #13302 from TryTwo/Breakpoints_Fix_Lag
Breakpoints: Fix lag when loading multiple memory breakpoints
Diffstat (limited to 'Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp')
| -rw-r--r-- | Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp | 45 |
1 files changed, 26 insertions, 19 deletions
diff --git a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp index 9f5bd628ff..75cafdd814 100644 --- a/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp +++ b/Source/Core/DolphinQt/Debugger/MemoryViewWidget.cpp @@ -994,29 +994,36 @@ void MemoryViewWidget::ToggleBreakpoint(u32 addr, bool row) if (row && memchecks.OverlapsMemcheck(addr, m_bytes_per_row)) overlap = true; - for (int i = 0; i < breaks; i++) { - u32 address = addr + length * i; - TMemCheck* check_ptr = memchecks.GetMemCheck(address, length); + const Core::CPUThreadGuard guard(m_system); - if (check_ptr == nullptr && !overlap) + for (int i = 0; i < breaks; i++) { - TMemCheck check; - check.start_address = address; - check.end_address = check.start_address + length - 1; - check.is_ranged = length > 0; - check.is_break_on_read = (m_bp_type == BPType::ReadOnly || m_bp_type == BPType::ReadWrite); - check.is_break_on_write = (m_bp_type == BPType::WriteOnly || m_bp_type == BPType::ReadWrite); - check.log_on_hit = m_do_log; - check.break_on_hit = true; - - memchecks.Add(std::move(check)); - } - else if (check_ptr != nullptr) - { - // Using the pointer fixes misaligned breakpoints (0x11 breakpoint in 0x10 aligned view). - memchecks.Remove(check_ptr->start_address); + u32 address = addr + length * i; + TMemCheck* check_ptr = memchecks.GetMemCheck(address, length); + + if (check_ptr == nullptr && !overlap) + { + TMemCheck check; + check.start_address = address; + check.end_address = check.start_address + length - 1; + check.is_ranged = length > 0; + check.is_break_on_read = (m_bp_type == BPType::ReadOnly || m_bp_type == BPType::ReadWrite); + check.is_break_on_write = + (m_bp_type == BPType::WriteOnly || m_bp_type == BPType::ReadWrite); + check.log_on_hit = m_do_log; + check.break_on_hit = true; + + memchecks.Add(std::move(check), false); + } + else if (check_ptr != nullptr) + { + // Using the pointer fixes misaligned breakpoints (0x11 breakpoint in 0x10 aligned view). + memchecks.Remove(check_ptr->start_address, false); + } } + + memchecks.Update(); } emit Host::GetInstance()->PPCBreakpointsChanged(); |
