-
Bug
-
Resolution: Duplicate
-
P3
-
None
-
8u60, 9
-
x86_64
-
windows_7
FULL PRODUCT VERSION :
JDK 8u60
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Windows 7 64
A DESCRIPTION OF THE PROBLEM :
Additional findings for JDK-8088279 on Windows 7.
Note this is different case than originally reported JDK-8088279 on Mac, because the original submitter sample runs on Windows without problem. This looks more like a regression on Windows somewhere between 7u79 and 8u60.
Simplest animation below runs well under Windows 7 on JRE 7u79 but is terrible jerky on JRE 8u60.
JRE 7:
i7, GTX 750 - smooth as silk
Intel NUC dn2820fykh - very smooth except major disruptions every 5-10 seconds
JDK 8u60:
On wide range of tested PC and laptops it is jerky.
i7, GTX 750 - disrupted every few seconds
Intel NUC dn2820fykh - just terrible, not usable
For JDK 8 it is just not usable on any machine I tested. However, it does not seem as rendering problem, see my findings below.
(btw. for JDK 7 there is no reason it would not run on NUC with Intel HD graphics without ANY disruptions, if it is able to run smooth for 10 seconds. Similar C++ D3D sample or other programs run without any disruptions there, so it is not driver problem. But it is not as terrible as on JDK 8).
The app runs with -Xms512M -Xmx512M -verbose:gc and there is no gc log output.
Animation code:
Pane screen = new Pane();
Scene scene = new Scene(screen, 1280, 720, true/*,
SceneAntialiasing.BALANCED*/);
Pane root = new Pane();
root.setPrefSize(1280, 720);
screen.getChildren().add(root);
Image imagebuf = new Image("https://upload.wikimedia.org/wikipedia/commons/b/b9/Javafx_logo_color.png", false);
final ImageView image = new ImageView(imagebuf);
image.setCache(true);
image.setCacheHint(CacheHint.SPEED);
image.setManaged(false);
image.setVisible(true);
root.getChildren().add(image);
TranslateTransition transition = new TranslateTransition(Duration.seconds(5));
transition.setFromX(image.getImage().getWidth());
transition.setFromX(-imagebuf.getWidth());
transition.setToX(1280);
transition.setNode(image);
transition.setCycleCount(Animation.INDEFINITE);
transition.setInterpolator(Interpolator.LINEAR);
transition.play();
-------------
I tried to check what happens
If I use Timeline I get the same jerky movement on 8.
If I position manually using AnimationTimer with delta from animation start to 'now' (or System.nanoTime delta) it produces exactly the same jerky movement as built-in animations on JRE 8.
Both approaches run relatively smooth on JRE 7.
When I collect animation timer 'now' delta stats on JRE 7, almost all frames are ~16ms.
However, on JRE 8 there are once in a while weird sequences like 16.001595, 29.018011, 2.977756, 30.503049, 1.519597, 15.987516, 15.999547, 32.034423, 15.970107.
Now the interesing part. One may think it delays or skips frames on rendering. Not exactly.
If AnimationTimer movement is not based on time delta but just adds a constant offset ignoring time difference, image moves pretty smooth on all machines including Celeron NUC.
This may suggest there is some problem with pulse call sync / timing and probably not an issue on D3D level.
What is really weird is that multiple resizing as I described inJDK-8133843 sometimes fixes the animaiton but not always and less on weak devices.
Additional info/issue that may be useful - video playing on Intel NUC is way less smooth with JavaFX 8 than with JavaFX 7 (quite jerky, barely usable). Given that both use DirectShow on Windows 7, it also suggests there is some timing, sync or threading problem related to pulse rather than D3D problem. Looks like there is common issue related both to animations and video timing.
(JRE 7 plays video much better, but on intel NUC even 7 play clearly less smooth than Media Player Classic Home Cinema which also uses DirectShow).
Please contact me fedor.losev@gmail.com for any additional details if the issue is not reproducible.
I see the animation problem on wide range of machines so it is not clear why others don't experience the same and how this issue is low priority.
-------------------------------------------
Prism output (same program same machine)
Java 7:
Prism pipeline init order: d3d j2d
Using t2k for text rasterization
Using dirty region optimizations
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.d3d.D3DPipeline
Loading D3D native library ...
succeeded.
Direct3D initialization succeeded
(X) Got class = class com.sun.prism.d3d.D3DPipeline
Initialized prism pipeline: com.sun.prism.d3d.D3DPipeline
Maximum supported texture size: 16384
Maximum texture size clamped to 4096
OS Information:
Windows 7 build 7601
D3D Driver Information:
NVIDIA GeForce GTX 750
\\.\DISPLAY1
Driver nvd3dumx.dll, version 10.18.13.5560
Pixel Shader version 3.0
Device : ven_10DE, dev_1381, subsys_362E1458
Java 8:
Prism pipeline init order: d3d sw
Using native-based Pisces rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.d3d.D3DPipeline
Loading D3D native library ...
succeeded.
D3DPipelineManager: Created D3D9Ex device
Direct3D initialization succeeded
(X) Got class = class com.sun.prism.d3d.D3DPipeline
Initialized prism pipeline: com.sun.prism.d3d.D3DPipeline
Maximum supported texture size: 16384
Maximum texture size clamped to 4096
OS Information:
Windows 7 build 7601
D3D Driver Information:
NVIDIA GeForce GTX 750
\\.\DISPLAY1
Driver nvd3dumx.dll, version 10.18.13.5560
Pixel Shader version 3.0
Device : ven_10DE, dev_1381, subsys_362E1458
Max Multisamples supported: 4
vsync: true vpipe: true
On NUC etc both outputs look similar as well.
REGRESSION. Last worked in version 7u79
ADDITIONAL REGRESSION INFORMATION:
Problematic
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
Working
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
REPRODUCIBILITY :
This bug can be reproduced always.
JDK 8u60
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
ADDITIONAL OS VERSION INFORMATION :
Windows 7 64
A DESCRIPTION OF THE PROBLEM :
Additional findings for JDK-8088279 on Windows 7.
Note this is different case than originally reported JDK-8088279 on Mac, because the original submitter sample runs on Windows without problem. This looks more like a regression on Windows somewhere between 7u79 and 8u60.
Simplest animation below runs well under Windows 7 on JRE 7u79 but is terrible jerky on JRE 8u60.
JRE 7:
i7, GTX 750 - smooth as silk
Intel NUC dn2820fykh - very smooth except major disruptions every 5-10 seconds
JDK 8u60:
On wide range of tested PC and laptops it is jerky.
i7, GTX 750 - disrupted every few seconds
Intel NUC dn2820fykh - just terrible, not usable
For JDK 8 it is just not usable on any machine I tested. However, it does not seem as rendering problem, see my findings below.
(btw. for JDK 7 there is no reason it would not run on NUC with Intel HD graphics without ANY disruptions, if it is able to run smooth for 10 seconds. Similar C++ D3D sample or other programs run without any disruptions there, so it is not driver problem. But it is not as terrible as on JDK 8).
The app runs with -Xms512M -Xmx512M -verbose:gc and there is no gc log output.
Animation code:
Pane screen = new Pane();
Scene scene = new Scene(screen, 1280, 720, true/*,
SceneAntialiasing.BALANCED*/);
Pane root = new Pane();
root.setPrefSize(1280, 720);
screen.getChildren().add(root);
Image imagebuf = new Image("https://upload.wikimedia.org/wikipedia/commons/b/b9/Javafx_logo_color.png", false);
final ImageView image = new ImageView(imagebuf);
image.setCache(true);
image.setCacheHint(CacheHint.SPEED);
image.setManaged(false);
image.setVisible(true);
root.getChildren().add(image);
TranslateTransition transition = new TranslateTransition(Duration.seconds(5));
transition.setFromX(image.getImage().getWidth());
transition.setFromX(-imagebuf.getWidth());
transition.setToX(1280);
transition.setNode(image);
transition.setCycleCount(Animation.INDEFINITE);
transition.setInterpolator(Interpolator.LINEAR);
transition.play();
-------------
I tried to check what happens
If I use Timeline I get the same jerky movement on 8.
If I position manually using AnimationTimer with delta from animation start to 'now' (or System.nanoTime delta) it produces exactly the same jerky movement as built-in animations on JRE 8.
Both approaches run relatively smooth on JRE 7.
When I collect animation timer 'now' delta stats on JRE 7, almost all frames are ~16ms.
However, on JRE 8 there are once in a while weird sequences like 16.001595, 29.018011, 2.977756, 30.503049, 1.519597, 15.987516, 15.999547, 32.034423, 15.970107.
Now the interesing part. One may think it delays or skips frames on rendering. Not exactly.
If AnimationTimer movement is not based on time delta but just adds a constant offset ignoring time difference, image moves pretty smooth on all machines including Celeron NUC.
This may suggest there is some problem with pulse call sync / timing and probably not an issue on D3D level.
What is really weird is that multiple resizing as I described in
Additional info/issue that may be useful - video playing on Intel NUC is way less smooth with JavaFX 8 than with JavaFX 7 (quite jerky, barely usable). Given that both use DirectShow on Windows 7, it also suggests there is some timing, sync or threading problem related to pulse rather than D3D problem. Looks like there is common issue related both to animations and video timing.
(JRE 7 plays video much better, but on intel NUC even 7 play clearly less smooth than Media Player Classic Home Cinema which also uses DirectShow).
Please contact me fedor.losev@gmail.com for any additional details if the issue is not reproducible.
I see the animation problem on wide range of machines so it is not clear why others don't experience the same and how this issue is low priority.
-------------------------------------------
Prism output (same program same machine)
Java 7:
Prism pipeline init order: d3d j2d
Using t2k for text rasterization
Using dirty region optimizations
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.d3d.D3DPipeline
Loading D3D native library ...
succeeded.
Direct3D initialization succeeded
(X) Got class = class com.sun.prism.d3d.D3DPipeline
Initialized prism pipeline: com.sun.prism.d3d.D3DPipeline
Maximum supported texture size: 16384
Maximum texture size clamped to 4096
OS Information:
Windows 7 build 7601
D3D Driver Information:
NVIDIA GeForce GTX 750
\\.\DISPLAY1
Driver nvd3dumx.dll, version 10.18.13.5560
Pixel Shader version 3.0
Device : ven_10DE, dev_1381, subsys_362E1458
Java 8:
Prism pipeline init order: d3d sw
Using native-based Pisces rasterizer
Using dirty region optimizations
Not using texture mask for primitives
Not forcing power of 2 sizes for textures
Using hardware CLAMP_TO_ZERO mode
Opting in for HiDPI pixel scaling
Prism pipeline name = com.sun.prism.d3d.D3DPipeline
Loading D3D native library ...
succeeded.
D3DPipelineManager: Created D3D9Ex device
Direct3D initialization succeeded
(X) Got class = class com.sun.prism.d3d.D3DPipeline
Initialized prism pipeline: com.sun.prism.d3d.D3DPipeline
Maximum supported texture size: 16384
Maximum texture size clamped to 4096
OS Information:
Windows 7 build 7601
D3D Driver Information:
NVIDIA GeForce GTX 750
\\.\DISPLAY1
Driver nvd3dumx.dll, version 10.18.13.5560
Pixel Shader version 3.0
Device : ven_10DE, dev_1381, subsys_362E1458
Max Multisamples supported: 4
vsync: true vpipe: true
On NUC etc both outputs look similar as well.
REGRESSION. Last worked in version 7u79
ADDITIONAL REGRESSION INFORMATION:
Problematic
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
Working
java version "1.7.0_79"
Java(TM) SE Runtime Environment (build 1.7.0_79-b15)
Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode)
REPRODUCIBILITY :
This bug can be reproduced always.
- duplicates
-
JDK-8088279 Jerky animations
- Open
-
JDK-8136536 Choppy animation and video on Windows due to pulse timer and vsync interaction
- Open
-
JDK-8161917 JDK-8136536 should not be closed
- Closed
-
JDK-8088279 Jerky animations
- Open
- relates to
-
JDK-8088279 Jerky animations
- Open
-
JDK-8136536 Choppy animation and video on Windows due to pulse timer and vsync interaction
- Open
(1 relates to)