Hi, I managed to display a very basic wayland toplevel surface from java: https://github.com/tsayao/glass-wayland
If you are using intellij, just run the "Test App" (with java 22). generate.sh will jextract the code from wayland-client. I rushed to get the window displayed - so it doesn't look good yet (but I do accept suggestions). It uses a java wayland-scanner (included) to read protocol xml files and generate code that uses jextracted calls. The sample also binds EGL and GL apis, but just because wayland requires a buffer to display the surface. Maybe it was easier to use a shared memory :) Credits to (I adapted it to ouput jextract compatible code): https://github.com/gfxstrand/wayland-java/tree/master/scanner Cheers Em ter., 23 de abr. de 2024 às 09:11, Thiago Milczarek Sayão < thiago.sa...@gmail.com> escreveu: > I'm doing some work here: > https://github.com/tsayao/glass-wayland > > So far it's been a good experience to use FFM / jextract. > > The idea is to plug it as a glass wayland backend when it's good enough. > > > > Em seg., 22 de abr. de 2024 às 16:16, Nir Lisker <nlis...@gmail.com> > escreveu: > >> Not sure it helps with warmup, but marking a foreign function as critical >> can improve performance: >> https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/lang/foreign/Linker.Option.html#critical(boolean) >> . >> >> On Mon, Apr 22, 2024 at 10:02 PM Philip Race <philip.r...@oracle.com> >> wrote: >> >>> No, it wasn't. I didn't even use jextracted code. >>> The startup cost is around initialisation of FFM - around 70 ms (IIRC) >>> overhead on my MacBook >>> Then creation of VarHandles and MethodHandles - 2-5 ms each is what I >>> measured, so do these lazily if you can. >>> And warmup cost is that it takes about 10000 iterations to get code >>> fully compiled. >>> >>> java -XX:+PrintFlagsFinal -version 2>&1 | grep CompileThreshold >>> intx CompileThreshold = >>> 10000 {pd product} {default} >>> double CompileThresholdScaling = >>> 1.000000 {product} {default} >>> uintx IncreaseFirstTierCompileThresholdAt = >>> 50 {product} {default} >>> intx Tier2CompileThreshold = >>> 0 {product} {default} >>> intx Tier3CompileThreshold = >>> 2000 {product} {default} >>> intx Tier4CompileThreshold = >>> 15000 {product} {default} >>> >>> -phil. >>> >>> >>> On 4/22/24 11:45 AM, Thiago Milczarek Sayão wrote: >>> >>> I think the startup time might be related to all static symbol lookups. >>> So I'm manually including just what is needed: >>> >>> jextract --output src -t com.sun.glass.wayland.extracted \ >>> --header-class-name GlassWayland \ >>> `pkg-config --libs glib-2.0 gio-2.0 libportal wayland-client` \ >>> `pkg-config --cflags-only-I glib-2.0 gio-2.0 libportal wayland-client` \ >>> glass-wayland.h \ >>> --include-function xdp_portal_initable_new \ >>> --include-function xdp_session_close \ >>> --include-function xdp_portal_open_file \ >>> --include-function xdp_portal_open_file_finish \ >>> --include-function g_object_unref \ >>> --include-function g_timeout_add \ >>> --include-function g_add_idle \ >>> --include-function g_main_loop_run \ >>> --include-function g_main_loop_new \ >>> --include-function g_main_loop_ref \ >>> --include-function g_main_loop_unref \ >>> --include-function g_main_loop_quit \ >>> --include-function g_settings_new \ >>> --include-function g_settings_get_int \ >>> --include-function wl_display_connect \ >>> --include-function wl_display_disconnect \ >>> --include-function wl_display_roundtrip \ >>> --include-function wl_display_dispatch_pending \ >>> --include-typedef GAsyncReadyCallback \ >>> --include-typedef GSourceFunc \ >>> --include-typedef GError >>> >>> >>> Em seg., 22 de abr. de 2024 às 13:24, Philip Race < >>> philip.r...@oracle.com> escreveu: >>> >>>> As a reminder, using FFM will require all FX *applications* to specify >>>> --enable-native-access on the command line >>>> Although this is likely coming to JNI soon too. >>>> >>>> https://docs.oracle.com/en/java/javase/21/core/restricted-methods.html >>>> >>>> But one thing to watch out for with FFM is startup + warm up time. >>>> I struggled a lot with that in using FFM for just one library in the >>>> java.desktop module. >>>> >>>> -phil >>>> >>>> On 4/22/24 9:12 AM, Nir Lisker wrote: >>>> >>>> Sorry, we bumped to Java 21 in JavaFX 22 I think since we preserve the >>>> N-1 rule. >>>> >>>> On Mon, Apr 22, 2024 at 6:03 PM Nir Lisker <nlis...@gmail.com> wrote: >>>> >>>>> I think that we'll be able to bump to Java 25 in JavaFX 25, like we >>>>> did with 21. I suggested initially to bump to Java 22 exactly for FFM as >>>>> it's very useful for JavaFX, but was told we shouldn't since it's not an >>>>> LTS version. >>>>> >>>>> I have no idea how long the work on Wayland will take including the >>>>> code review (a rather long process), but you should be able to request >>>>> code >>>>> reviews with FFM and have it ready for integration by Java 25. >>>>> >>>>> On Mon, Apr 22, 2024 at 5:49 PM Thiago Milczarek Sayão < >>>>> thiago.sa...@gmail.com> wrote: >>>>> >>>>>> I was just experimenting, but it seems to be less work than going >>>>>> with JNI. >>>>>> If I am correct, the next Java LTS will be 25, which will be required >>>>>> on JavaFX 29 to be released on September/29. >>>>>> >>>>>> It's 7 years - that's really too much. >>>>>> >>>>>> Maybe it's still worthwhile to prototype using FFM and then port >>>>>> everything to JNI. >>>>>> >>>>>> -- Thiago. >>>>>> >>>>>> >>>>>> Em seg., 22 de abr. de 2024 às 11:21, Kevin Rushforth < >>>>>> kevin.rushfo...@oracle.com> escreveu: >>>>>> >>>>>>> Note also that we cannot use Panama in the JavaFX internals yet, >>>>>>> since >>>>>>> the minimum version of the JDK is 21. >>>>>>> >>>>>>> -- Kevin >>>>>>> >>>>>>> >>>>>>> On 4/21/2024 10:51 AM, Thiago Milczarek Sayão wrote: >>>>>>> > Hi, >>>>>>> > >>>>>>> > I did a small test app to explore Wayland client and portals (for >>>>>>> > Robot and dialogs such as file open/save). >>>>>>> > >>>>>>> > https://github.com/tsayao/wayland-test/blob/main/wayland-test.c >>>>>>> > >>>>>>> > It seems it will work as a glass backend, but some walls will be >>>>>>> hit >>>>>>> > on the way :) >>>>>>> > >>>>>>> > I have tried to use jextract (from project Panama) to work >>>>>>> directly >>>>>>> > with java, but it seems it does not support wl_ types. >>>>>>> > >>>>>>> > -- Thiago. >>>>>>> >>>>>>> >>>> >>>