<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
Thanks.<br>
<br>
-- Kevin<br>
<br>
<div class="moz-cite-prefix">On 4/30/2024 6:41 AM, Thiago Milczarek
Sayão wrote:<br>
</div>
<blockquote type="cite" cite="mid:CAAP_wumMx4TppaWqy7hJ6R08iNtyCO1TZeWZ75QFvzqJ4V7zWQ@mail.gmail.com">
<div dir="ltr">Hi,
<div><br>
</div>
<div>I rewrote the scanner, so it's all my own code now. No
legal issues since I signed the OCA.</div>
<div><br>
</div>
<div>Generated java code looks like this:</div>
<div><a href="https://github.com/tsayao/glass-wayland/blob/main/src/com/sun/glass/wayland/extracted/XdgToplevel.java" moz-do-not-send="true" class="moz-txt-link-freetext">https://github.com/tsayao/glass-wayland/blob/main/src/com/sun/glass/wayland/extracted/XdgToplevel.java</a><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>-- Thiago.</div>
</div>
<br>
<div class="gmail_quote">
<div dir="ltr" class="gmail_attr">Em seg., 29 de abr. de 2024 às
19:57, 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> Thank you.<br>
<br>
-- Kevin<br>
<br>
<br>
<div>On 4/29/2024 2:35 PM, Thiago Milczarek Sayão wrote:<br>
</div>
<blockquote type="cite">
<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$" target="_blank" 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" 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">
<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>
</div>
</blockquote>
</div>
</blockquote>
<br>
</body>
</html>