Skip to content

Commit b5ef925

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 b5ef925

1 file changed

Lines changed: 22 additions & 5 deletions

File tree

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

Lines changed: 22 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+
if (shouldThrottle())
90+
return; // Throttle navigation requests.
91+
8592
// Always move in T.
8693
final int tp = vertex.getTimepoint();
8794
panel.state().setCurrentTimepoint( tp );
@@ -90,17 +97,20 @@ 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+
lastNavigationTime = System.currentTimeMillis();
102+
animator.setTime( lastNavigationTime );
95103
panel.setTransformAnimator( animator );
96104
}
97-
98105
panel.requestRepaint();
99106
}
100107

101108
@Override
102109
public void navigateToEdge( final E edge )
103110
{
111+
if ( shouldThrottle() )
112+
return; // Throttle navigation requests.
113+
104114
// Always move in T.
105115
final V ref = graph.vertexRef();
106116
final int tp = edge.getTarget( ref ).getTimepoint();
@@ -111,14 +121,21 @@ public void navigateToEdge( final E edge )
111121
final double[] target = navigationBehaviour.navigateToEdge( edge, currentTransform );
112122
if ( target != null )
113123
{
114-
final TranslationAnimator animator = new TranslationAnimator( currentTransform, target, 300 );
115-
animator.setTime( System.currentTimeMillis() );
124+
final TranslationAnimator animator = new TranslationAnimator( currentTransform, target, ANIMATION_DURATION );
125+
lastNavigationTime = System.currentTimeMillis();
126+
animator.setTime( lastNavigationTime );
116127
panel.setTransformAnimator( animator );
117128
}
118129

119130
panel.requestRepaint();
120131
}
121132

133+
private boolean shouldThrottle()
134+
{
135+
final long now = System.currentTimeMillis();
136+
return ( now - lastNavigationTime < ANIMATION_DURATION );
137+
}
138+
122139
/*
123140
* Navigation behaviours
124141
*/

0 commit comments

Comments
 (0)