A lightweight and interactive back-in-time debugger for Squeak to trace and retrace past method invocations and state changes. Powered by SimulationStudio.
[ ] TDBTrace>>#traceAtTime:ifAbsent: (18.4%) - single index for all traces?
[ ] TDBTrace>>#enableSimulatorDuring:: Currently, we are customizing all contexts there, which makes every forward-step in a large tree an expensive operation. Would it be fine only to customize the top context instead? Or could we at least exclude dead contexts (this would still be an optimization from O(n) to O(√n))?
Ideas for reducing space consumption:
[ ] Use dense table memory layout for certain objects/slots (i.e., Context/pc)?
[ ] Reduce default size of TDBTrace.children? Currently, over 90% of all trace instances do have 2 children or less:
Current bottlenecks during tracing are:
TDBTrace>>#maxTimeIndex
(42%) - cache?TDBTrace>>#traceAtTime:ifAbsent:
(39%) - inline binary search? don't use#associations
.Remaining potential for optimization:
SimulationContext>>#customize:
(1.7%) - hard-code relevant subset ofcopyFrom:
TDBMemory>>#object:priorTo:atSlot:put:
(19.4%) - avoidthisContext
, anything else?TDBTrace>>#updateMaxTimeIndex:from:
(7.5%)TDBTrace>>#traceAtTime:ifAbsent:
(18.4%) - single index for all traces?TDBTrace>>#enableSimulatorDuring:
: Currently, we are customizing all contexts there, which makes every forward-step in a large tree an expensive operation. Would it be fine only to customize the top context instead? Or could we at least exclude dead contexts (this would still be an optimization from O(n) to O(√n))?Ideas for reducing space consumption:
Context
/pc
)?TDBTrace.children
? Currently, over 90% of all trace instances do have 2 children or less: