1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Bug 310052 - [debug view] Allow overriding StackFramesVMNode event handling methods.

This commit is contained in:
Pawel Piech 2010-04-23 22:16:47 +00:00
parent 8a353a1758
commit c5b9a25c25

View file

@ -564,7 +564,7 @@ public class StackFramesVMNode extends AbstractDMVMNode
} else if (e instanceof IExitedDMEvent) {
// Do not generate a delta for this event, but do clear the
// internal stack frame limit to avoid a memory leak.
clearStackFrameLimit( ((IExitedDMEvent)e).getDMContext() );
resetStackFrameLimit( ((IExitedDMEvent)e).getDMContext() );
return IModelDelta.NO_CHANGE;
} else if (e instanceof PropertyChangeEvent) {
String property = ((PropertyChangeEvent)e).getProperty();
@ -588,7 +588,7 @@ public class StackFramesVMNode extends AbstractDMVMNode
public void buildDelta(final Object e, final VMDelta parent, final int nodeOffset, final RequestMonitor rm) {
if (e instanceof IContainerSuspendedDMEvent) {
// Clear the limit on the stack frames for all stack frames under a given container.
clearStackFrameLimit( ((IContainerSuspendedDMEvent)e).getDMContext() );
resetStackFrameLimit( ((IContainerSuspendedDMEvent)e).getDMContext() );
IContainerSuspendedDMEvent csEvent = (IContainerSuspendedDMEvent)e;
@ -606,7 +606,7 @@ public class StackFramesVMNode extends AbstractDMVMNode
IExecutionDMContext execDmc = ((FullStackRefreshEvent)e).getDMContext();
buildDeltaForFullStackRefreshEvent(execDmc, execDmc, parent, nodeOffset, rm);
} else if (e instanceof ISuspendedDMEvent) {
clearStackFrameLimit( ((ISuspendedDMEvent)e).getDMContext() );
resetStackFrameLimit( ((ISuspendedDMEvent)e).getDMContext() );
IExecutionDMContext execDmc = ((ISuspendedDMEvent)e).getDMContext();
buildDeltaForSuspendedEvent(execDmc, execDmc, parent, nodeOffset, rm);
} else if (e instanceof SteppingTimedOutEvent) {
@ -632,7 +632,16 @@ public class StackFramesVMNode extends AbstractDMVMNode
}
}
private void buildDeltaForSuspendedEvent(final IExecutionDMContext executionCtx, final IExecutionDMContext triggeringCtx, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
/**
* Builds the delta in response to a suspended event.
* <p>
* Default behavior is to expand the thread, repaint <strong>only</strong>
* the top stack frame and select it. The rest of the frames will be
* repainted after a short delay.
*
* @since 2.1
*/
protected void buildDeltaForSuspendedEvent(final IExecutionDMContext executionCtx, final IExecutionDMContext triggeringCtx, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
// Check if we are building a delta for the thread that triggered the event.
// Only then expand the stack frames and select the top one.
if (executionCtx.equals(triggeringCtx)) {
@ -659,7 +668,16 @@ public class StackFramesVMNode extends AbstractDMVMNode
}
}
private void buildDeltaForFullStackRefreshEvent(final IExecutionDMContext executionCtx, final IExecutionDMContext triggeringCtx, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
/**
* Builds a delta in response to automatic refresh event generated after
* every suspend event.
* <p>
* The default behavior is to check if the thread is
* still stepping or suspended and refresh the stack trace.
*
* @since 2.1
*/
protected void buildDeltaForFullStackRefreshEvent(final IExecutionDMContext executionCtx, final IExecutionDMContext triggeringCtx, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
try {
getSession().getExecutor().execute(new DsfRunnable() {
public void run() {
@ -687,14 +705,30 @@ public class StackFramesVMNode extends AbstractDMVMNode
}
}
private void buildDeltaForSteppingTimedOutEvent(final SteppingTimedOutEvent e, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
/**
* Builds the delta in response to a time-out after stepping over a long
* executing function.
* <p>
* The default behavior is to repainting the stack frame images to
* show the running symbol.
*
* @since 2.1
*/
protected void buildDeltaForSteppingTimedOutEvent(final SteppingTimedOutEvent e, final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
// Repaint the stack frame images to have the running symbol.
//parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
rm.done();
}
private void buildDeltaForModelProxyInstalledEvent(final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
// Retrieve the list of stack frames, and mark the top frame to be selected.
/**
* Builds the delta in response the debug view being opened.
* <p>
* The default behavior is to retrieve the list of stack frames,
* and mark the top frame to be selected.
*
* @since 2.1
*/
protected void buildDeltaForModelProxyInstalledEvent(final VMDelta parentDelta, final int nodeOffset, final RequestMonitor rm) {
getVMProvider().updateNode(
this,
new VMChildrenUpdate(
@ -711,7 +745,16 @@ public class StackFramesVMNode extends AbstractDMVMNode
);
}
private void buildDeltaForExpandStackEvent(IExecutionDMContext execDmc, final VMDelta parentDelta, final RequestMonitor rm) {
/**
* Builds the delta in response to the user requesting to retrieve
* additional stack frames (changing the current stack frames limit).
* <p>
* The default behavior is to refresh the stack frames, and to select the
* first frame of the new frames that are retrieved.
*
* @since 2.1
*/
protected void buildDeltaForExpandStackEvent(IExecutionDMContext execDmc, final VMDelta parentDelta, final RequestMonitor rm) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
// Retrieve the list of new stack frames, and mark the first frame to be selected.
final int offset = getStackFrameLimit(execDmc) / 2;
@ -733,7 +776,14 @@ public class StackFramesVMNode extends AbstractDMVMNode
}
private void buildDeltaForStackFrameLimitPreferenceChangedEvent(final VMDelta parentDelta, final RequestMonitor rm) {
/**
* Builds the delta in response to the stack frame limit preference changing.
* <p>
* Default behavior is to refresh the stack frames.
*
* @since 2.1
*/
protected void buildDeltaForStackFrameLimitPreferenceChangedEvent(final VMDelta parentDelta, final RequestMonitor rm) {
parentDelta.setFlags(parentDelta.getFlags() | IModelDelta.CONTENT);
rm.done();
}
@ -835,7 +885,15 @@ public class StackFramesVMNode extends AbstractDMVMNode
return Integer.MAX_VALUE;
}
private void clearStackFrameLimit(IExecutionDMContext execCtx) {
/**
* Resets the temporary stack frame limit for the given execution context.
* The stack frame limit should be reset when the a thread is suspended.
*
* @param execCtx
*
* @since 2.1
*/
protected void resetStackFrameLimit(IExecutionDMContext execCtx) {
if (execCtx instanceof IContainerDMContext) {
for (Iterator<IExecutionDMContext> itr = fTemporaryLimits.keySet().iterator(); itr.hasNext();) {
IExecutionDMContext limitCtx = itr.next();