Merge remote-tracking branch 'origin/GP-0_d-millar_memview_mods'

This commit is contained in:
Ryan Kurtz 2025-03-24 15:20:08 -04:00
commit 8fcda62c5b
2 changed files with 29 additions and 6 deletions

View file

@ -15,17 +15,21 @@
*/ */
package ghidra.app.plugin.core.debug.gui.memview; package ghidra.app.plugin.core.debug.gui.memview;
import java.awt.Color;
import java.util.*; import java.util.*;
import ghidra.async.AsyncDebouncer; import ghidra.async.AsyncDebouncer;
import ghidra.async.AsyncTimer; import ghidra.async.AsyncTimer;
import ghidra.debug.api.tracemgr.DebuggerCoordinates; import ghidra.debug.api.tracemgr.DebuggerCoordinates;
import ghidra.framework.model.DomainObjectChangeRecord;
import ghidra.framework.model.DomainObjectEvent;
import ghidra.program.model.address.*; import ghidra.program.model.address.*;
import ghidra.trace.database.module.TraceObjectSection; import ghidra.trace.database.module.TraceObjectSection;
import ghidra.trace.model.*; import ghidra.trace.model.*;
import ghidra.trace.model.breakpoint.*; import ghidra.trace.model.breakpoint.*;
import ghidra.trace.model.memory.*; import ghidra.trace.model.memory.*;
import ghidra.trace.model.modules.*; import ghidra.trace.model.modules.*;
import ghidra.trace.model.stack.*;
import ghidra.trace.model.target.TraceObject; import ghidra.trace.model.target.TraceObject;
import ghidra.trace.model.thread.*; import ghidra.trace.model.thread.*;
import ghidra.trace.util.TraceEvents; import ghidra.trace.util.TraceEvents;
@ -79,6 +83,8 @@ public class DebuggerMemviewTraceListener extends TraceDomainObjectListener {
listenFor(TraceEvents.BREAKPOINT_DELETED, this::breakpointChanged); listenFor(TraceEvents.BREAKPOINT_DELETED, this::breakpointChanged);
listenFor(TraceEvents.BYTES_CHANGED, this::bytesChanged); listenFor(TraceEvents.BYTES_CHANGED, this::bytesChanged);
listenForUntyped(DomainObjectEvent.RESTORED, this::objectRestored);
} }
public MemviewProvider getProvider() { public MemviewProvider getProvider() {
@ -180,6 +186,14 @@ public class DebuggerMemviewTraceListener extends TraceDomainObjectListener {
updateLabelDebouncer.contact(null); updateLabelDebouncer.contact(null);
} }
private void objectRestored(DomainObjectChangeRecord domainObjectChangeRecord) {
if (!trackTrace) {
return;
}
processTrace(currentTrace);
updateLabelDebouncer.contact(null);
}
private void doUpdate() { private void doUpdate() {
provider.addBoxes(updateList); provider.addBoxes(updateList);
} }
@ -208,6 +222,7 @@ public class DebuggerMemviewTraceListener extends TraceDomainObjectListener {
removeListener(); removeListener();
} }
current = coordinates; current = coordinates;
currentTrace = current.getTrace();
if (doListeners) { if (doListeners) {
addListener(); addListener();
} }
@ -248,7 +263,7 @@ public class DebuggerMemviewTraceListener extends TraceDomainObjectListener {
private void processTrace(Trace trace) { private void processTrace(Trace trace) {
updateList.clear(); updateList.clear();
provider.reset(); //provider.reset();
if (!provider.isVisible()) { if (!provider.isVisible()) {
return; return;
} }

View file

@ -42,16 +42,20 @@ public class MemoryBox {
protected int pixTstart; protected int pixTstart;
protected int pixTend; protected int pixTend;
protected int boundT; protected int boundT;
protected final Color color; protected Color color;
protected boolean current; protected boolean current;
public MemoryBox(String id, MemviewBoxType type, AddressRange range, long tick) { public MemoryBox(String id, MemviewBoxType type, AddressRange range, long tick, Color color) {
this.id = id; this.id = id;
this.type = type; this.type = type;
this.range = range; this.range = range;
this.start = tick; this.start = tick;
this.color = type.getColor(); this.color = color;
}
public MemoryBox(String id, MemviewBoxType type, AddressRange range, long tick) {
this(id, type, range, tick, type.getColor());
} }
public MemoryBox(String id, MemviewBoxType type, AddressRange range, Lifespan trange) { public MemoryBox(String id, MemviewBoxType type, AddressRange range, Lifespan trange) {
@ -91,6 +95,10 @@ public class MemoryBox {
return color; return color;
} }
public void setColor(Color color) {
this.color = color;
}
public int getAddressPixelStart() { public int getAddressPixelStart() {
return pixAstart; return pixAstart;
} }