1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-29 20:05:35 +02:00

Bug 323826 - Need a way to control the half second delay in SteppingControler

This commit is contained in:
Anton Leherbauer 2010-08-31 14:01:38 +00:00
parent 17241dc891
commit 785a5d1913

View file

@ -19,8 +19,6 @@ import java.util.Map;
import java.util.concurrent.RejectedExecutionException; import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ScheduledFuture; import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor; import org.eclipse.cdt.dsf.concurrent.ConfinedToDsfExecutor;
import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor;
import org.eclipse.cdt.dsf.concurrent.DsfExecutor; import org.eclipse.cdt.dsf.concurrent.DsfExecutor;
@ -59,9 +57,11 @@ import org.eclipse.jface.util.PropertyChangeEvent;
@ConfinedToDsfExecutor("#getExecutor()") @ConfinedToDsfExecutor("#getExecutor()")
public final class SteppingController { public final class SteppingController {
/** /**
* Amount of time in milliseconds, that it takes the SteppingTimedOutEvent * Default delay in milliseconds, that it takes the SteppingTimedOutEvent
* event to be issued after a step is started. * event to be issued after a step is started.
* @see SteppingTimedOutEvent * @see SteppingTimedOutEvent
* @see #setStepTimeout(int)
* @see #getStepTimeout()
*/ */
public final static int STEPPING_TIMEOUT = 500; public final static int STEPPING_TIMEOUT = 500;
@ -135,7 +135,12 @@ public final class SteppingController {
/** /**
* Minimum step interval in milliseconds. * Minimum step interval in milliseconds.
*/ */
private AtomicInteger fMinStepInterval= new AtomicInteger(0); private volatile int fMinStepInterval;
/**
* Step timeout in milliseconds.
*/
private volatile int fStepTimeout = STEPPING_TIMEOUT;
/** /**
* Map of execution contexts for which a step is in progress. * Map of execution contexts for which a step is in progress.
@ -194,7 +199,29 @@ public final class SteppingController {
*/ */
@ThreadSafe @ThreadSafe
public void setMinimumStepInterval(int interval) { public void setMinimumStepInterval(int interval) {
fMinStepInterval.set(interval); fMinStepInterval = interval;
}
/**
* Configure the step timeout value. This controls the delay how long it takes
* to send out the {@link SteppingTimedOutEvent} after a step has been issued.
*
* @param timeout The timeout value in milliseconds (must be non-negative).
* @since 2.2
*/
@ThreadSafe
public void setStepTimeout(int timeout) {
assert timeout >= 0;
fStepTimeout = timeout;
}
/**
* @return the currently configured step timeout value
* @since 2.2
*/
@ThreadSafe
public int getStepTimeout() {
return fStepTimeout;
} }
/** /**
@ -315,7 +342,7 @@ public final class SteppingController {
* @return the number of milliseconds before the next possible step * @return the number of milliseconds before the next possible step
*/ */
private int getStepDelay(IExecutionDMContext execCtx) { private int getStepDelay(IExecutionDMContext execCtx) {
int minStepInterval = fMinStepInterval.get(); int minStepInterval = fMinStepInterval;
if (minStepInterval > 0) { if (minStepInterval > 0) {
for (IExecutionDMContext lastStepCtx : fLastStepTimes.keySet()) { for (IExecutionDMContext lastStepCtx : fLastStepTimes.keySet()) {
if (execCtx.equals(lastStepCtx) || DMContexts.isAncestorOf(execCtx, lastStepCtx)) { if (execCtx.equals(lastStepCtx) || DMContexts.isAncestorOf(execCtx, lastStepCtx)) {
@ -588,7 +615,7 @@ public final class SteppingController {
null); null);
} }
}}, }},
STEPPING_TIMEOUT, TimeUnit.MILLISECONDS) fStepTimeout, TimeUnit.MILLISECONDS)
); );
} }