<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Thank you.<br>
<br>
-- Kevin<br>
<br>
<br>
<div class="moz-cite-prefix">On 4/29/2024 2:35 PM, Thiago Milczarek
Sayão wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAAP_wumDKeeQM-_Sv_MwZXi0Oq+DmKe1eLOueuxxbDg+5tA-fg@mail.gmail.com">
<div dir="ltr">
<div dir="ltr">I thought about possible legal conflicts.</div>
<div dir="ltr"><br>
</div>
<div>The code is on my github - I'm exploring and testing before
starting the real work.</div>
<div dir="ltr">
<div><br>
</div>
<div>wayland-scanner generates code from the protocol specs,
which are xml files.</div>
<div><a href="https://urldefense.com/v3/__https://wayland.app/protocols/__;!!ACWV5N9M2RV99hQ!Jo_TDwcs-PU92bLqkpeok4ZlEQPsXiuBR6VfTF1dPSZ9mw24pohF8OxE3mlESTQMdQw0OeOFkX-vr7oN_qyvIrSwcvY$" moz-do-not-send="true">https://wayland.app/protocols/</a><br>
</div>
<div><br>
</div>
<div>I will write a new generator/scanner from scratch - it's
not too much work. </div>
<div>The generator/scanner itself does not necessarily need to
be part of the PR, but it might be a good idea to include
it, since the protocol changes over time.<br>
</div>
<div><br>
</div>
<div>-- Thiago.</div>
<div><br>
</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Em seg., 29 de abr. de 2024
às 18:10, Kevin Rushforth <<a href="mailto:kevin.rushforth@oracle.com" moz-do-not-send="true" class="moz-txt-link-freetext">kevin.rushforth@oracle.com</a>>
escreveu:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div> As a reminder, contributors must not include 3rd-party
code in any openjdk repo. Per the terms of the OCA, all
code that you contribute to OpenJDK must be your own code.
This includes code you push to openjdk/jfx-sandbox and
code in a branch of a personal fork of openjdk/jfx from
which you create a PR.<br>
<br>
-- Kevin<br>
<br>
<br>
<div>On 4/28/2024 2:45 PM, Thiago Milczarek Sayão wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Hi,
<div><br>
</div>
<div>I managed to display a very basic wayland
toplevel surface from java:</div>
<div><a href="https://urldefense.com/v3/__https://github.com/tsayao/glass-wayland__;!!ACWV5N9M2RV99hQ!Jo_TDwcs-PU92bLqkpeok4ZlEQPsXiuBR6VfTF1dPSZ9mw24pohF8OxE3mlESTQMdQw0OeOFkX-vr7oN_qyvrMZe-eM$" target="_blank" moz-do-not-send="true">https://github.com/tsayao/glass-wayland</a><br>
</div>
<div><br>
</div>
<div>If you are using intellij, just run the "Test
App" (with java 22).</div>
<div><br>
</div>
<div>generate.sh will jextract the code from
wayland-client.</div>
<div><br>
</div>
<div>I rushed to get the window displayed - so it
doesn't look good yet (but I do accept suggestions).</div>
<div><br>
</div>
<div>It uses a java wayland-scanner (included) to read
protocol xml files and generate code that uses
jextracted calls.</div>
<div><br>
</div>
<div>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
:)</div>
<div><br>
</div>
<div>Credits to (I adapted it to ouput jextract
compatible code):</div>
<div><a href="https://urldefense.com/v3/__https://github.com/gfxstrand/wayland-java/tree/master/scanner__;!!ACWV5N9M2RV99hQ!Jo_TDwcs-PU92bLqkpeok4ZlEQPsXiuBR6VfTF1dPSZ9mw24pohF8OxE3mlESTQMdQw0OeOFkX-vr7oN_qyv70bWagY$" target="_blank" moz-do-not-send="true">https://github.com/gfxstrand/wayland-java/tree/master/scanner</a><br>
</div>
<div><br>
</div>
<div>Cheers</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Em ter., 23 de abr.
de 2024 às 09:11, Thiago Milczarek Sayão <<a href="mailto:thiago.sayao@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">thiago.sayao@gmail.com</a>>
escreveu:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">
<div>I'm doing some work here:</div>
<div><a href="https://urldefense.com/v3/__https://github.com/tsayao/glass-wayland__;!!ACWV5N9M2RV99hQ!Jo_TDwcs-PU92bLqkpeok4ZlEQPsXiuBR6VfTF1dPSZ9mw24pohF8OxE3mlESTQMdQw0OeOFkX-vr7oN_qyvrMZe-eM$" target="_blank" moz-do-not-send="true">https://github.com/tsayao/glass-wayland</a><br>
</div>
<div><br>
</div>
<div>So far it's been a good experience to use FFM
/ jextract.</div>
<div><br>
</div>
<div>The idea is to plug it as a glass wayland
backend when it's good enough.</div>
<div><br>
</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Em seg., 22 de
abr. de 2024 às 16:16, Nir Lisker <<a href="mailto:nlisker@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">nlisker@gmail.com</a>>
escreveu:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">Not sure it helps with warmup,
but marking a foreign function as critical can
improve performance: <a href="https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/lang/foreign/Linker.Option.html#critical(boolean)" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">https://docs.oracle.com/en/java/javase/22/docs/api/java.base/java/lang/foreign/Linker.Option.html#critical(boolean)</a>.</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon, Apr
22, 2024 at 10:02 PM Philip Race <<a href="mailto:philip.race@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">philip.race@oracle.com</a>>
wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div> No, it wasn't. I didn't even use
jextracted code.<br>
The startup cost is around initialisation
of FFM - around 70 ms (IIRC) overhead on
my MacBook<br>
Then creation of VarHandles and
MethodHandles - 2-5 ms each is what I
measured, so do these lazily if you can.<br>
And warmup cost is that it takes about
10000 iterations to get code fully
compiled.<br>
<br>
java -XX:+PrintFlagsFinal -version
2>&1 | grep CompileThreshold<br>
intx
CompileThreshold =
10000 {pd
product} {default}<br>
double
CompileThresholdScaling =
1.000000
{product} {default}<br>
uintx
IncreaseFirstTierCompileThresholdAt =
50
{product} {default}<br>
intx
Tier2CompileThreshold =
0
{product} {default}<br>
intx
Tier3CompileThreshold =
2000
{product} {default}<br>
intx
Tier4CompileThreshold =
15000
{product} {default}<br>
<br>
-phil.<br>
<br>
<br>
<div>On 4/22/24 11:45 AM, Thiago Milczarek
Sayão wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">I think the startup time
might be related to all static symbol
lookups.
<div>So I'm manually including just
what is needed:<br>
</div>
<div>
<div>
<div style="background-color:rgb(30,31,34);color:rgb(188,190,196)">
<pre style="font-family:"JetBrains Mono",monospace;font-size:9.8pt"><span style="color:rgb(197,118,51)">jextract </span>--output src -t com.sun.glass.wayland.extracted \
--header-class-name GlassWayland \
<span style="color:rgb(197,118,51)">`pkg-config </span>--libs glib-2.0 gio-2.0 libportal wayland-client<span style="color:rgb(197,118,51)">`</span> \
<span style="color:rgb(197,118,51)">`pkg-config </span>--cflags-only-I glib-2.0 gio-2.0 libportal wayland-client<span style="color:rgb(197,118,51)">`</span> \
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
</pre>
</div>
</div>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Em
seg., 22 de abr. de 2024 às 13:24,
Philip Race <<a href="mailto:philip.race@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">philip.race@oracle.com</a>>
escreveu:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div> As a reminder, using FFM will
require all FX *applications* to
specify --enable-native-access on
the command line<br>
Although this is likely coming to
JNI soon too.<br>
<br>
<a href="https://docs.oracle.com/en/java/javase/21/core/restricted-methods.html" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">https://docs.oracle.com/en/java/javase/21/core/restricted-methods.html</a><br>
<br>
But one thing to watch out for
with FFM is startup + warm up
time.<br>
I struggled a lot with that in
using FFM for just one library in
the java.desktop module.<br>
<br>
-phil<br>
<br>
<div>On 4/22/24 9:12 AM, Nir
Lisker wrote:<br>
</div>
<blockquote type="cite">
<div dir="ltr">Sorry, we bumped
to Java 21 in JavaFX 22 I
think since we preserve the
N-1 rule.</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On Mon,
Apr 22, 2024 at 6:03 PM Nir
Lisker <<a href="mailto:nlisker@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">nlisker@gmail.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">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.
<div><br>
</div>
<div>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.</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">On
Mon, Apr 22, 2024 at
5:49 PM Thiago Milczarek
Sayão <<a href="mailto:thiago.sayao@gmail.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">thiago.sayao@gmail.com</a>> wrote:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div dir="ltr">I was
just experimenting,
but it seems to be
less work than going
with JNI.
<div>If I am correct,
the next Java LTS
will be 25, which
will be required on
JavaFX 29 to be
released on
September/29.<br>
</div>
<div><br>
</div>
<div>It's 7 years -
that's really too
much.</div>
<div><br>
</div>
<div>Maybe it's still
worthwhile to
prototype using FFM
and then port
everything to JNI.</div>
<div><br>
</div>
<div>-- Thiago.</div>
<div><br>
</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Em
seg., 22 de abr. de
2024 às 11:21, Kevin
Rushforth <<a href="mailto:kevin.rushforth@oracle.com" target="_blank" moz-do-not-send="true" class="moz-txt-link-freetext">kevin.rushforth@oracle.com</a>>
escreveu:<br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Note
also that we cannot
use Panama in the
JavaFX internals
yet, since <br>
the minimum version
of the JDK is 21.<br>
<br>
-- Kevin<br>
<br>
<br>
On 4/21/2024 10:51
AM, Thiago Milczarek
Sayão wrote:<br>
> Hi,<br>
><br>
> I did a small
test app to explore
Wayland client and
portals (for <br>
> Robot and
dialogs such as file
open/save).<br>
><br>
> <a href="https://urldefense.com/v3/__https://github.com/tsayao/wayland-test/blob/main/wayland-test.c__;!!ACWV5N9M2RV99hQ!Jo_TDwcs-PU92bLqkpeok4ZlEQPsXiuBR6VfTF1dPSZ9mw24pohF8OxE3mlESTQMdQw0OeOFkX-vr7oN_qyv-uSsniA$" rel="noreferrer" target="_blank" moz-do-not-send="true">https://github.com/tsayao/wayland-test/blob/main/wayland-test.c</a><br>
><br>
> It seems it
will work as a glass
backend, but some
walls will be hit <br>
> on the way :)<br>
><br>
> I have tried to
use jextract (from
project Panama) to
work directly <br>
> with java, but
it seems it does not
support wl_ types.<br>
><br>
> -- Thiago.<br>
<br>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
<br>
</div>
</blockquote>
</div>
</blockquote>
<br>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
</div>
</blockquote>
<br>
</div>
</blockquote>
</div>
</div>
</blockquote>
<br>
</body>
</html>