Skip to content

Commit be02e00

Browse files
author
Stefan Hahmann
committed
Prevent overly frequent navigation requests in OverlayNavigation.
Reasoning: Big Data Viewer may get stuck, if navigation requests are sent to it too frequently
1 parent 7708d2f commit be02e00

1 file changed

Lines changed: 16 additions & 5 deletions

File tree

src/main/java/org/mastodon/views/bdv/overlay/OverlayNavigation.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,10 @@ public class OverlayNavigation< V extends OverlayVertex< V, E >, E extends Overl
4646

4747
private NavigationBehaviour< V, E > navigationBehaviour;
4848

49+
private long lastNavigationTime = 0;
50+
51+
private static final int ANIMATION_DURATION = 300;
52+
4953
public OverlayNavigation(
5054
final AbstractViewerPanel panel,
5155
final OverlayGraph< V, E > graph )
@@ -82,6 +86,9 @@ public void setNavigationEtiquette( final NavigationEtiquette navigationEtiquett
8286
@Override
8387
public void navigateToVertex( final V vertex )
8488
{
89+
// Prevent too frequent navigation requests.
90+
if (shouldThrottle())
91+
return; // Throttle navigation requests.
8592
// Always move in T.
8693
final int tp = vertex.getTimepoint();
8794
panel.state().setCurrentTimepoint( tp );
@@ -90,17 +97,21 @@ public void navigateToVertex( final V vertex )
9097
final double[] target = navigationBehaviour.navigateToVertex( vertex, currentTransform );
9198
if ( target != null )
9299
{
93-
final TranslationAnimator animator = new TranslationAnimator( currentTransform, target, 300 );
94-
animator.setTime( System.currentTimeMillis() );
100+
final TranslationAnimator animator = new TranslationAnimator( currentTransform, target, ANIMATION_DURATION );
101+
animator.setTime( lastNavigationTime );
95102
panel.setTransformAnimator( animator );
96103
}
97-
98104
panel.requestRepaint();
99105
}
100106

101107
@Override
102108
public void navigateToEdge( final E edge )
103109
{
110+
// Prevent too frequent navigation requests.
111+
final long now = System.currentTimeMillis();
112+
if ( now - lastNavigationTime < ANIMATION_DURATION )
113+
return; // too frequent navigation requests. ignore.
114+
104115
// Always move in T.
105116
final V ref = graph.vertexRef();
106117
final int tp = edge.getTarget( ref ).getTimepoint();
@@ -111,8 +122,8 @@ public void navigateToEdge( final E edge )
111122
final double[] target = navigationBehaviour.navigateToEdge( edge, currentTransform );
112123
if ( target != null )
113124
{
114-
final TranslationAnimator animator = new TranslationAnimator( currentTransform, target, 300 );
115-
animator.setTime( System.currentTimeMillis() );
125+
final TranslationAnimator animator = new TranslationAnimator( currentTransform, target, ANIMATION_DURATION );
126+
animator.setTime( lastNavigationTime );
116127
panel.setTransformAnimator( animator );
117128
}
118129

0 commit comments

Comments
 (0)