mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2026-05-31 02:36:29 +08:00
GP-5494: Fix byte cache and increase number of cached pages (memory viewer).
This commit is contained in:
+33
@@ -17,6 +17,7 @@ package ghidra.app.plugin.core.debug.gui.memory;
|
||||
|
||||
import static ghidra.lifecycle.Unfinished.TODO;
|
||||
import static org.junit.Assert.*;
|
||||
import static org.junit.Assume.assumeFalse;
|
||||
|
||||
import java.awt.*;
|
||||
import java.awt.datatransfer.Clipboard;
|
||||
@@ -62,13 +63,16 @@ import ghidra.program.model.lang.RegisterValue;
|
||||
import ghidra.program.util.ProgramLocation;
|
||||
import ghidra.trace.database.ToyDBTraceBuilder;
|
||||
import ghidra.trace.database.memory.DBTraceMemoryManager;
|
||||
import ghidra.trace.database.memory.DBTraceMemorySpace;
|
||||
import ghidra.trace.database.stack.DBTraceStackManager;
|
||||
import ghidra.trace.database.time.DBTraceTimeManager;
|
||||
import ghidra.trace.model.Lifespan;
|
||||
import ghidra.trace.model.memory.*;
|
||||
import ghidra.trace.model.modules.TraceModule;
|
||||
import ghidra.trace.model.stack.TraceStack;
|
||||
import ghidra.trace.model.target.TraceObject;
|
||||
import ghidra.trace.model.thread.TraceThread;
|
||||
import ghidra.util.SystemUtilities;
|
||||
|
||||
@Category(NightlyCategory.class)
|
||||
public class DebuggerMemoryBytesProviderTest extends AbstractGhidraHeadedDebuggerIntegrationTest {
|
||||
@@ -1184,4 +1188,33 @@ public class DebuggerMemoryBytesProviderTest extends AbstractGhidraHeadedDebugge
|
||||
|
||||
rmiCx.withdrawTarget(tool, tb.trace);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPerformanceManuallyWithManyManySnaps() throws Exception {
|
||||
assumeFalse(SystemUtilities.isInTestingBatchMode());
|
||||
createAndOpenTrace();
|
||||
|
||||
// LATER (GP-5594): 100_000 without checkStateMapIntegrity will crash.
|
||||
final long snapCount = 100_000;
|
||||
try (Transaction tx = tb.startTransaction()) {
|
||||
tb.trace.getMemoryManager()
|
||||
.addRegion("Processes[1].Memory[exe:.text]", Lifespan.nowOn(0L),
|
||||
tb.range(0x55550000, 0x5555ffff), TraceMemoryFlag.READ,
|
||||
TraceMemoryFlag.EXECUTE);
|
||||
DBTraceTimeManager time = tb.trace.getTimeManager();
|
||||
DBTraceMemorySpace space = tb.trace.getMemoryManager()
|
||||
.getForSpace(tb.host.getAddressFactory().getDefaultAddressSpace(), true);
|
||||
for (int i = 0; i < snapCount; i++) {
|
||||
time.getSnapshot(i, true);
|
||||
space.putBytes(i, tb.addr(0x55550000 + (i & 0xffff)), tb.buf(i & 0xff));
|
||||
if (i % 1000 == 0) {
|
||||
space.checkStateMapIntegrity();
|
||||
}
|
||||
}
|
||||
}
|
||||
traceManager.activateTrace(tb.trace);
|
||||
traceManager.activateSnap(snapCount - 1);
|
||||
|
||||
Thread.sleep(1); // breakpoint here
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user