PathTransition jitter
Jose Martinez
jmartine_1026 at yahoo.com
Sun May 7 15:42:08 UTC 2017
In previous post I mentioned Kevin, I meant Jim. In the last update from Jim for this bug, he mentioned that it could be related to synchronization and frame rate vs rendering. https://bugs.openjdk.java.net/browse/JDK-8178805
I tried to run tests to prove this out, but was not able to notice any anomalies with either the frame rate nor the MasterTimer. The method used to test the MasterTimer by passing it an AnimationTimer that stores the delta time. A hiccup in the MasterTimer should be noticed from the AnimationTimer by storing the delta times and plotting them. While gathering those times, might as well collect the instant FPS and plot those as well. Would the synchronization issue be notied through either of these methods or am I off the mark here?
The program in the link below does what I mentioned. When you run it either wait for the program to plot the points or click on the black background to force the points to draw on the screen (red is delta time from the MasterTimer and light green is the FPS). I like to wait till the jitter happens then click the background right away. After running many tests I do not see any hiccups in the plots that match the noticed occurrences of jitter. Does this mean that it could be a render issue?
https://pastebin.com/XjiqE9yu
From: Jose Martinez <jmartine_1026 at yahoo.com>
To: Kevin Rushforth <kevin.rushforth at oracle.com>
Cc: "openjfx-dev at openjdk.java.net" <openjfx-dev at openjdk.java.net>; Lord Chaos <joearose1 at gmail.com>
Sent: Sunday, May 7, 2017 12:03 AM
Subject: Re: PathTransition jitter
Looks like I am unable to update the Jira ticket so I guess I'll update the bug in here.
Kevin mentioned that there is some relief if "-Djavafx.animation.fullspeed=true" VM option is used. I notice that it does improve but not remove the problem. Also, the jitter is not limited to PathTransition. In the example below the problem is reproduced by using Timeline and no PathTransition.
Since like this is not just an issue with PathTransition, would it be possible to bump up the priority on this? The Jira mentions the fix is scheduled for Java 10. Does this affect all animation in JavaFX? Is there anyway to move objects on the screen without jitter?
private void pathJitterBug(Stage primaryStage) {
// Circle circle = new Circle(30, Color.RED);
// Path path = new Path();
// path.getElements().add(new MoveTo(100, 100));
// path.getElements().add(new LineTo(500, 100));
// path.getElements().add(new LineTo(500, 500));
// path.getElements().add(new LineTo(100, 500));
// path.getElements().add(new LineTo(100, 100));
//
// PathTransition pathTransition = new PathTransition(Duration.seconds(10), path, circle);
// pathTransition.setCycleCount(Animation.INDEFINITE);
// pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
// pathTransition.playFromStart();
//
Circle circle2 = new Circle(20, Color.BLUE);
Timeline tl = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(circle2.centerXProperty(), 125), new KeyValue(circle2.centerYProperty(), 125)),
new KeyFrame(Duration.seconds(5), new KeyValue(circle2.centerXProperty(), 425), new KeyValue(circle2.centerYProperty(), 425))
);
tl.setCycleCount(Timeline.INDEFINITE);
tl.setAutoReverse(true);
tl.playFromStart();
//
Circle circle3 = new Circle(20, Color.GREEN);
Timeline tl2 = new Timeline(
new KeyFrame(Duration.ZERO, new KeyValue(circle3.centerXProperty(), 425), new KeyValue(circle3.centerYProperty(), 125)),
new KeyFrame(Duration.seconds(5), new KeyValue(circle3.centerXProperty(), 125), new KeyValue(circle3.centerYProperty(), 425))
);
tl2.setCycleCount(Timeline.INDEFINITE);
tl2.setAutoReverse(true);
tl2.playFromStart();
//
Group root = new Group();
// root.getChildren().addAll(circle, circle2, circle3);
root.getChildren().addAll(circle2, circle3);
Scene scene = new Scene(root, 600, 600);
primaryStage.setTitle("Hello World!");
primaryStage.setScene(scene);
primaryStage.show();
}
From: Kevin Rushforth <kevin.rushforth at oracle.com>
To: Jose Martinez <jmartine_1026 at yahoo.com>
Cc: "openjfx-dev at openjdk.java.net" <openjfx-dev at openjdk.java.net>; Lord Chaos <joearose1 at gmail.com>
Sent: Friday, April 14, 2017 9:29 AM
Subject: Re: PathTransition jitter
And here is the direct link in JBS:
https://bugs.openjdk.java.net/browse/JDK-8178805
-- Kevin
Jose Martinez wrote:
> Thank you Kevin.
> For those interested here is the bug report: http://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8178805
>
>
>
>
> From: Kevin Rushforth <kevin.rushforth at oracle.com>
> To: Jose Martinez <jmartine_1026 at yahoo.com>
> Cc: "openjfx-dev at openjdk.java.net" <openjfx-dev at openjdk.java.net>
> Sent: Thursday, April 13, 2017 7:49 AM
> Subject: Re: PathTransition jitter
>
> One more thing: all bugs were transfered from the old JavaFX JIRA intoJBS in June 2015. You can find the ones you filed using this query:
>
> https://bugs.openjdk.java.net/issues/?jql=reporter%3Djmartinezjfx
>
> -- Kevin
>
>
> Jose Martinez wrote:
> In case it helps, below is the original workaround that was provided. This workaround no longer has any affect.
> public class FixedPane extends Group { @Override
> public BaseBounds impl_computeGeomBounds(BaseBounds bounds, BaseTransform tx) {
> if (!tx.isTranslateOrIdentity()) {
> super.impl_computeGeomBounds(bounds, BaseTransform.IDENTITY_TRANSFORM);
> }
> return super.impl_computeGeomBounds(bounds, tx);
> }
> }
> Forgot to include: using a Windows 10 and Geforce gtx GPU.
>
> From: Tom Eugelink <tbee at tbee.org>
> To: openjfx-dev at openjdk.java.net
> Sent: Thursday, April 13, 2017 3:15 AM
> Subject: Re: PathTransition jitter
>
> I'm seeing some very small irregularities; short hesitations and then small jumps ahead. Nothing major, but it is not totally smooth. (2.6GHz Intel i5, AMD FirePro M5950 GPU, Windows 10 x64)
>
> Slowing the animation to 8 instead of 4 seconds, make these hiccups better visible. They're most definitely there.
>
>
> On 13-4-2017 08:46, Michael Paus wrote:
>
> It runs perfectly smooth on my old MacBook Pro from 2012 with JDK 8u152 ea.
>
> Am 13.04.17 um 04:25 schrieb Jose Martinez:
>
> Many moons ago I complained about jittery PathTransition animation. A bug was openned and I was provided a workaround. This was with Java 7. I revisted the old project that lead to that initial complain, this time with Java 8. The problem seems to be back. I could not find the old bugreport, since I think the JavaFX team is not using the same bug trackingsite.
> Below is the test code to reproduce. I tried it using JDK 8_64 u5, u11, u25, u112, u121 and the problem occurs with all of them. The ImageViewstutters through the PathTransition. I have a new laptop with 6th gen I7 and plenty of ram. I do not think it is the hardware. This used to besmooth like butter. Anyone else experiencing this or can make any suggestions?
>
> @Override
> public void start(Stage primaryStage) { String rocketImgStr=
> "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";
> Base64.Decoder decoder = Base64.getDecoder();
> ByteArrayInputStream rocketInputStream = new ByteArrayInputStream(decoder.decode(rocketImgStr)); ImageView iv = new ImageView(new Image(rocketInputStream));
> Path path = new Path();
> path.getElements().add(new MoveTo(100, 100));
> path.getElements().add(new LineTo(500, 100));
> path.getElements().add(new LineTo(500, 500));
> path.getElements().add(new LineTo(100, 500));
> path.getElements().add(new LineTo(100, 100)); PathTransition pathTransition = new PathTransition(Duration.seconds(4), path, iv);
> pathTransition.setCycleCount(Animation.INDEFINITE);
> pathTransition.setOrientation(PathTransition.OrientationType.ORTHOGONAL_TO_TANGENT);
> pathTransition.playFromStart(); Group root = new Group();
> root.getChildren().add(iv);
> Scene scene = new Scene(root, 600, 600);
> primaryStage.setTitle("Hello World!");
> primaryStage.setScene(scene);
> primaryStage.show();
> }
>
> thanks,
> jose
>
>
>
>
>
>
>
>
>
More information about the openjfx-dev
mailing list