[External] : Re: JavaFX Direct3D 12 - Call for performance testing help

Kevin Rushforth kevin.rushforth at oracle.com
Fri Nov 14 18:15:45 UTC 2025


Because we (Oracle) have very strict rules about publishing binaries. We 
are not allowed to publish anything that hasn't been approved for 
release, even an experimental test program.

-- Kevin


On 11/14/2025 10:07 AM, Christopher Schnick wrote:
>
> May I ask why that is not possible?
>
> On 14/11/2025 19:04, Kevin Rushforth wrote:
>> While that might be easier, it is not possible for us to provide such 
>> a binary.
>>
>> We could simplify it a bit by providing instructions to download the 
>> JMODs (rather than the SDK) from jdk.java.net/direct3d12 and use 
>> jlink to create a JDK that includes JavaFX. That way the custom 
>> options only need to be added one time to jlink; running "javac" and 
>> "java" would need no options related to finding the JavaFX modules or 
>> enabling native access.
>>
>> -- Kevin
>>
>>
>> On 11/14/2025 9:50 AM, Christopher Schnick wrote:
>>>
>>> I will have to check whether I have time to look into this, but I am 
>>> wondering if it would be possible for these tests to require less 
>>> manual setup?
>>>
>>> Isn't this where something like jlink could easily solve all these 
>>> steps and the user would just have to run one of multiple launcher 
>>> scripts of a prebuilt runtime image? I would argue it would be 
>>> faster to just build a jlink image and provide a download link 
>>> compared to writing the detailed instructions so that users run the 
>>> test exactly as they should.
>>>
>>> On 14/11/2025 15:10, Lukasz Kostyra wrote:
>>>>
>>>> Hello all,
>>>>
>>>> I got feedback on the previous call for performance testing email 
>>>> that, instead of using the Bash test script on Windows (and hoping 
>>>> you have Cygwin/MINGW installed) it would be easier to integrate 
>>>> testing and CSV output functionality into RenderPerfTest. I made 
>>>> those changes and they are now available on jfx-sandbox direct3d12 
>>>> branch (you WON’T find those on main repo yet): 
>>>> https://github.com/openjdk/jfx-sandbox/tree/direct3d12/tests/performance/animation/RenderPerfTest/src/renderperf
>>>>
>>>> Any feedback regarding RenderPerfTest will be updated on that 
>>>> branch automatically, so it’s indeed a better solution if there’s 
>>>> more feedback to it :)
>>>>
>>>>
>>>> *_New steps for running tests:_*
>>>>
>>>>  1. Download RenderPerfTest from above link (has to be jfx-sandbox
>>>>     repo, direct3d12 branch) - best to download the entire
>>>>     “renderperf” folder as ZIP as it contains extra resources
>>>>     needed for the test app
>>>>  2. Get JavaFX Direct3D 12 build - either download the EA2 SDK from
>>>>     [ https://jdk.java.net/javafxdirect3d12/ ] or build it from
>>>>     scratch from direct3d12 [
>>>>     https://github.com/openjdk/jfx-sandbox/tree/direct3d12 ] branch
>>>>     (make sure to *build with -PCONF=Release*; at the time of
>>>>     writing this email there is no functional difference between
>>>>     the sandbox repo and the EA2 build).
>>>>  3. RenderPerf can be run with (underlined parts you need to fill
>>>>     in yourself):
>>>>     *java --upgrade-module-path="_<path_to_jfx_sdk>/lib_"
>>>>     --add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media
>>>>     --enable-native-access=javafx.graphics
>>>>     -Dprism.order=_<backend>_ renderperf/RenderPerfTest.java
>>>>     --output-csv -r _<runs>
>>>>     _*Where:
>>>>     *<path_to_jfx_sdk>* -  path to directory where JavaFX SDK is
>>>>     located (has to be where JavaFX bin and lib folders reside)
>>>>     *    <backend> *- short-hand for which Prism backend to use
>>>>     *<runs>* - how many times each test case should run;RenderPerf
>>>>     will average FPS results from these runs
>>>>
>>>>  4. Running RenderPerf like above will produce
>>>>     *RenderPerf_results-<backend>-<date>-<time>.csv* in your
>>>>     current directory.
>>>>
>>>> *_Examples:_*
>>>>
>>>>  1. For D3D baseline test, run:
>>>>     *java --upgrade-module-path="_<path_to_jfx_sdk>_/lib"
>>>>     --add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media,
>>>>     --enable-native-access=javafx.graphics -Dprism.order=d3d
>>>>     renderperf/RenderPerfTest.java --output-csv -r 3*
>>>>
>>>>  2. For D3D12 baseline test, run:
>>>>         java --upgrade-module-path="*_<path_to_jfx_sdk>_*/lib"
>>>>     --add-modules=javafx.base,javafx.controls,javafx.graphics,jdk.jsobject,javafx.media,
>>>>     --enable-native-access=javafx.graphics -Dprism.order=d3d12
>>>>     renderperf/RenderPerfTest.java --output-csv -r 3
>>>>
>>>> *_Notes:_*
>>>>
>>>> * Closing the test on warm-up stage will stop the test run early
>>>>
>>>> * Similarly to the test script, RenderPerfTest defines default 
>>>> object numbers at the beginning as *Map<String, Integer> 
>>>> defaultObjectCounts *which are used for running all the tests. 
>>>> Similar remarks as to the test script apply - It would be preferred 
>>>> to keep these numbers as-is but if needed (test timeouts loading, 
>>>> or framerate on baseline D3D run is very low (below 15FPS) ) they 
>>>> can be lowered, as long as they remain consistent between D3D and 
>>>> D3D12 runs.
>>>>
>>>> Thanks once again for your help!
>>>>
>>>> -Lukasz
>>>>
>>>> *From:*openjfx-dev <openjfx-dev-retn at openjdk.org> *On Behalf Of 
>>>> *Lukasz Kostyra
>>>> *Sent:* Thursday, 13 November 2025 15:50
>>>> *To:* openjfx-dev at openjdk.org
>>>> *Subject:* JavaFX Direct3D 12 - Call for performance testing help
>>>>
>>>> Hello openjfx-dev,
>>>>
>>>> Because Windows is very open hardware-wise, it is difficult to 
>>>> prepare the backend for all possible hardware combinations 
>>>> available, especially from performance perspective. To make sure 
>>>> JavaFX performance does not degrade compared to old D3D backend we 
>>>> would like to call for volunteers to help performance-test the 
>>>> backend. These tests will let us get a general idea on how the 
>>>> backend behaves on different hardware and which areas of the 
>>>> backend to focus on while moving forward with optimization effort 
>>>> for Direct3D 12.
>>>>
>>>> At this point we tested the backend quite extensively on 
>>>> Intel-based integrated GPUs and did some testing on a machine 
>>>> running a recent discrete Nvidia GPU. We are primarily looking for 
>>>> testing Direct3D 12 backend *on **a system running an AMD discrete 
>>>> GPU*, but any hardware combinations are welcome - the more the 
>>>> merrier :). Also note that these tests *require a Windows machine*, 
>>>> as D3D12 backend is Windows-only.
>>>>
>>>> We run performance testing using RenderPerfTest JavaFX app located 
>>>> in the JavaFX repository under 
>>>> "tests/performance/animation/RenderPerfTest". I wrote a bash script 
>>>> to use with this app for performance-testing the backend. The 
>>>> script will run all available demos on RenderPerfTest with a set 
>>>> amount of objects per test, average the FPS results from each run 
>>>> and output the results into a CSV file.
>>>>
>>>> *_How to run perf tests:_*
>>>>
>>>>  1. Download the test script -
>>>>     https://gist.github.com/lukostyra/bc354a5fd845b82805ffb3380caebe9a
>>>>  2. Get JavaFX Direct3D 12 build - either download the EA2 SDK from
>>>>     [ https://jdk.java.net/javafxdirect3d12/ ] or build it from
>>>>     scratch from direct3d12 [
>>>>     https://github.com/openjdk/jfx-sandbox/tree/direct3d12 ] branch
>>>>     (make sure to *build with -PCONF=Release*; at the time of
>>>>     writing this email there is no functional difference between
>>>>     the sandbox repo and the EA2 build).
>>>>  3. Put the script in the same directory as
>>>>     *renderperf/RenderPerfTest.java* - I usually copy the contents
>>>>     of tests/performance/animation/RenderPerfTest/src into a
>>>>     separate directory where the script is located.The script will
>>>>     look in the current directory specifically for
>>>>     "*renderperf*"directory containing a
>>>>     "*RenderPerfTest.java*"source file.
>>>>  4. Ensure nothing else is running on your system.
>>>>  5. Perform a baseline test run with D3D backend:
>>>>     *./run_renderperf_all.sh -j <path_to_jfx_sdk> -b d3d -r 3
>>>>     *When the script is done, this should result in
>>>>     "*RenderPerf_results_d3d-<date>-<time>.csv*" file. This will
>>>>     let us establish how your machine performs on RenderPerf’s test
>>>>     cases on the old D3D backend.
>>>>  6. Perform a perf test run for D3D12 backend:
>>>>     *./run_renderperf_all.sh -j <path_to_jfx_sdk> -b d3d12 -r 3
>>>>     *This should result in
>>>>     "*RenderPerf_results_d3d12-<date>-<time>.csv*" file. The
>>>>     results will be used as a comparisonto D3D backend.
>>>>
>>>> Once you are done, reply to this email thread with details what 
>>>> hardware you ran the tests on and with contents of both CSV files 
>>>> specifying which came from which test run - I’m pretty sure 
>>>> *attachments will be stripped when sending an email to the mailing 
>>>> list*, so to make sure the results get to us you should paste them 
>>>> inline. Also, include the console output of running any JavaFX app 
>>>> on D3D12 backend with "-Dprism.verbose=true".
>>>>
>>>> Note that these tests will run for quite a bit of time. Each test 
>>>> case's single run will take 15 seconds - 5 seconds of warm-up and 
>>>> 10 seconds of actual test run where FPS is measured. Testing every 
>>>> single case, 3 runs each, for a single backend takes approximately 
>>>> 40 minutes - ensure your computer won't lock or turn off the 
>>>> screens during that process.
>>>>
>>>> *_Test script reference:_*
>>>>
>>>> *./run_renderperf_all.sh -j/--jfx **<path_to_jfx_sdk> [-b/--backend 
>>>> <backend>] [-r/--runs <runs>]*
>>>>
>>>> Where:
>>>>
>>>> *-j, --jfx * -  required; path to directory where JavaFX SDK is 
>>>> located (has to be where JavaFX bin and lib folders are located)
>>>>
>>>> *-b, --backend*  - optional, defaults to "d3d12"; short-hand for 
>>>> which Prism backend to use. Whatever is set here will be forwarded 
>>>> to "-Dprism.order" property.
>>>>
>>>> *-r, --runs*  -  optional, defaults to 3; how many times each test 
>>>> case should run. Script will average FPS results from these runs.
>>>>
>>>> Notes:
>>>>
>>>>    * Closing currently running test during the warm-up stage (first 
>>>> 5 seconds since starting the execution of the test case) should 
>>>> stop the test script early.
>>>>
>>>>   * Script starts by declaring an array of test cases and object 
>>>> counts to run. We recommend leaving those as they are, however if 
>>>> there are tests which do not load because of a "Timeout"message(the 
>>>> script will then exit early) or perform significantly worse on D3D 
>>>> backend (below 20 FPS) you can lower the object count and retry.
>>>>
>>>> Let me know if you have any problems with running the tests. And, 
>>>> in advance, thanks for your help!
>>>>
>>>> Regards,
>>>>
>>>> Lukasz
>>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.openjdk.org/pipermail/openjfx-dev/attachments/20251114/5cad5ce7/attachment-0001.htm>


More information about the openjfx-dev mailing list