RFR: 8305578: X11GraphicsDevice.pGetBounds() is slow in remote X11 sessions

Sergey Bylokhov serb at openjdk.org
Tue Apr 11 00:12:37 UTC 2023


On Wed, 5 Apr 2023 08:19:50 GMT, Maxim Kartashev <mkartashev at openjdk.org> wrote:

> Getting bounds of a `GraphicsDevice` and insets of a screen are fairly frequent operations. When working over the network (remote X session), those can take several *seconds* to complete, introducing repeated freezes even when typing in an editor feels only slightly sluggish.
> 
> On the other hand, neither bounds nor insets change very often - if at all - during the lifetime of an application. So caching their values seems like a natural solution to the problem. The caches need to be reset only when there's a possibility of change in the screens configuration.
> 
> A similar patch has been living in [JetBrains Runtime](https://github.com/JetBrains/JetBrainsRuntime/) for well over a year.

src/java.desktop/unix/classes/sun/awt/X11/XToolkit.java line 881:

> 879:     }
> 880: 
> 881:     private final Hashtable<GraphicsConfiguration, Insets> cachedInsets = new Hashtable<>();

You do not need to create a handcrafted list of gc->insets, but instead, you can save that information directly in the GC. In that case, each GC should be added as a listener(DisplayChangedListener) to the SGE. I think the same should be done for the GD+bounds, see how it is implemented on macOS(CGraphicsDevice#displayChanged)

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/13346#discussion_r1162181681



More information about the client-libs-dev mailing list