From 22ba0f2b7ab067132d950f37dbe18cd39bd54a82 Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Mon, 18 Aug 2014 17:57:29 +0400 Subject: [PATCH] reverted view update delay, BEFORE_RESUME can not be delayed --- .../xdebugger/impl/frame/XDebugView.java | 33 ++++++++++--------- .../impl/frame/XDebugViewSessionListener.java | 2 +- .../xdebugger/impl/frame/XFramesView.java | 4 ++- .../xdebugger/impl/frame/XVariablesView.java | 3 +- .../impl/frame/XWatchesViewImpl.java | 3 +- .../xdebugger/impl/ui/XDebugSessionTab.java | 2 +- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java index d26258d39d2a..0007ec2f9997 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugView.java @@ -20,7 +20,7 @@ import com.intellij.ide.DataManager; import com.intellij.openapi.Disposable; import com.intellij.openapi.actionSystem.DataContext; import com.intellij.ui.content.ContentManager; -import com.intellij.util.Alarm; +import com.intellij.util.SingleAlarm; import com.intellij.xdebugger.XDebugSession; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,26 +34,29 @@ import java.util.EventObject; public abstract class XDebugView implements Disposable { public enum SessionEvent {PAUSED, BEFORE_RESUME, RESUMED, STOPPED, FRAME_CHANGED, SETTINGS_CHANGED} - private final Alarm myUpdateAlarm; - private static final int VIEW_UPDATE_DELAY = 100; //ms + private final SingleAlarm myClearAlarm; + private static final int VIEW_CLEAR_DELAY = 100; //ms public XDebugView() { - myUpdateAlarm = new Alarm(this); + myClearAlarm = new SingleAlarm(new Runnable() { + @Override + public void run() { + clear(); + } + }, VIEW_CLEAR_DELAY, this); + } + + protected final void requestClear() { + myClearAlarm.cancelAndRequest(); + } + + protected final void cancelClear() { + myClearAlarm.cancel(); } protected abstract void clear(); - public void onSessionEvent(@NotNull final SessionEvent event) { - myUpdateAlarm.cancelAllRequests(); - myUpdateAlarm.addRequest(new Runnable() { - @Override - public void run() { - processSessionEvent(event); - } - }, VIEW_UPDATE_DELAY); - } - - protected abstract void processSessionEvent(@NotNull SessionEvent event); + public abstract void processSessionEvent(@NotNull SessionEvent event); @Nullable protected static XDebugSession getSession(@NotNull EventObject e) { diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java index 2e21ed0f2248..d790113b1816 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XDebugViewSessionListener.java @@ -36,7 +36,7 @@ public class XDebugViewSessionListener extends XDebugSessionAdapter { AppUIUtil.invokeLaterIfProjectAlive(session.getProject(), new Runnable() { @Override public void run() { - myDebugView.onSessionEvent(event); + myDebugView.processSessionEvent(event); } }); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java index 6ab8acd1152e..b98440b5d69f 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XFramesView.java @@ -221,11 +221,13 @@ public class XFramesView extends XDebugView { mySelectedStack = null; XSuspendContext suspendContext = session == null ? null : session.getSuspendContext(); if (suspendContext == null) { - clear(); + requestClear(); return; } if (event == SessionEvent.PAUSED) { + // clear immediately + cancelClear(); clear(); } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java index c1232b572433..df43b1147419 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XVariablesView.java @@ -57,10 +57,11 @@ public class XVariablesView extends XVariablesViewBase { tree.markNodesObsolete(); if (stackFrame != null) { + cancelClear(); buildTreeAndRestoreState(stackFrame); } else { - clear(); + requestClear(); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java index b8d088d79231..c510cd17c90a 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/frame/XWatchesViewImpl.java @@ -275,6 +275,7 @@ public class XWatchesViewImpl extends XDebugView implements DnDNativeTarget, XWa XDebugSession session = getSession(getMainPanel()); XStackFrame stackFrame = session == null ? null : session.getCurrentStackFrame(); if (stackFrame != null) { + cancelClear(); tree.setSourcePosition(stackFrame.getSourcePosition()); myRootNode.updateWatches(stackFrame.getEvaluator()); if (myTreeState != null) { @@ -282,7 +283,7 @@ public class XWatchesViewImpl extends XDebugView implements DnDNativeTarget, XWa } } else { - clear(); + requestClear(); } } diff --git a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java index d7e2354835fd..4c3766f23f5d 100644 --- a/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java +++ b/platform/xdebugger-impl/src/com/intellij/xdebugger/impl/ui/XDebugSessionTab.java @@ -197,7 +197,7 @@ public class XDebugSessionTab extends DebuggerSessionTabBase { @Override public void run() { for (XDebugView view : myViews) { - view.onSessionEvent(XDebugView.SessionEvent.SETTINGS_CHANGED); + view.processSessionEvent(XDebugView.SessionEvent.SETTINGS_CHANGED); } } });