Compare commits

...

56 Commits

Author SHA1 Message Date
Dmitry Batrak
44f519d8c4 optimize tree implementation 2025-09-16 17:58:55 +03:00
Maxim Kartashev
40e32cb0e0 JBR-9332 Wayland: popups are not closed when parent looses focus 2025-09-16 13:44:20 +04:00
bourgesl
0a4a65421e JBR-9351 jb/java/awt/Counters/UpdateWindowsCounter.java fails by time out
Fixed Timers to be daemon
2025-09-16 07:58:47 +02:00
bourgesl
a446e58816 JBR-9350 javax/swing/JOptionPane/8081019/bug8081019.java: Cannot invoke "sun.lwawt.LWWindowPeer.getTarget()" because "this.peer" is null
Added peer null checks + use perfCountersEnabled flag
2025-09-16 07:58:47 +02:00
Maxim Kartashev
2818bb0b60 JBR-9355 Wayland: AccessControlException: access denied ("java.lang.RuntimePermission" "getenv.XDG_CURRENT_DESKTOP") 2025-09-15 17:56:00 +04:00
Nikita Provotorov
12bbc14e5e JBR-9349 Do_Not_Use_calloc_Use_safe_Calloc_Instead: is not a member of global namespace
Refactoring the code of JBR-4478 so that C++ standard library headers get only included in AccessibleCaret.cpp and not in any headers.
2025-09-14 13:35:20 +02:00
Vitaly Provodin
6c7a65b152 fixup! update exclude list on results of 21.0.8_b1115 test 2025-09-14 02:11:55 +04:00
Vitaly Provodin
f361dbfb4e update exclude list on results of 21.0.8_b1115 test 2025-09-13 07:03:26 +04:00
bourgesl
e4fbfeb597 JBR-9283 Enhance Window counters to provide statistics
Enhanced Window counters to provide statistics (using the new marlin StatDouble class), enhanced logging code to dump regularly (10s) window stats, added shutdown hook, bumpCounter() renamed to incrementCounter(), added addStat(window, name, value) used by MTLLayer to report blitTexture & nextDrawable timings (ms), use InnocuousThread for shutdown hooks, fixed D3DSurfaceData bumpCounter() usages to incrementCounter()

(cherry picked from commit af437d9d61)
2025-09-12 15:16:57 +02:00
Vitaly Provodin
c4475ae68f update exclude list on results of 21.0.8_b1104.44 test runs 2025-09-12 13:34:31 +04:00
Nikita Gubarkov
ad45fe00e9 JBR-9111 Vulkan: Lock RQ while disposing the surface 2025-09-11 15:23:42 +02:00
Nikita Gubarkov
e2c8a4c446 JBR-9236 Vulkan: Proper builds without Vulkan 2025-09-11 11:04:56 +02:00
Nikita Tsarev
3db2ad8e7b JBR-9336: Fix build error with old wayland protocol headers [WLToolkit] 2025-09-11 08:54:37 +02:00
Maxim Kartashev
90bfdab986 JBR-9310 Wayland: Gtk-WARNING in swing app 2025-09-10 10:27:05 +04:00
Nikita Tsarev
a89c3903bc JBR-9326 Support TransferHandler.setDragImage [WLToolkit] 2025-09-09 11:08:07 +02:00
Maxim Kartashev
d26e30ea8c JBR-9302 Wayland: default window decoration to look more like KDE 2025-09-08 15:56:48 +04:00
Maxim Kartashev
bbdf8cc940 JBR-9288 Wayland: use builtin window decorations in KDE 2025-09-08 15:56:42 +04:00
Dmitry Drobotov
88f1599bad JBR-4478 Implement support for native accessible caret events on Windows
The feature adds caret tracking support for assistive tools that don't work with Java Access Bridge, specifically, for the built-in Windows Magnifier.
It works by implementing Win32 IAccessible interface for the text caret, and sending EVENT_OBJECT_LOCATIONCHANGE events whenever it changes.
It's enabled by default and can be disabled by setting `sun.awt.windows.use.native.caret.accessibility.events` property to false.
2025-09-06 17:54:39 +02:00
Vitaly Provodin
587b4d362c update exclude list on results of 21.0.8_b1097.42 test runs 2025-09-06 05:10:26 +04:00
Maxim Kartashev
547012807e JBR-9016 Make screenshot JBR API work on Windows 2025-09-05 17:35:18 +04:00
Maxim Kartashev
2d6f92627d JBR-9016 Add API for making screenshots of some regions of the application without interacting with OS 2025-09-04 13:34:57 +04:00
Maxim Kartashev
e01b9602ac JBR-9228 KDE: jb/java/awt/Toolkit/DetectingOSThemeTest.java fails 2025-09-04 11:59:02 +04:00
Maxim Kartashev
33e1d11973 JBR-9289 Wayland: re-enable window shadow by default 2025-09-03 13:21:54 +04:00
Maxim Kartashev
0948c6db81 JBR-9289 Wayland: an option to turn window shadow off
Use -Dsun.awt.wl.Shadow=false to turn all the window shadows off
2025-09-03 12:57:27 +04:00
Nikita Gubarkov
7b1aac2ec5 JBR-7334 Skip custom title bar reconfiguration if nothing changed 2025-09-01 15:18:29 +02:00
Vitaly Provodin
7c8f117efe fixup! JBR-7919 add tests for Wayland popups 2025-08-30 02:09:06 +04:00
Vitaly Provodin
0edb47a038 fixup! JBR-9238 Introduce distinct test groups for Vulkan runs 2025-08-30 02:09:06 +04:00
Vitaly Provodin
b15f66919b update exclude list on results of 21.0.8_b1095.40 test runs 2025-08-30 02:09:06 +04:00
Vladimir Lagunov
eafa414c2d JBR-9260 Different ExtendedOptions.NOSHARE_DELETE in WindowsChannelFactory
Before this commit there was a race condition: `sun.nio.fs.ExtendedOptions.InternalOption.register(java.nio.file.OpenOption)` could register only one option.

There have been two similar options:
* `sun.nio.fs.ExtendedOptions.NOSHARE_DELETE`
* `java.io.JbExtendedOpenOptions.NOSHARE_DELETE`

This led to the following failure:
```
Caused by: java.lang.UnsupportedOperationException
    at java.base/sun.nio.fs.WindowsChannelFactory$Flags.toFlags(WindowsChannelFactory.java:131)
    at java.base/sun.nio.fs.WindowsChannelFactory.newFileChannel(WindowsChannelFactory.java:151)
    at java.base/sun.nio.fs.WindowsFileSystemProvider.newFileChannel(WindowsFileSystemProvider.java:114)
    at java.base/java.io.IoOverNioFileSystem.initializeStreamsUsingNio0(IoOverNioFileSystem.java:294)
    at java.base/java.io.IoOverNioFileSystem.initializeStreamUsingNio(IoOverNioFileSystem.java:279)
    at java.base/java.io.RandomAccessFile.<init>(RandomAccessFile.java:332)
```

This commit fixes the issue, now both options are supported.
2025-08-28 15:52:55 +02:00
Vladimir Lagunov
062216614e JBR-9181 IoOverNio.isAllowedInThisThread also checks IS_ENABLED_IN_GENERAL
`IoOverNio.isAllowedInThisThread` contained a bug: it could return `true` even if the feature is totally disabled.

Luckily, all usages of `IoOverNio.isAllowedInThisThread` don't exploit this bug. However, this problem can suddenly hit us later.
2025-08-28 15:40:25 +02:00
Vladimir Lagunov
694fa1425e JBR-9179 ZipFile over nio: more usages of custom nio fs 2025-08-28 15:40:25 +02:00
Maxim Kartashev
1a59ac659e JBR-9239 Wayland: IDE partially hangs on any modal dialog 2025-08-22 18:42:04 +04:00
Vitaly Provodin
e85625006e fixup! update exclude list on results of 21.0.8_b1092.38 test runs 2025-08-21 03:39:00 +04:00
Maxim Kartashev
95e65778dc JBR-9198 Incorrect reported window location when switching between maximized and full screen 2025-08-20 18:40:24 +04:00
Vitaly Provodin
799b5680a5 update exclude list on results of 21.0.8_b1092.38 test runs 2025-08-20 07:24:17 +04:00
Vitaly Provodin
965d821b6c JBR-9238 Introduce distinct test groups for Vulkan runs 2025-08-20 07:24:04 +04:00
Nikita Tsarev
abb94f9339 JBR-9243: Report key modifiers in key typed events [WLToolkit] 2025-08-18 16:53:31 +02:00
Nikita Gubarkov
aae9727100 8364434: Inconsistent BufferedContext state after GC
Reviewed-by: jdv, azvegint, avu
2025-08-14 21:17:54 +02:00
Vitaly Provodin
d509b1a721 update exclude list on results of 21.0.8_b1082.29 test runs 2025-08-14 07:35:16 +04:00
Maxim Kartashev
bac0039683 JBR-9081 Wayland: GTK title bar does not respect theme on Fedora 42 2025-08-13 15:41:46 +04:00
Maxim Kartashev
002c55361b JBR-9189 Avoid really hiding a window that was never shown 2025-08-12 17:39:14 +04:00
Maxim Kartashev
ec8e3b1323 JBR-6145 Wayland: synthetic focus for popups 2025-08-12 17:39:07 +04:00
Maxim Kartashev
970813c79e JBR-6145 Wayland: refactor surface-to-peer mapping 2025-08-12 17:39:03 +04:00
Nikita Tsarev
be4e636f82 JBR-9149: Also report lowercased mime types when offering data sources [WLToolkit] 2025-08-11 16:55:12 +02:00
Nikita Gubarkov
66bd76e105 JBR-9177 Vulkan: Align jbr21 and main (Part 5)
Fix Makefiles.
2025-08-11 16:29:55 +02:00
Nikita Gubarkov
ab1d262714 JBR-9177 Vulkan: Align jbr21 and main (Part 4)
Various cosmetic changes to match main.
2025-08-08 21:05:22 +02:00
Nikita Gubarkov
6f2fa19cde JBR-9177 Vulkan: Align jbr21 and main (Part 3)
Cleanup blit code.
2025-08-08 21:05:22 +02:00
Nikita Gubarkov
ffebc3f087 JBR-9177 Vulkan: Align jbr21 and main (Part 2)
Relocate VKRenderer_FlushDependentRenderPasses to match main (without forward declaration).
2025-08-08 21:05:21 +02:00
Nikita Gubarkov
f23e3cd7d0 JBR-9177 Vulkan: Align jbr21 and main (Part 1)
Remove unnecessary drawing-related functions & macros.
2025-08-08 21:05:21 +02:00
Nikita Gubarkov
9fee2e4475 JBR-9176 Vulkan: Refactor dynamic buffer data allocation 2025-08-08 21:05:20 +02:00
Nikita Gubarkov
26f391e23a JBR-9174 Vulkan: Cleanup image/buffer barriers 2025-08-08 21:05:20 +02:00
Nikita Gubarkov
a1dc378601 JBR-9173 Vulkan: Unify cleanup logic 2025-08-08 21:05:19 +02:00
Nikita Gubarkov
cfb8dadf75 JBR-7766 Vulkan: Fix VKTexturePool OOM
(cherry picked from commit 1a806f4f1b)
2025-08-08 21:05:19 +02:00
bourgesl
c86499ff65 JBR-7582: use completedHandler to freeDrawableCount to fix the broken cpu barrier with window-sharing and 1 external monitor as the Presented Handler is not safe enough (missing calls or delayed) + fixed J2dRlsTraceLnX usages 2025-08-08 10:56:39 +02:00
Vitaly Provodin
ecbb4f620e update exclude list on results of 21.0.8_b1073.27 test runs 2025-08-06 17:26:14 +04:00
Vladimir Lagunov
247e9d8dfb JBR-8965 java.io over nio: improve the performance of IoOverNioFileSystem.getBooleanAttributes
The new code avoids creating unnecessary exceptions.
2025-08-04 16:39:20 +02:00
97 changed files with 2715 additions and 1097 deletions

View File

@@ -139,10 +139,8 @@ ifeq ($(call isTargetOs, windows macosx), false)
endif endif
ifneq ($(VULKAN_ENABLED), true) ifneq ($(VULKAN_ENABLED), true)
# WLToolkit needs Vulkan java classes for initialization EXCLUDE_FILES += $(filter-out $(TOPDIR)/src/java.desktop/share/classes/sun/java2d/vulkan/VKEnv.java, \
ifneq ($(call isTargetOs, linux), true) $(wildcard $(TOPDIR)/src/java.desktop/*/classes/sun/java2d/vulkan/*.java))
EXCLUDES += sun/java2d/vulkan
endif
endif endif
# These files do not appear in the build result of the old build. This # These files do not appear in the build result of the old build. This

View File

@@ -170,10 +170,8 @@ ifeq ($(VULKAN_ENABLED), true)
LIBAWT_EXTRA_HEADER_DIRS += common/font common/java2d/vulkan common/java2d LIBAWT_EXTRA_HEADER_DIRS += common/font common/java2d/vulkan common/java2d
LIBAWT_CFLAGS += $(VULKAN_FLAGS) LIBAWT_CFLAGS += $(VULKAN_FLAGS)
LIBAWT_EXTRA_FILES += $(TOPDIR)/src/$(MODULE)/share/native/common/java2d/AccelTexturePool.c LIBAWT_EXTRA_FILES += $(TOPDIR)/src/$(MODULE)/share/native/common/java2d/AccelTexturePool.c
LIBAWT_EXFILES += $(TOPDIR)/src/$(MODULE)/share/native/common/java2d/vulkan/VKStubs.c
VULKAN_EXCLUDES := vulkan VULKAN_EXCLUDES := vulkan
else else
LIBAWT_EXTRA_FILES += $(TOPDIR)/src/$(MODULE)/share/native/common/java2d/vulkan/VKStubs.c
VULKAN_EXCLUDES := vulkan java2d/vulkan VULKAN_EXCLUDES := vulkan java2d/vulkan
endif endif
@@ -217,7 +215,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \
LIBS_windows := kernel32.lib user32.lib gdi32.lib gdiplus.lib winspool.lib \ LIBS_windows := kernel32.lib user32.lib gdi32.lib gdiplus.lib winspool.lib \
imm32.lib ole32.lib uuid.lib shell32.lib \ imm32.lib ole32.lib uuid.lib shell32.lib \
comdlg32.lib winmm.lib comctl32.lib shlwapi.lib \ comdlg32.lib winmm.lib comctl32.lib shlwapi.lib \
delayimp.lib jvm.lib $(WIN_JAVA_LIB) advapi32.lib dwmapi.lib $(A11Y_NVDA_ANNOUNCING_LIBS), \ delayimp.lib jvm.lib $(WIN_JAVA_LIB) advapi32.lib dwmapi.lib $(A11Y_NVDA_ANNOUNCING_LIBS) oleacc.lib, \
VERSIONINFO_RESOURCE := $(LIBAWT_VERSIONINFO_RESOURCE), \ VERSIONINFO_RESOURCE := $(LIBAWT_VERSIONINFO_RESOURCE), \
EXTRA_RCFLAGS := $(LIBAWT_RCFLAGS), \ EXTRA_RCFLAGS := $(LIBAWT_RCFLAGS), \
)) ))
@@ -293,7 +291,7 @@ ifeq ($(call isTargetOs, windows macosx), false)
# #
endif endif
LIBAWT_XAWT_EXCLUDES := medialib debug wl vulkan LIBAWT_XAWT_EXCLUDES := medialib debug wl $(VULKAN_EXCLUDES)
LIBPIPEWIRE_HEADER_DIRS := \ LIBPIPEWIRE_HEADER_DIRS := \
$(TOPDIR)/src/$(MODULE)/unix/native/libpipewire/include $(TOPDIR)/src/$(MODULE)/unix/native/libpipewire/include
@@ -422,8 +420,6 @@ ifeq ($(call isTargetOs, windows macosx), false)
$(VULKAN_FLAGS) \ $(VULKAN_FLAGS) \
$(CUPS_CFLAGS) $(CUPS_CFLAGS)
LIBAWT_WLAWT_CXXFLAGS += $(VULKAN_FLAGS)
LIBAWT_WLAWT_LIBS := $(LIBM) -lawt $(WAYLAND_LIBS) $(LIBDL) -ljava -ljvm -lrt LIBAWT_WLAWT_LIBS := $(LIBM) -lawt $(WAYLAND_LIBS) $(LIBDL) -ljava -ljvm -lrt
ifeq ($(call isTargetOs, linux), true) ifeq ($(call isTargetOs, linux), true)
@@ -458,8 +454,6 @@ ifeq ($(call isTargetOs, windows macosx), false)
DISABLED_WARNINGS_CXX_gcc := undef, \ DISABLED_WARNINGS_CXX_gcc := undef, \
DISABLED_WARNINGS_clang := parentheses format undef \ DISABLED_WARNINGS_clang := parentheses format undef \
logical-op-parentheses format-nonliteral int-conversion, \ logical-op-parentheses format-nonliteral int-conversion, \
DISABLED_WARNINGS_gcc_VKMemory.cpp := missing-field-initializers implicit-fallthrough parentheses, \
DISABLED_WARNINGS_clang_VKMemory.cpp := missing-field-initializers implicit-fallthrough parentheses, \
LDFLAGS := $(LDFLAGS_JDKLIB) \ LDFLAGS := $(LDFLAGS_JDKLIB) \
$(call SET_SHARED_LIBRARY_ORIGIN) \ $(call SET_SHARED_LIBRARY_ORIGIN) \
-L$(INSTALL_LIBRARIES_HERE), \ -L$(INSTALL_LIBRARIES_HERE), \
@@ -576,14 +570,13 @@ ifeq ($(call isTargetOs, windows macosx), false)
$(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \ $(TOPDIR)/src/$(MODULE)/$(OPENJDK_TARGET_OS_TYPE)/native/common/awt \
# #
LIBAWT_HEADLESS_EXCLUDES := medialib wl vulkan LIBAWT_HEADLESS_EXCLUDES := medialib wl $(VULKAN_EXCLUDES)
LIBAWT_HEADLESS_EXTRA_HEADER_DIRS := \ LIBAWT_HEADLESS_EXTRA_HEADER_DIRS := \
$(LIBAWT_DEFAULT_HEADER_DIRS) \ $(LIBAWT_DEFAULT_HEADER_DIRS) \
common/awt/debug \ common/awt/debug \
common/font \ common/font \
common/java2d/opengl \ common/java2d/opengl \
common/java2d/vulkan \
# #
LIBAWT_HEADLESS_CFLAGS := $(CUPS_CFLAGS) $(FONTCONFIG_CFLAGS) $(X_CFLAGS) \ LIBAWT_HEADLESS_CFLAGS := $(CUPS_CFLAGS) $(FONTCONFIG_CFLAGS) $(X_CFLAGS) \

View File

@@ -65,7 +65,7 @@ public class IoOverNio {
} }
public static boolean isAllowedInThisThread() { public static boolean isAllowedInThisThread() {
return ALLOW_IN_THIS_THREAD.get() == null; return IS_ENABLED_IN_GENERAL && ALLOW_IN_THIS_THREAD.get() == null;
} }
/** /**

View File

@@ -632,12 +632,23 @@ class IoOverNioFileSystem extends FileSystem {
// Also, notice that Windows FS does not support Posix attributes, which is expected. // Also, notice that Windows FS does not support Posix attributes, which is expected.
// Checking for Posix attributes first prevents from checking DOS attributes on Linux, // Checking for Posix attributes first prevents from checking DOS attributes on Linux,
// even though Posix permissions aren't used in this method. // even though Posix permissions aren't used in this method.
BasicFileAttributes attrs; BasicFileAttributes attrs = null;
Set<String> supportedFileAttributeViews = path.getFileSystem().supportedFileAttributeViews();
if (supportedFileAttributeViews.contains("posix")) {
try { try {
attrs = Files.readAttributes(path, PosixFileAttributes.class); attrs = Files.readAttributes(path, PosixFileAttributes.class);
} catch (UnsupportedOperationException ignored) { } catch (UnsupportedOperationException | SecurityException ignored) {
// Nothing.
}
}
if (attrs == null && supportedFileAttributeViews.contains("dos")) {
try {
attrs = Files.readAttributes(path, DosFileAttributes.class); attrs = Files.readAttributes(path, DosFileAttributes.class);
} catch (SecurityException ignored) { } catch (UnsupportedOperationException | SecurityException ignored) {
// Nothing.
}
}
if (attrs == null) {
attrs = Files.readAttributes(path, BasicFileAttributes.class); attrs = Files.readAttributes(path, BasicFileAttributes.class);
} }

View File

@@ -65,6 +65,8 @@ import java.util.jar.JarEntry;
import java.util.jar.JarFile; import java.util.jar.JarFile;
import java.util.stream.Stream; import java.util.stream.Stream;
import java.util.stream.StreamSupport; import java.util.stream.StreamSupport;
import com.jetbrains.internal.IoOverNio;
import jdk.internal.access.JavaUtilZipFileAccess; import jdk.internal.access.JavaUtilZipFileAccess;
import jdk.internal.access.JavaUtilJarAccess; import jdk.internal.access.JavaUtilJarAccess;
import jdk.internal.access.SharedSecrets; import jdk.internal.access.SharedSecrets;
@@ -1533,8 +1535,12 @@ public class ZipFile implements ZipConstants, Closeable {
static Source get(File file, boolean toDelete, ZipCoder zc) throws IOException { static Source get(File file, boolean toDelete, ZipCoder zc) throws IOException {
final Key key; final Key key;
try { try {
java.nio.file.FileSystem fs =
USE_NIO_FOR_ZIP_FILE_ACCESS && IoOverNio.isAllowedInThisThread()
? FileSystems.getDefault()
: builtInFS;
key = new Key(file, key = new Key(file,
Files.readAttributes(builtInFS.getPath(file.getPath()), Files.readAttributes(fs.getPath(file.getPath()),
BasicFileAttributes.class), zc); BasicFileAttributes.class), zc);
} catch (InvalidPathException ipe) { } catch (InvalidPathException ipe) {
throw new IOException(ipe); throw new IOException(ipe);
@@ -1572,7 +1578,7 @@ public class ZipFile implements ZipConstants, Closeable {
private Source(Key key, boolean toDelete, ZipCoder zc) throws IOException { private Source(Key key, boolean toDelete, ZipCoder zc) throws IOException {
this.zc = zc; this.zc = zc;
this.key = key; this.key = key;
if (USE_NIO_FOR_ZIP_FILE_ACCESS && VM.isBooted()) { if (USE_NIO_FOR_ZIP_FILE_ACCESS && VM.isBooted() && IoOverNio.isAllowedInThisThread()) {
Set<OpenOption> options; Set<OpenOption> options;
if (toDelete) { if (toDelete) {
options = Set.of(StandardOpenOption.READ, StandardOpenOption.DELETE_ON_CLOSE); options = Set.of(StandardOpenOption.READ, StandardOpenOption.DELETE_ON_CLOSE);

View File

@@ -39,7 +39,7 @@ import java.util.concurrent.ConcurrentHashMap;
public final class ExtendedOptions { public final class ExtendedOptions {
// maps InternalOption to ExternalOption // maps InternalOption to ExternalOption
private static final Map<InternalOption<?>, Wrapper<?>> internalToExternal private static final Map<InternalOption<?>, Wrapper<?>[]> internalToExternal
= new ConcurrentHashMap<>(); = new ConcurrentHashMap<>();
/** /**
@@ -69,7 +69,18 @@ public final class ExtendedOptions {
private void registerInternal(Object option, T param) { private void registerInternal(Object option, T param) {
Wrapper<T> wrapper = new Wrapper<T>(option, param); Wrapper<T> wrapper = new Wrapper<T>(option, param);
internalToExternal.put(this, wrapper); internalToExternal.compute(this, (ignored, oldWrappers) -> {
if (oldWrappers == null || oldWrappers.length == 0)
return new Wrapper<?>[] { wrapper };
for (Wrapper<?> oldWrapper : oldWrappers) {
if (oldWrapper.option == option)
return oldWrappers;
}
Wrapper<?>[] newWrappers = new Wrapper<?>[oldWrappers.length + 1];
System.arraycopy(oldWrappers, 0, newWrappers, 0, oldWrappers.length);
newWrappers[oldWrappers.length] = wrapper;
return newWrappers;
});
} }
/** /**
@@ -106,11 +117,14 @@ public final class ExtendedOptions {
* option. * option.
*/ */
public boolean matches(Object option) { public boolean matches(Object option) {
Wrapper <?> wrapper = internalToExternal.get(this); Wrapper <?> [] wrappers = internalToExternal.get(this);
if (wrapper == null) if (wrappers != null) {
for (Wrapper<?> wrapper : wrappers) {
if (wrapper.option == option)
return true;
}
}
return false; return false;
else
return option == wrapper.option;
} }
/** /**
@@ -118,13 +132,16 @@ public final class ExtendedOptions {
*/ */
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public T parameter() { public T parameter() {
Wrapper<?> wrapper = internalToExternal.get(this); Wrapper<?> [] wrappers = internalToExternal.get(this);
if (wrapper == null) if (wrappers != null) {
return null; for (Wrapper<?> wrapper : wrappers) {
else if (wrapper.option instanceof WatchEvent.Modifier)
return (T) wrapper.parameter(); return (T) wrapper.parameter();
} }
} }
return null;
}
}
// Internal equivalents of the options and modifiers defined in // Internal equivalents of the options and modifiers defined in
// package com.sun.nio.file // package com.sun.nio.file

View File

@@ -33,7 +33,6 @@ import sun.lwawt.macosx.CFLayer;
import sun.util.logging.PlatformLogger; import sun.util.logging.PlatformLogger;
import java.awt.Component; import java.awt.Component;
import java.awt.GraphicsConfiguration;
import java.awt.Insets; import java.awt.Insets;
import java.awt.Window; import java.awt.Window;
@@ -51,12 +50,13 @@ public class MTLLayer extends CFLayer {
private static native void nativeSetOpaque(long layerPtr, boolean opaque); private static native void nativeSetOpaque(long layerPtr, boolean opaque);
private int scale = 1; private int scale = 1;
private final boolean perfCountersEnabled;
public MTLLayer(LWWindowPeer peer) { public MTLLayer(LWWindowPeer peer) {
super(0, true); super(0, true);
Window target = (peer != null) ? peer.getTarget() : null; Window target = (peer != null) ? peer.getTarget() : null;
boolean perfCountersEnabled = (target != null) && AWTAccessor.getWindowAccessor().countersEnabled(target); this.perfCountersEnabled = (target != null) && AWTAccessor.getWindowAccessor().countersEnabled(target);
setPtr(nativeCreateLayer(perfCountersEnabled)); setPtr(nativeCreateLayer(perfCountersEnabled));
this.peer = peer; this.peer = peer;
@@ -150,11 +150,29 @@ public class MTLLayer extends CFLayer {
} }
} }
private final static String[] STAT_NAMES = new String[]{
"java2d.native.mtlLayer.drawInMTLContext", // type = 0
"java2d.native.mtlLayer.nextDrawable" // type = 1
};
private void addStat(int type, double value) {
// Called from the native code when this layer has been presented on screen
if (perfCountersEnabled && (peer != null)) {
final Component target = peer.getTarget();
if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().addStat(window,
((type >= 0) && (type < STAT_NAMES.length)) ? STAT_NAMES[type] : "undefined", value);
}
}
}
private void countNewFrame() { private void countNewFrame() {
// Called from the native code when this layer has been presented on screen // Called from the native code when this layer has been presented on screen
Component target = peer.getTarget(); if (perfCountersEnabled && (peer != null)) {
final Component target = peer.getTarget();
if (target instanceof Window window) { if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.frames"); AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.frames");
}
} }
} }
@@ -162,9 +180,11 @@ public class MTLLayer extends CFLayer {
// Called from the native code when an attempt was made to present this layer // Called from the native code when an attempt was made to present this layer
// on screen, but that attempt was not successful. This can happen, for example, // on screen, but that attempt was not successful. This can happen, for example,
// when those attempts are too frequent. // when those attempts are too frequent.
Component target = peer.getTarget(); if (perfCountersEnabled && (peer != null)) {
final Component target = peer.getTarget();
if (target instanceof Window window) { if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.framesDropped"); AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.framesDropped");
}
} }
} }
} }

View File

@@ -30,6 +30,11 @@
#include <CoreVideo/CVDisplayLink.h> #include <CoreVideo/CVDisplayLink.h>
#import "common.h" #import "common.h"
#define TRACE_DISPLAY_ENABLED 0
#define TRACE_DISPLAY_CHANGED 0
#define TRACE_DISPLAY_ON (TRACE_DISPLAY_ENABLED == 1)
@interface MTLLayer : CAMetalLayer @interface MTLLayer : CAMetalLayer
@property (nonatomic) jobject javaLayer; @property (nonatomic) jobject javaLayer;
@@ -42,8 +47,12 @@
@property (readwrite, assign) int leftInset; @property (readwrite, assign) int leftInset;
@property (readwrite, atomic) int redrawCount; @property (readwrite, atomic) int redrawCount;
@property (readwrite, atomic) NSTimeInterval avgBlitFrameTime; @property (readwrite, atomic) NSTimeInterval avgBlitFrameTime;
@property (readwrite, atomic) BOOL perfCountersEnabled;
#if TRACE_DISPLAY_ON
@property (readwrite, atomic) NSTimeInterval avgNextDrawableTime;
@property (readwrite, atomic) CFTimeInterval lastPresentedTime; @property (readwrite, atomic) CFTimeInterval lastPresentedTime;
#endif
@property (readwrite, atomic) BOOL perfCountersEnabled;
- (id) initWithJavaLayer:(jobject)layer usePerfCounters:(jboolean)perfCountersEnabled; - (id) initWithJavaLayer:(jobject)layer usePerfCounters:(jboolean)perfCountersEnabled;
@@ -62,6 +71,8 @@
- (void) stopRedraw:(MTLContext*)mtlc displayID:(jint)displayID force:(BOOL)force; - (void) stopRedraw:(MTLContext*)mtlc displayID:(jint)displayID force:(BOOL)force;
- (void) flushBuffer; - (void) flushBuffer;
- (void) commitCommandBuffer:(MTLContext*)mtlc wait:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay; - (void) commitCommandBuffer:(MTLContext*)mtlc wait:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay;
- (void) addStatCallback:(int)type value:(double)value;
- (void) countFramePresentedCallback; - (void) countFramePresentedCallback;
- (void) countFrameDroppedCallback; - (void) countFrameDroppedCallback;
@end @end

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2019, 2024, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2019, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@@ -39,8 +39,7 @@ static jclass jc_JavaLayer = NULL;
#define GET_MTL_LAYER_CLASS() \ #define GET_MTL_LAYER_CLASS() \
GET_CLASS(jc_JavaLayer, "sun/java2d/metal/MTLLayer"); GET_CLASS(jc_JavaLayer, "sun/java2d/metal/MTLLayer");
#define TRACE_DISPLAY 0 #define TRACE_DISPLAY TRACE_DISPLAY_ENABLED
#define TRACE_DISPLAY_CHANGED 0
const NSTimeInterval DF_BLIT_FRAME_TIME=1.0/120.0; const NSTimeInterval DF_BLIT_FRAME_TIME=1.0/120.0;
@@ -156,8 +155,11 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
} }
self.presentsWithTransaction = NO; self.presentsWithTransaction = NO;
self.avgBlitFrameTime = DF_BLIT_FRAME_TIME; self.avgBlitFrameTime = DF_BLIT_FRAME_TIME;
self.perfCountersEnabled = perfCountersEnabled ? YES : NO; #if TRACE_DISPLAY_ON
self.avgNextDrawableTime = 0.0;
self.lastPresentedTime = 0.0; self.lastPresentedTime = 0.0;
#endif
self.perfCountersEnabled = perfCountersEnabled ? YES : NO;
_lock = [[NSLock alloc] init]; _lock = [[NSLock alloc] init];
return self; return self;
} }
@@ -224,12 +226,33 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
} }
// Acquire CAMetalDrawable without blocking: // Acquire CAMetalDrawable without blocking:
const CFTimeInterval beforeDrawableTime = CACurrentMediaTime();
const id<CAMetalDrawable> mtlDrawable = [self nextDrawable]; const id<CAMetalDrawable> mtlDrawable = [self nextDrawable];
const CFTimeInterval nextDrawableTime = (TRACE_DISPLAY) ? CACurrentMediaTime() : 0.0;
if (mtlDrawable == nil) { if (mtlDrawable == nil) {
J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: nextDrawable is null)"); J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: nextDrawable is null");
return; return;
} }
const CFTimeInterval nextDrawableTime = CACurrentMediaTime();
const CFTimeInterval nextDrawableLatency = (nextDrawableTime - beforeDrawableTime);
// rolling mean weight (lerp):
static const NSTimeInterval a = 0.25;
if (nextDrawableLatency > 0.0) {
if (self.perfCountersEnabled) {
[self addStatCallback:1 value:1000.0 * nextDrawableLatency]; // See MTLLayer.STAT_NAMES[1]
}
#if TRACE_DISPLAY_ON
self.avgNextDrawableTime = nextDrawableLatency * a + self.avgNextDrawableTime * (1.0 - a);
}
J2dRlsTraceLn4(J2D_TRACE_VERBOSE,
"[%.6lf] MTLLayer_blitTexture: drawable(%d) presented"
" - nextDrawableLatency = %.3lf ms - average = %.3lf ms",
CACurrentMediaTime(), mtlDrawable.drawableID,
1000.0 * nextDrawableLatency, 1000.0 * self.avgNextDrawableTime
);
#endif
}
// Keep Fence from now: // Keep Fence from now:
releaseFence = NO; releaseFence = NO;
@@ -244,26 +267,16 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
destinationOrigin:MTLOriginMake(0, 0, 0)]; destinationOrigin:MTLOriginMake(0, 0, 0)];
[blitEncoder endEncoding]; [blitEncoder endEncoding];
BOOL usePresentHandler = NO;
NSUInteger drawableId = -1;
if (@available(macOS 10.15.4, *)) { if (@available(macOS 10.15.4, *)) {
usePresentHandler = YES;
if (TRACE_DISPLAY) {
drawableId = mtlDrawable.drawableID;
}
[self retain]; [self retain];
[mtlDrawable addPresentedHandler:^(id <MTLDrawable> drawable) { [mtlDrawable addPresentedHandler:^(id <MTLDrawable> drawable) {
// note: called anyway even if drawable.present() not called! // note: called anyway even if drawable.present() not called!
// free drawable once processed:
[self freeDrawableCount];
const CFTimeInterval presentedTime = drawable.presentedTime; const CFTimeInterval presentedTime = drawable.presentedTime;
if (presentedTime != 0.0) { if (presentedTime != 0.0) {
if (self.perfCountersEnabled) { if (self.perfCountersEnabled) {
[self countFramePresentedCallback]; [self countFramePresentedCallback];
} }
if (TRACE_DISPLAY) { #if TRACE_DISPLAY_ON
const CFTimeInterval now = CACurrentMediaTime(); const CFTimeInterval now = CACurrentMediaTime();
const CFTimeInterval presentedHandlerLatency = (now - nextDrawableTime); const CFTimeInterval presentedHandlerLatency = (now - nextDrawableTime);
const CFTimeInterval frameInterval = (self.lastPresentedTime != 0.0) ? (presentedTime - self.lastPresentedTime) : -1.0; const CFTimeInterval frameInterval = (self.lastPresentedTime != 0.0) ? (presentedTime - self.lastPresentedTime) : -1.0;
@@ -273,8 +286,8 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
CACurrentMediaTime(), drawable.drawableID, CACurrentMediaTime(), drawable.drawableID,
1000.0 * presentedHandlerLatency, 1000.0 * frameInterval 1000.0 * presentedHandlerLatency, 1000.0 * frameInterval
); );
}
self.lastPresentedTime = presentedTime; self.lastPresentedTime = presentedTime;
#endif
} else { } else {
if (self.perfCountersEnabled) { if (self.perfCountersEnabled) {
[self countFrameDroppedCallback]; [self countFrameDroppedCallback];
@@ -293,7 +306,9 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
}]; }];
} }
// Present drawable: // Present drawable:
NSUInteger drawableId = -1;
if (TRACE_DISPLAY) { if (TRACE_DISPLAY) {
drawableId = mtlDrawable.drawableID;
J2dRlsTraceLn3(J2D_TRACE_INFO, J2dRlsTraceLn3(J2D_TRACE_INFO,
"[%.6lf] MTLLayer.blitTexture: layer[%p] present drawable(%d)", "[%.6lf] MTLLayer.blitTexture: layer[%p] present drawable(%d)",
CACurrentMediaTime(), self, drawableId); CACurrentMediaTime(), self, drawableId);
@@ -310,14 +325,11 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
[self retain]; [self retain];
[commandBuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) { [commandBuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) {
if (usePresentHandler == NO) { // free drawable once processed:
// free drawable:
[self freeDrawableCount]; [self freeDrawableCount];
}
if (!isDisplaySyncEnabled()) {
if (@available(macOS 10.15.4, *)) { if (@available(macOS 10.15.4, *)) {
if (!isDisplaySyncEnabled()) {
const NSTimeInterval gpuTime = commandBuf.GPUEndTime - commandBuf.GPUStartTime; const NSTimeInterval gpuTime = commandBuf.GPUEndTime - commandBuf.GPUStartTime;
const NSTimeInterval a = 0.25;
self.avgBlitFrameTime = gpuTime * a + self.avgBlitFrameTime * (1.0 - a); self.avgBlitFrameTime = gpuTime * a + self.avgBlitFrameTime * (1.0 - a);
} }
} }
@@ -381,8 +393,17 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
return; return;
} }
const CFTimeInterval beforeMethod = CACurrentMediaTime();
(*env)->CallVoidMethod(env, javaLayerLocalRef, jm_drawInMTLContext); (*env)->CallVoidMethod(env, javaLayerLocalRef, jm_drawInMTLContext);
CHECK_EXCEPTION(); CHECK_EXCEPTION();
const CFTimeInterval drawInMTLContextLatency = (CACurrentMediaTime() - beforeMethod);
if (drawInMTLContextLatency > 0.0) {
if (self.perfCountersEnabled) {
[self addStatCallback:0 value:1000.0 * drawInMTLContextLatency]; // See MTLLayer.STAT_NAMES[0]
}
}
(*env)->DeleteLocalRef(env, javaLayerLocalRef); (*env)->DeleteLocalRef(env, javaLayerLocalRef);
} }
@@ -508,6 +529,20 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
} }
} }
- (void) addStatCallback:(int)type value:(double)value {
// attach the current thread to the JVM if necessary, and get an env
JNIEnv* env = [ThreadUtilities getJNIEnvUncached];
GET_MTL_LAYER_CLASS();
DECLARE_METHOD(jm_addStatFrame, jc_JavaLayer, "addStat", "(ID)V");
jobject javaLayerLocalRef = (*env)->NewLocalRef(env, self.javaLayer);
if (javaLayerLocalRef != NULL) {
(*env)->CallVoidMethod(env, javaLayerLocalRef, jm_addStatFrame, (jint)type, (jdouble)value);
CHECK_EXCEPTION();
(*env)->DeleteLocalRef(env, javaLayerLocalRef);
}
}
- (void) countFrameDroppedCallback { - (void) countFrameDroppedCallback {
// attach the current thread to the JVM if necessary, and get an env // attach the current thread to the JVM if necessary, and get an env
JNIEnv* env = [ThreadUtilities getJNIEnvUncached]; JNIEnv* env = [ThreadUtilities getJNIEnvUncached];

View File

@@ -53,10 +53,14 @@ import java.awt.event.TextEvent;
import java.awt.im.InputContext; import java.awt.im.InputContext;
import java.awt.im.InputMethodRequests; import java.awt.im.InputMethodRequests;
import java.awt.image.BufferStrategy; import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel; import java.awt.image.ColorModel;
import java.awt.image.ImageObserver; import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer; import java.awt.image.ImageProducer;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.VolatileImage; import java.awt.image.VolatileImage;
import java.awt.image.WritableRaster;
import java.awt.peer.ComponentPeer; import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer; import java.awt.peer.ContainerPeer;
import java.awt.peer.LightweightPeer; import java.awt.peer.LightweightPeer;
@@ -91,6 +95,7 @@ import javax.accessibility.AccessibleStateSet;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.JRootPane; import javax.swing.JRootPane;
import com.jetbrains.exported.JBRApi;
import sun.awt.AWTAccessor; import sun.awt.AWTAccessor;
import sun.awt.AppContext; import sun.awt.AppContext;
import sun.awt.ComponentFactory; import sun.awt.ComponentFactory;
@@ -103,6 +108,7 @@ import sun.awt.EmbeddedFrame;
import sun.awt.RequestFocusController; import sun.awt.RequestFocusController;
import sun.awt.SubRegionShowable; import sun.awt.SubRegionShowable;
import sun.awt.SunToolkit; import sun.awt.SunToolkit;
import sun.awt.SurfacePixelGrabber;
import sun.awt.dnd.SunDropTargetEvent; import sun.awt.dnd.SunDropTargetEvent;
import sun.awt.im.CompositionArea; import sun.awt.im.CompositionArea;
import sun.awt.image.VSyncedBSManager; import sun.awt.image.VSyncedBSManager;
@@ -10609,4 +10615,79 @@ public abstract class Component implements ImageObserver, MenuContainer,
} }
return p.updateCustomTitleBarHitTest(allowNativeActions); return p.updateCustomTitleBarHitTest(allowNativeActions);
} }
@JBRApi.Provides("Screenshoter#getWindowBackbufferArea")
private static BufferedImage getWindowBackbufferArea(Window window, int x, int y, int width, int height) {
Objects.requireNonNull(window);
if (x < 0 || y < 0) {
throw new IllegalArgumentException("Negative coordinates are not allowed");
}
if (width <= 0 || height <= 0) {
throw new IllegalArgumentException("The size must be positive");
}
Image fullBackbuffer = window.getBackBuffer();
if (fullBackbuffer == null) {
return null;
}
var bufferWidth = fullBackbuffer.getWidth(null);
var bufferHeight = fullBackbuffer.getHeight(null);
if (x >= width) {
throw new IllegalArgumentException(String.format("x coordinate (%d) is out of bounds (%d)", x, bufferWidth));
}
if (y >= height) {
throw new IllegalArgumentException(String.format("y coordinate (%d) is out of bounds (%d)", y, bufferHeight));
}
if ((long) x + width > bufferWidth) {
width = bufferWidth - x;
}
if ((long) y + height > bufferHeight) {
height = bufferHeight - y;
}
if (fullBackbuffer instanceof BufferedImage bufferedImage) {
return bufferedImage.getSubimage(x, y, width, height);
} else {
ColorModel colorModel = window.getGraphicsConfiguration().getColorModel();
SampleModel sampleModel = colorModel.createCompatibleSampleModel(width, height);
WritableRaster raster = Raster.createWritableRaster(sampleModel, null);
BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), null);
image.getGraphics().drawImage(fullBackbuffer,
0, 0, width, height,
x, y, x + width, y + height,
null);
return image;
}
}
@JBRApi.Provides("Screenshoter#getWindowSurfaceArea")
private static BufferedImage getWindowSurfaceArea(Window window, int x, int y, int width, int height) {
Objects.requireNonNull(window);
if (x < 0 || y < 0) {
throw new IllegalArgumentException("Negative coordinates are not allowed");
}
if (width <= 0 || height <= 0) {
throw new IllegalArgumentException("The size must be positive");
}
ComponentPeer peer = window.peer;
if (peer == null || !window.isVisible()) {
return null;
}
if (peer instanceof SurfacePixelGrabber spg) {
// TODO: translate coordinates, maybe?
return spg.getClientAreaSnapshot(x, y, width, height);
}
return null;
}
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1995, 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1995, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@@ -44,6 +44,7 @@ import java.io.IOException;
import java.io.ObjectInputStream; import java.io.ObjectInputStream;
import java.io.ObjectOutputStream; import java.io.ObjectOutputStream;
import java.io.OptionalDataException; import java.io.OptionalDataException;
import java.io.PrintStream;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.lang.annotation.Native; import java.lang.annotation.Native;
@@ -54,12 +55,15 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.EventListener; import java.util.EventListener;
import java.util.LinkedHashMap;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.HashMap; import java.util.HashMap;
import java.util.Objects; import java.util.Objects;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.Set; import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector; import java.util.Vector;
import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicBoolean;
@@ -70,12 +74,15 @@ import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet; import javax.accessibility.AccessibleStateSet;
import com.jetbrains.exported.JBRApi; import com.jetbrains.exported.JBRApi;
import jdk.internal.misc.InnocuousThread;
import sun.awt.AWTAccessor; import sun.awt.AWTAccessor;
import sun.awt.AWTPermissions; import sun.awt.AWTPermissions;
import sun.awt.AppContext; import sun.awt.AppContext;
import sun.awt.DebugSettings; import sun.awt.DebugSettings;
import sun.awt.SunToolkit; import sun.awt.SunToolkit;
import sun.awt.util.IdentityArrayList; import sun.awt.util.IdentityArrayList;
import sun.awt.util.ThreadGroupUtils;
import sun.java2d.marlin.stats.StatDouble;
import sun.java2d.pipe.Region; import sun.java2d.pipe.Region;
import sun.security.action.GetPropertyAction; import sun.security.action.GetPropertyAction;
import sun.util.logging.PlatformLogger; import sun.util.logging.PlatformLogger;
@@ -1207,15 +1214,20 @@ public class Window extends Container implements Accessible {
} }
void doDispose() { void doDispose() {
class DisposeAction implements Runnable { final class DisposeAction implements Runnable {
public void run() { public void run() {
final Window window = Window.this;
// dump stats if needed:
AWTAccessor.getWindowAccessor().dumpStats(window, true, null);
disposing = true; disposing = true;
try { try {
// Check if this window is the fullscreen window for the // Check if this window is the fullscreen window for the
// device. Exit the fullscreen mode prior to disposing // device. Exit the fullscreen mode prior to disposing
// of the window if that's the case. // of the window if that's the case.
GraphicsDevice gd = getGraphicsConfiguration().getDevice(); GraphicsDevice gd = getGraphicsConfiguration().getDevice();
if (gd.getFullScreenWindow() == Window.this) { if (gd.getFullScreenWindow() == window) {
gd.setFullScreenWindow(null); gd.setFullScreenWindow(null);
} }
@@ -1246,6 +1258,7 @@ public class Window extends Container implements Accessible {
} }
} }
} }
boolean fireWindowClosedEvent = isDisplayable(); boolean fireWindowClosedEvent = isDisplayable();
DisposeAction action = new DisposeAction(); DisposeAction action = new DisposeAction();
if (EventQueue.isDispatchThread()) { if (EventQueue.isDispatchThread()) {
@@ -4059,6 +4072,7 @@ public class Window extends Container implements Accessible {
private float getHeight() { return height; } private float getHeight() { return height; }
private void setHeight(float height) { private void setHeight(float height) {
if (height <= 0.0f) throw new IllegalArgumentException("TitleBar height must be positive"); if (height <= 0.0f) throw new IllegalArgumentException("TitleBar height must be positive");
if (this.height == height) return;
this.height = height; this.height = height;
notifyUpdate(); notifyUpdate();
} }
@@ -4067,13 +4081,17 @@ public class Window extends Container implements Accessible {
} }
private void putProperties(Map<String, ?> m) { private void putProperties(Map<String, ?> m) {
if (properties == null) properties = new HashMap<>(); if (properties == null) properties = new HashMap<>();
properties.putAll(m); boolean needsUpdate = false;
notifyUpdate(); for (Map.Entry<String, ?> e : m.entrySet()) {
Object old = properties.put(e.getKey(), e.getValue());
if (!needsUpdate && !Objects.equals(old, e.getValue())) needsUpdate = true;
}
if (needsUpdate) notifyUpdate();
} }
private void putProperty(String key, Object value) { private void putProperty(String key, Object value) {
if (properties == null) properties = new HashMap<>(); if (properties == null) properties = new HashMap<>();
properties.put(key, value); Object old = properties.put(key, value);
notifyUpdate(); if (!Objects.equals(old, value)) notifyUpdate();
} }
private float getLeftInset() { return insets[0]; } private float getLeftInset() { return insets[0]; }
private float getRightInset() { return insets[1]; } private float getRightInset() { return insets[1]; }
@@ -4313,10 +4331,39 @@ public class Window extends Container implements Accessible {
return new Point2D.Double(wx, wy); return new Point2D.Double(wx, wy);
} }
private final static String STATS_ALL_SUFFIX = ".all";
private final static String SYSTEM_PROPERTY_COUNTERS;
private final static boolean USE_COUNTERS;
private final static boolean TRACE_ALL_COUNTERS;
private final static boolean TRACE_STD_ERR;
private final static int TRACE_CAPACITY;
private final static boolean TRACE_COUNTERS = true;
private final static boolean DUMP_STATS = true;
// thread dump interval (ms)
static final long DUMP_INTERVAL = 10 * 1000L;
private static PrintStream getTraceStdStream() {
// get live std stream:
return TRACE_STD_ERR ? System.err : System.out;
}
static { static {
@SuppressWarnings("removal") @SuppressWarnings("removal")
String counters = AccessController.doPrivileged( String counters = AccessController.doPrivileged(
new GetPropertyAction("awt.window.counters")); new GetPropertyAction("awt.window.counters"));
SYSTEM_PROPERTY_COUNTERS = counters;
USE_COUNTERS = (SYSTEM_PROPERTY_COUNTERS != null);
TRACE_ALL_COUNTERS = USE_COUNTERS && (Objects.equals(SYSTEM_PROPERTY_COUNTERS, "")
|| Objects.equals(SYSTEM_PROPERTY_COUNTERS, "stderr")
|| Objects.equals(SYSTEM_PROPERTY_COUNTERS, "stdout"));
TRACE_STD_ERR = USE_COUNTERS && SYSTEM_PROPERTY_COUNTERS.contains("stderr");
TRACE_CAPACITY = USE_COUNTERS ? 8 : 0;
AWTAccessor.setWindowAccessor(new AWTAccessor.WindowAccessor() { AWTAccessor.setWindowAccessor(new AWTAccessor.WindowAccessor() {
public void updateWindow(Window window) { public void updateWindow(Window window) {
@@ -4365,53 +4412,71 @@ public class Window extends Container implements Accessible {
public boolean countersEnabled(Window w) { public boolean countersEnabled(Window w) {
// May want to selectively enable or disable counters per window // May want to selectively enable or disable counters per window
return counters != null; return USE_COUNTERS;
} }
public void bumpCounter(Window w, String counterName) { private final static long NANO_IN_SEC = java.util.concurrent.TimeUnit.SECONDS.toNanos(1);
public void incrementCounter(final Window w, final String counterName) {
if (USE_COUNTERS) {
Objects.requireNonNull(w); Objects.requireNonNull(w);
Objects.requireNonNull(counterName); Objects.requireNonNull(counterName);
PerfCounter newCounter; final long curTimeNanos = System.nanoTime();
long curTimeNanos = System.nanoTime(); // use try-catch to avoid throwing runtime exception to native JNI callers!
try {
PerfCounter newCounter, prevCounter;
synchronized (w.perfCounters) { synchronized (w.perfCounters) {
newCounter = w.perfCounters.compute(counterName, (k, v) -> newCounter = w.perfCounters.compute(counterName, (k, v) ->
v == null v == null
? new PerfCounter(curTimeNanos, 1L) ? new PerfCounter(curTimeNanos, 1L)
: new PerfCounter(curTimeNanos, v.value + 1)); : new PerfCounter(curTimeNanos, v.value + 1));
} }
PerfCounter prevCounter;
synchronized (w.perfCountersPrev) { synchronized (w.perfCountersPrev) {
prevCounter = w.perfCountersPrev.putIfAbsent(counterName, newCounter); prevCounter = w.perfCountersPrev.putIfAbsent(counterName, newCounter);
} }
if (prevCounter != null) { if (prevCounter != null) {
long nanosInSecond = java.util.concurrent.TimeUnit.SECONDS.toNanos(1); final long timeDeltaNanos = curTimeNanos - prevCounter.updateTimeNanos;
long timeDeltaNanos = curTimeNanos - prevCounter.updateTimeNanos; if (timeDeltaNanos > NANO_IN_SEC) {
if (timeDeltaNanos > nanosInSecond) { final double valPerSecond = (double) (newCounter.value - prevCounter.value)
long valPerSecond = (long) ((double) (newCounter.value - prevCounter.value) * NANO_IN_SEC / timeDeltaNanos;
* nanosInSecond / timeDeltaNanos);
boolean traceAllCounters = Objects.equals(counters, "")
|| Objects.equals(counters, "stdout")
|| Objects.equals(counters, "stderr");
boolean traceEnabled = traceAllCounters || (counters != null && counters.contains(counterName));
if (traceEnabled) {
if (counters.contains("stderr")) {
System.err.println(counterName + " per second: " + valPerSecond);
} else {
System.out.println(counterName + " per second: " + valPerSecond);
}
}
if (perfLog.isLoggable(PlatformLogger.Level.FINE)) {
perfLog.fine(counterName + " per second: " + valPerSecond);
}
synchronized (w.perfCountersPrev) { synchronized (w.perfCountersPrev) {
w.perfCountersPrev.put(counterName, newCounter); w.perfCountersPrev.put(counterName, newCounter);
} }
addStat(w, counterName, valPerSecond);
if (TRACE_COUNTERS) {
dumpCounter(counterName, valPerSecond);
}
}
}
} catch (RuntimeException re) {
perfLog.severe("incrementCounter: failed", re);
} }
} }
} }
public long getCounter(Window w, String counterName) { public void addStat(final Window w, final String statName, final double value) {
if (USE_COUNTERS && Double.isFinite(value)) {
Objects.requireNonNull(w);
Objects.requireNonNull(statName);
// use try-catch to avoid throwing runtime exception to native JNI callers!
try {
synchronized (w.perfStats) {
StatDouble stat = w.perfStats.computeIfAbsent(statName, StatDouble::new);
stat.add(value);
stat = w.perfStats.computeIfAbsent(statName + STATS_ALL_SUFFIX, StatDouble::new);
stat.add(value);
}
} catch (RuntimeException re) {
perfLog.severe("addStat: failed", re);
}
}
}
public long getCounter(final Window w, final String counterName) {
if (USE_COUNTERS) {
Objects.requireNonNull(w); Objects.requireNonNull(w);
Objects.requireNonNull(counterName); Objects.requireNonNull(counterName);
@@ -4420,45 +4485,128 @@ public class Window extends Container implements Accessible {
return counter != null ? counter.value : -1L; return counter != null ? counter.value : -1L;
} }
} }
return -1L;
}
public long getCounterPerSecond(Window w, String counterName) { public double getCounterPerSecond(final Window w, final String counterName) {
if (USE_COUNTERS) {
Objects.requireNonNull(w); Objects.requireNonNull(w);
Objects.requireNonNull(counterName); Objects.requireNonNull(counterName);
PerfCounter newCounter; PerfCounter newCounter, prevCounter;
PerfCounter prevCounter;
synchronized (w.perfCounters) { synchronized (w.perfCounters) {
newCounter = w.perfCounters.get(counterName); newCounter = w.perfCounters.get(counterName);
} }
synchronized (w.perfCountersPrev) { synchronized (w.perfCountersPrev) {
prevCounter = w.perfCountersPrev.get(counterName); prevCounter = w.perfCountersPrev.get(counterName);
} }
if (newCounter != null && prevCounter != null) { if (newCounter != null && prevCounter != null) {
long timeDeltaNanos = newCounter.updateTimeNanos - prevCounter.updateTimeNanos; final long timeDeltaNanos = newCounter.updateTimeNanos - prevCounter.updateTimeNanos;
// Note that this time delta will usually be above one second. // Note that this time delta will usually be above one second.
if (timeDeltaNanos > 0) { if (timeDeltaNanos > 0L) {
long nanosInSecond = java.util.concurrent.TimeUnit.SECONDS.toNanos(1); return (double) (newCounter.value - prevCounter.value) * NANO_IN_SEC / timeDeltaNanos;
long valPerSecond = (long) ((double) (newCounter.value - prevCounter.value)
* nanosInSecond / timeDeltaNanos);
return valPerSecond;
} }
} }
return -1; }
return Double.NaN;
}
public void dumpStats(final Window w, final boolean reset, StringBuilder sb) {
if (USE_COUNTERS) {
synchronized (w.perfStats) {
boolean header = false;
for (final StatDouble stat : w.perfStats.values()) {
if (stat.shouldLog()) {
final boolean traceEnabled = TRACE_ALL_COUNTERS || SYSTEM_PROPERTY_COUNTERS.contains(stat.name);
if (!header) {
header = true;
doLog(String.format("* Window['%s'@%s]:",
(w instanceof Frame ? ((Frame) w).getTitle() : ""),
Integer.toHexString(System.identityHashCode(w))),
traceEnabled);
}
// format:
if (sb == null) {
sb = new StringBuilder(128);
}
sb.setLength(0);
sb.append(" - ");
stat.toString(sb);
doLog(sb.toString(), traceEnabled);
if (reset && !stat.name.endsWith(STATS_ALL_SUFFIX)) {
stat.reset();
} else {
stat.updateLastLogCount();
}
}
}
}
}
}
private static void dumpCounter(final String counterName, final double valPerSecond) {
if (USE_COUNTERS) {
doLog(String.format("%s per second: %.2f", counterName, valPerSecond),
TRACE_ALL_COUNTERS || SYSTEM_PROPERTY_COUNTERS.contains(counterName));
}
}
private static void doLog(final String msg, final boolean traceEnabled) {
if (traceEnabled) {
getTraceStdStream().println(msg);
}
if (perfLog.isLoggable(PlatformLogger.Level.FINE)) {
perfLog.fine(msg);
}
} }
}); // WindowAccessor }); // WindowAccessor
if (USE_COUNTERS) {
final Runnable dumper = new Runnable() {
private final static StringBuilder sb = new StringBuilder(128);
@Override
public void run() {
getTraceStdStream().printf("--- WindowStats dump at: %s ---\n", new java.util.Date());
final AWTAccessor.WindowAccessor windowAccessor = AWTAccessor.getWindowAccessor();
for (Window window : Window.getWindows()) {
// dump stats if needed:
windowAccessor.dumpStats(window, true, sb);
}
getTraceStdStream().println("-----");
}
};
final Thread hook = InnocuousThread.newSystemThread("WindowStatsHook", dumper);
hook.setDaemon(true);
hook.setContextClassLoader(null);
Runtime.getRuntime().addShutdownHook(hook);
if (DUMP_STATS) {
final Timer statTimer = new Timer("WindowStats", true);
statTimer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
dumper.run();
}
}, DUMP_INTERVAL, DUMP_INTERVAL);
}
}
} // static } // static
// a window doesn't need to be updated in the Z-order. // a window doesn't need to be updated in the Z-order.
@Override @Override
void updateZOrder() {} void updateZOrder() {}
private record PerfCounter(Long updateTimeNanos, Long value) {} private record PerfCounter(long updateTimeNanos, long value) {}
private transient final Map<String, PerfCounter> perfCounters = new HashMap<>(4); private transient final HashMap<String, PerfCounter> perfCounters = (USE_COUNTERS) ? new HashMap<>(TRACE_CAPACITY) : null;
private transient final Map<String, PerfCounter> perfCountersPrev = new HashMap<>(4); private transient final HashMap<String, PerfCounter> perfCountersPrev = (USE_COUNTERS) ? new HashMap<>(TRACE_CAPACITY) : null;
private transient final LinkedHashMap<String, StatDouble> perfStats = (USE_COUNTERS) ? new LinkedHashMap<>(TRACE_CAPACITY) : null;
} // class Window } // class Window

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 1997, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@@ -27,8 +27,6 @@ package javax.swing;
import java.awt.*; import java.awt.*;
import java.awt.event.*; import java.awt.event.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.VolatileImage; import java.awt.image.VolatileImage;
import java.awt.peer.WindowPeer; import java.awt.peer.WindowPeer;
import java.security.AccessControlContext; import java.security.AccessControlContext;
@@ -49,7 +47,6 @@ import sun.security.action.GetPropertyAction;
import com.sun.java.swing.SwingUtilities3; import com.sun.java.swing.SwingUtilities3;
import java.awt.geom.AffineTransform; import java.awt.geom.AffineTransform;
import java.util.stream.Collectors;
import sun.java2d.SunGraphics2D; import sun.java2d.SunGraphics2D;
import sun.java2d.pipe.Region; import sun.java2d.pipe.Region;
@@ -800,7 +797,7 @@ public class RepaintManager
.filter(Objects::nonNull) .filter(Objects::nonNull)
.distinct() .distinct()
.forEach(w -> AWTAccessor.getWindowAccessor() .forEach(w -> AWTAccessor.getWindowAccessor()
.bumpCounter(w, "swing.RepaintManager.updateWindows")); .incrementCounter(w, "swing.RepaintManager.updateWindows"));
if (Toolkit.getDefaultToolkit() instanceof SunToolkit sunToolkit && if (Toolkit.getDefaultToolkit() instanceof SunToolkit sunToolkit &&
sunToolkit.needUpdateWindow()) sunToolkit.needUpdateWindow())

View File

@@ -4319,6 +4319,10 @@ public class BasicTreeUI extends TreeUI
updateSize(); updateSize();
} }
else if (treeState.isExpanded(parentPath)) { else if (treeState.isExpanded(parentPath)) {
boolean isShowing = tree.isShowing();
TreePath minPath = null;
Rectangle minBounds = null;
if (isShowing) {
// Changed nodes are visible // Changed nodes are visible
// Find the minimum index, we only need paint from there // Find the minimum index, we only need paint from there
// down. // down.
@@ -4328,15 +4332,16 @@ public class BasicTreeUI extends TreeUI
} }
Object minChild = treeModel.getChild( Object minChild = treeModel.getChild(
parentPath.getLastPathComponent(), minIndex); parentPath.getLastPathComponent(), minIndex);
TreePath minPath = parentPath.pathByAddingChild(minChild); minPath = parentPath.pathByAddingChild(minChild);
Rectangle minBounds = getPathBounds(tree, minPath); minBounds = getPathBounds(tree, minPath);
}
// Forward to the treestate // Forward to the treestate
treeState.treeNodesChanged(e); treeState.treeNodesChanged(e);
// Mark preferred size as bogus. // Mark preferred size as bogus.
updateSize0(); updateSize0();
if (isShowing) {
// And repaint // And repaint
Rectangle newMinBounds = getPathBounds(tree, minPath); Rectangle newMinBounds = getPathBounds(tree, minPath);
if (minBounds == null || newMinBounds == null) { if (minBounds == null || newMinBounds == null) {
@@ -4347,12 +4352,12 @@ public class BasicTreeUI extends TreeUI
newMinBounds.height == minBounds.height) { newMinBounds.height == minBounds.height) {
tree.repaint(0, minBounds.y, tree.getWidth(), tree.repaint(0, minBounds.y, tree.getWidth(),
minBounds.height); minBounds.height);
} } else {
else {
tree.repaint(0, minBounds.y, tree.getWidth(), tree.repaint(0, minBounds.y, tree.getWidth(),
tree.getHeight() - minBounds.y); tree.getHeight() - minBounds.y);
} }
} }
}
else { else {
// Nodes that changed aren't visible. No need to paint // Nodes that changed aren't visible. No need to paint
treeState.treeNodesChanged(e); treeState.treeNodesChanged(e);

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2008, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@@ -348,10 +348,15 @@ public final class AWTAccessor {
*/ */
Window[] getOwnedWindows(Window w); Window[] getOwnedWindows(Window w);
/* JBR Window counters API */
boolean countersEnabled(Window w); boolean countersEnabled(Window w);
void bumpCounter(Window w, String counterName); void incrementCounter(Window w, String counterName);
void addStat(Window w, String statName, double value);
long getCounter(Window w, String counterName); long getCounter(Window w, String counterName);
long getCounterPerSecond(Window w, String counterName); double getCounterPerSecond(Window w, String counterName);
void dumpStats(Window w, boolean reset, StringBuilder sb);
} }
/** /**

View File

@@ -1,6 +1,5 @@
/* /*
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved. * Copyright 2025 JetBrains s.r.o.
* Copyright (c) 2023, JetBrains s.r.o.. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@@ -24,31 +23,11 @@
* questions. * questions.
*/ */
// These are stubs in case we were built with Vulkan disabled.
#ifndef VULKAN_ENABLED
#include "jlong_md.h"
#include "jni.h"
/* package sun.awt;
* Class: sun_java2d_vulkan_VKEnv
* Method: initPlatform import java.awt.image.BufferedImage;
* Signature: (J)Z
*/ public interface SurfacePixelGrabber {
JNIEXPORT jboolean JNICALL BufferedImage getClientAreaSnapshot(int x, int y, int width, int height);
Java_sun_java2d_vulkan_VKEnv_initPlatform(JNIEnv *env, jclass wlge, jlong nativePtr) {
return JNI_FALSE;
} }
/*
* Class: sun_java2d_vulkan_VKEnv
* Method: initNative
* Signature: (J)[Lsun/java2d/vulkan/VKGPU;
*/
JNIEXPORT jobjectArray JNICALL Java_sun_java2d_vulkan_VKEnv_initNative
(JNIEnv *env, jclass cls, jlong platformData)
{
return NULL;
}
#endif

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2015, 2023, Oracle and/or its affiliates. All rights reserved. * Copyright (c) 2015, 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it
@@ -30,6 +30,8 @@ import java.security.PrivilegedAction;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ConcurrentLinkedQueue;
import jdk.internal.misc.InnocuousThread;
import jdk.internal.ref.CleanerFactory; import jdk.internal.ref.CleanerFactory;
import sun.java2d.marlin.ArrayCacheConst.CacheStats; import sun.java2d.marlin.ArrayCacheConst.CacheStats;
import static sun.java2d.marlin.MarlinUtils.logInfo; import static sun.java2d.marlin.MarlinUtils.logInfo;
@@ -388,21 +390,13 @@ public final class RendererStats implements MarlinConst {
private RendererStatsHolder() { private RendererStatsHolder() {
AccessController.doPrivileged( AccessController.doPrivileged(
(PrivilegedAction<Void>) () -> { (PrivilegedAction<Void>) () -> {
final Thread hook = new Thread( final Thread hook = InnocuousThread.newSystemThread("MarlinStatsHook", () -> dump());
MarlinUtils.getRootThreadGroup(), hook.setDaemon(true);
new Runnable() {
@Override
public void run() {
dump();
}
},
"MarlinStatsHook"
);
hook.setContextClassLoader(null); hook.setContextClassLoader(null);
Runtime.getRuntime().addShutdownHook(hook); Runtime.getRuntime().addShutdownHook(hook);
if (USE_DUMP_THREAD) { if (USE_DUMP_THREAD) {
final Timer statTimer = new Timer("RendererStats"); final Timer statTimer = new Timer("RendererStats", true);
statTimer.scheduleAtFixedRate(new TimerTask() { statTimer.scheduleAtFixedRate(new TimerTask() {
@Override @Override
public void run() { public void run() {

View File

@@ -0,0 +1,128 @@
/*
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
* Copyright 2025 JetBrains s.r.o.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.java2d.marlin.stats;
import static sun.java2d.marlin.stats.StatLong.trimTo3Digits;
/**
* Statistics on double values
*/
public final class StatDouble {
// rolling mean weight (lerp):
private final static double EMA_ALPHA = 0.25;
private final static double EMA_ONE_MINUS_ALPHA = 1.0 - EMA_ALPHA;
public final String name;
private long count, lastLogCount;
private double min, max, mean, ema_mean = 0.0, squaredError;
public StatDouble(final String name) {
this.name = name;
reset();
}
public void reset() {
count = 0L;
lastLogCount = 0L;
min = Double.POSITIVE_INFINITY;
max = Double.NEGATIVE_INFINITY;
mean = 0.0;
// skip ema_mean = 0.0;
squaredError = 0.0;
}
public void add(final double val) {
count++;
if (val < min) {
min = val;
}
if (val > max) {
max = val;
}
// Exponential smoothing (EMA):
ema_mean = EMA_ALPHA * val + EMA_ONE_MINUS_ALPHA * ema_mean;
// Welford's algorithm:
final double oldMean = mean;
mean += (val - mean) / count;
squaredError += (val - mean) * (val - oldMean);
}
public boolean shouldLog() {
return (count > lastLogCount);
}
public void updateLastLogCount() {
this.lastLogCount = this.count;
}
public long count() {
return count;
}
public double min() {
return (count != 0L) ? min : Double.NaN;
}
public double max() {
return (count != 0L) ? max : Double.NaN;
}
public double mean() {
return (count != 0L) ? mean : Double.NaN;
}
public double ema() {
return (count != 0L) ? ema_mean : Double.NaN;
}
public double variance() {
return (count != 0L) ? (squaredError / (count - 1L)) : Double.NaN;
}
public double stddev() {
return (count != 0L) ? Math.sqrt(variance()) : Double.NaN;
}
public double total() {
return (count != 0L) ? (mean() * count) : Double.NaN;
}
@Override
public String toString() {
return toString(new StringBuilder(128)).toString();
}
public StringBuilder toString(final StringBuilder sb) {
sb.append(name).append('[').append(count);
sb.append("] sum: ").append(trimTo3Digits(total()));
sb.append(" avg: ").append(trimTo3Digits(mean()));
sb.append(" stddev: ").append(trimTo3Digits(stddev()));
sb.append(" ema: ").append(trimTo3Digits(ema()));
sb.append(" [").append(trimTo3Digits(min())).append(" - ").append(trimTo3Digits(max())).append("]");
return sb;
}
}

View File

@@ -31,20 +31,18 @@ package sun.java2d.marlin.stats;
public class StatLong { public class StatLong {
public final String name; public final String name;
public long count = 0L; public long count, sum, min, max;
public long sum = 0L;
public long min = Integer.MAX_VALUE;
public long max = Integer.MIN_VALUE;
public StatLong(final String name) { public StatLong(final String name) {
this.name = name; this.name = name;
reset();
} }
public void reset() { public void reset() {
count = 0L; count = 0L;
sum = 0L; sum = 0L;
min = Integer.MAX_VALUE; min = Long.MAX_VALUE;
max = Integer.MIN_VALUE; max = Long.MIN_VALUE;
} }
public void add(final int val) { public void add(final int val) {
@@ -78,7 +76,7 @@ public class StatLong {
sb.append(name).append('[').append(count); sb.append(name).append('[').append(count);
sb.append("] sum: ").append(sum).append(" avg: "); sb.append("] sum: ").append(sum).append(" avg: ");
sb.append(trimTo3Digits(((double) sum) / count)); sb.append(trimTo3Digits(((double) sum) / count));
sb.append(" [").append(min).append(" | ").append(max).append("]"); sb.append(" [").append(min).append(" - ").append(max).append("]");
return sb; return sb;
} }
@@ -89,7 +87,7 @@ public class StatLong {
* @return double value with only 3 decimal digits * @return double value with only 3 decimal digits
*/ */
public static double trimTo3Digits(final double value) { public static double trimTo3Digits(final double value) {
return ((long) (1e3d * value)) / 1e3d; return Double.isFinite(value) ? ((long) (1e3d * value)) / 1e3d : Double.NaN;
} }
} }

View File

@@ -100,11 +100,11 @@ public abstract class BufferedContext {
*/ */
protected static BufferedContext currentContext; protected static BufferedContext currentContext;
private Reference<AccelSurface> validSrcDataRef = new WeakReference<>(null); private Reference<AccelSurface> validSrcDataRef = null;
private Reference<AccelSurface> validDstDataRef = new WeakReference<>(null); private Reference<AccelSurface> validDstDataRef = null;
private Reference<Region> validClipRef = new WeakReference<>(null); private Reference<Region> validClipRef = null;
private Reference<Composite> validCompRef = new WeakReference<>(null); private Reference<Composite> validCompRef = null;
private Reference<Paint> validPaintRef = new WeakReference<>(null); private Reference<Paint> validPaintRef = null;
// renamed from isValidatedPaintAColor as part of a work around for 6764257 // renamed from isValidatedPaintAColor as part of a work around for 6764257
private boolean isValidatedPaintJustAColor; private boolean isValidatedPaintJustAColor;
private int validatedRGB; private int validatedRGB;
@@ -213,20 +213,18 @@ public abstract class BufferedContext {
updatePaint = true; updatePaint = true;
isValidatedPaintJustAColor = true; isValidatedPaintJustAColor = true;
} }
} else if (validPaintRef.get() != paint) { } else if (stateChanged(validPaintRef, paint)) {
updatePaint = true; updatePaint = true;
// this should be set when we are switching from paint to color // this should be set when we are switching from paint to color
// in which case this condition will be true // in which case this condition will be true
isValidatedPaintJustAColor = false; isValidatedPaintJustAColor = false;
} }
final AccelSurface validatedSrcData = validSrcDataRef.get(); final boolean srcChanged = stateChanged(validSrcDataRef, srcData);
final AccelSurface validatedDstData = validDstDataRef.get(); final boolean dstChanged = stateChanged(validDstDataRef, dstData);
if ((currentContext != this) || if ((currentContext != this) || srcChanged || dstChanged)
(srcData != validatedSrcData) ||
(dstData != validatedDstData))
{ {
if (dstData != validatedDstData) { if (dstChanged) {
// the clip is dependent on the destination surface, so we // the clip is dependent on the destination surface, so we
// need to update it if we have a new destination surface // need to update it if we have a new destination surface
updateClip = true; updateClip = true;
@@ -243,13 +241,13 @@ public abstract class BufferedContext {
setSurfaces(srcData, dstData); setSurfaces(srcData, dstData);
currentContext = this; currentContext = this;
validSrcDataRef = new WeakReference<>(srcData); validSrcDataRef = wrapState(srcData);
validDstDataRef = new WeakReference<>(dstData); validDstDataRef = wrapState(dstData);
} }
// validate clip // validate clip
final Region validatedClip = validClipRef.get(); final Region validatedClip = validClipRef == null ? null : validClipRef.get();
if ((clip != validatedClip) || updateClip) { if (stateChanged(validClipRef, clip) || updateClip) {
if (clip != null) { if (clip != null) {
if (updateClip || if (updateClip ||
validatedClip == null || validatedClip == null ||
@@ -264,13 +262,13 @@ public abstract class BufferedContext {
} else { } else {
resetClip(); resetClip();
} }
validClipRef = new WeakReference<>(clip); validClipRef = wrapState(clip);
} }
// validate composite (note that a change in the context flags // validate composite (note that a change in the context flags
// may require us to update the composite state, even if the // may require us to update the composite state, even if the
// composite has not changed) // composite has not changed)
if ((comp != validCompRef.get()) || (flags != validatedFlags)) { if (stateChanged(validCompRef, comp) || (flags != validatedFlags)) {
if (comp != null) { if (comp != null) {
setComposite(comp, flags); setComposite(comp, flags);
} else { } else {
@@ -279,7 +277,7 @@ public abstract class BufferedContext {
// the paint state is dependent on the composite state, so make // the paint state is dependent on the composite state, so make
// sure we update the color below // sure we update the color below
updatePaint = true; updatePaint = true;
validCompRef = new WeakReference<>(comp); validCompRef = wrapState(comp);
validatedFlags = flags; validatedFlags = flags;
} }
@@ -313,7 +311,7 @@ public abstract class BufferedContext {
} else { } else {
BufferedPaints.resetPaint(rq); BufferedPaints.resetPaint(rq);
} }
validPaintRef = new WeakReference<>(paint); validPaintRef = wrapState(paint);
} }
// mark dstData dirty // mark dstData dirty
@@ -321,6 +319,18 @@ public abstract class BufferedContext {
dstData.markDirty(); dstData.markDirty();
} }
private static <T> boolean stateChanged(Reference<T> ref, T obj) {
// null ref means "true" null object
if (ref == null) return obj != null;
T old = ref.get();
// null ref value means the object was GC'ed, return true in that case
return old == null || old != obj;
}
private static <T> Reference<T> wrapState(T obj) {
return obj == null ? null : new WeakReference<>(obj);
}
private void setSurfaces(AccelSurface srcData, private void setSurfaces(AccelSurface srcData,
AccelSurface dstData) AccelSurface dstData)
{ {
@@ -434,11 +444,11 @@ public abstract class BufferedContext {
resetComposite(); resetComposite();
resetClip(); resetClip();
BufferedPaints.resetPaint(rq); BufferedPaints.resetPaint(rq);
validSrcDataRef.clear(); validSrcDataRef = null;
validDstDataRef.clear(); validDstDataRef = null;
validCompRef.clear(); validCompRef = null;
validClipRef.clear(); validClipRef = null;
validPaintRef.clear(); validPaintRef = null;
isValidatedPaintJustAColor = false; isValidatedPaintJustAColor = false;
xformInUse = false; xformInUse = false;
} }

View File

@@ -31,12 +31,11 @@ import sun.util.logging.PlatformLogger;
import java.awt.Toolkit; import java.awt.Toolkit;
import java.security.AccessController; import java.security.AccessController;
import java.security.PrivilegedAction; import java.security.PrivilegedAction;
import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
public final class VKEnv { public final class VKEnv {
private static final PlatformLogger log = PlatformLogger.getLogger("sun.java2d.vulkan.VKInstance"); private static final PlatformLogger log = PlatformLogger.getLogger("sun.java2d.vulkan.VKEnv");
private static final class Options { private static final class Options {
@@ -72,9 +71,10 @@ public final class VKEnv {
public static synchronized void init(long nativePtr) { public static synchronized void init(long nativePtr) {
if (state > INITIALIZING) return; if (state > INITIALIZING) return;
long platformData = nativePtr == 0 ? 0 : initPlatform(nativePtr);
int newState = DISABLED; int newState = DISABLED;
if (Options.vulkan) { if (Options.vulkan) {
try {
long platformData = nativePtr == 0 ? 0 : initPlatform(nativePtr);
devices = initNative(platformData); devices = initNative(platformData);
if (devices != null) { if (devices != null) {
newState = ENABLED; newState = ENABLED;
@@ -94,20 +94,34 @@ public final class VKEnv {
VKMaskFill.register(); VKMaskFill.register();
VKMaskBlit.register(); VKMaskBlit.register();
} }
} catch (UnsatisfiedLinkError e) {
newState = DISABLED;
if (Options.verbose) {
System.err.println("Vulkan backend is not available");
e.printStackTrace(System.err);
}
if (log.isLoggable(PlatformLogger.Level.WARNING)) {
log.warning("Vulkan backend is not available", e);
}
}
} }
state = newState; state = newState;
if (Options.verbose || log.isLoggable(PlatformLogger.Level.FINE)) { if (Options.verbose || log.isLoggable(PlatformLogger.Level.FINE)) {
String message; StringBuilder msg = new StringBuilder("Vulkan rendering enabled: ");
if (isVulkanEnabled()) { if (isVulkanEnabled()) {
message = "Vulkan rendering enabled: YES" + msg.append("YES")
"\n presentation enabled: " + (isPresentationEnabled() ? "YES" : "NO") + .append("\n Presentation enabled: ").append(isPresentationEnabled() ? "YES" : "NO")
"\n accelerated surface data enabled: " + (isSurfaceDataAccelerated() ? "YES" : "NO") + .append("\n Accelerated surface data enabled: ").append(isSurfaceDataAccelerated() ? "YES" : "NO")
"\n devices:" + Stream.of(devices).map(d -> (d == defaultDevice ? .append("\n Devices:");
"\n *" : "\n ") + d.getName()).collect(Collectors.joining()); for (int i = 0; i < devices.length; i++) {
} else { VKGPU d = devices[i];
message = "Vulkan rendering enabled: NO"; msg.append(d == defaultDevice ? "\n *" : "\n ").append(i).append(": ").append(d.getName());
} }
} else {
msg.append("NO");
}
String message = msg.toString();
if (Options.verbose) { if (Options.verbose) {
System.err.println(message); System.err.println(message);
} }

View File

@@ -137,7 +137,7 @@ public abstract class VKSurfaceData extends SurfaceData
} }
} }
protected BufferedImage getSnapshot(int x, int y, int width, int height) { public BufferedImage getSnapshot(int x, int y, int width, int height) {
BufferedImage image = getFormat().createCompatibleImage(width, height, getTransparency()); BufferedImage image = getFormat().createCompatibleImage(width, height, getTransparency());
SurfaceData sd = SurfaceData.getPrimarySurfaceData(image); SurfaceData sd = SurfaceData.getPrimarySurfaceData(image);
Blit blit = Blit.getFromCache(getSurfaceType(), CompositeType.SrcNoEa, sd.getSurfaceType()); Blit blit = Blit.getFromCache(getSurfaceType(), CompositeType.SrcNoEa, sd.getSurfaceType());

View File

@@ -193,6 +193,14 @@ void VKAllocator_FindMemoryType(VKMemoryRequirements* requirements,
static uint32_t VKAllocator_AllocatePage(VKAllocator* alloc, uint32_t memoryType, VkDeviceSize size, static uint32_t VKAllocator_AllocatePage(VKAllocator* alloc, uint32_t memoryType, VkDeviceSize size,
VkImage dedicatedImage, VkBuffer dedicatedBuffer) { VkImage dedicatedImage, VkBuffer dedicatedBuffer) {
assert(alloc != NULL); assert(alloc != NULL);
assert(memoryType < VK_MAX_MEMORY_TYPES);
uint32_t heapIndex = alloc->memoryProperties.memoryTypes[memoryType].heapIndex;
VkDeviceSize heapSize = alloc->memoryProperties.memoryHeaps[heapIndex].size;
if (size > heapSize) {
J2dRlsTraceLn3(J2D_TRACE_ERROR, "VKAllocator_AllocatePage: not enough memory in heap, heapIndex=%d, heapSize=%d, size=%d", heapIndex, heapSize, size);
return NO_PAGE_INDEX;
}
// Allocate memory. // Allocate memory.
VkBool32 dedicated = dedicatedImage != VK_NULL_HANDLE || dedicatedBuffer != VK_NULL_HANDLE; VkBool32 dedicated = dedicatedImage != VK_NULL_HANDLE || dedicatedBuffer != VK_NULL_HANDLE;

View File

@@ -24,22 +24,15 @@
* questions. * questions.
*/ */
#include <assert.h>
#include <string.h> #include <string.h>
#include "jlong.h"
#include "VKUtil.h"
#include "VKBlitLoops.h"
#include "VKSurfaceData.h"
#include "VKRenderer.h"
#include "GraphicsPrimitiveMgr.h" #include "GraphicsPrimitiveMgr.h"
#include "Trace.h"
#include "VKImage.h"
#include "VKBuffer.h" #include "VKBuffer.h"
#include "VKImage.h"
#include "VKDevice.h" #include "VKDevice.h"
#include "VKTexturePool.h"
#include "VKUtil.h"
#include "VKRenderer.h" #include "VKRenderer.h"
#include "VKSurfaceData.h"
#include "VKUtil.h"
#define SRCTYPE_BITS sun_java2d_vulkan_VKSwToSurfaceBlit_SRCTYPE_BITS #define SRCTYPE_BITS sun_java2d_vulkan_VKSwToSurfaceBlit_SRCTYPE_BITS
@@ -100,8 +93,7 @@ void VKBlitLoops_IsoBlit(VKSDOps* srcOps, jint filter,
jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2) jdouble dx1, jdouble dy1, jdouble dx2, jdouble dy2)
{ {
if (srcOps == NULL) { if (srcOps == NULL) {
J2dRlsTraceLn(J2D_TRACE_ERROR, J2dRlsTraceLn(J2D_TRACE_ERROR, "VKBlitLoops_IsoBlit: srcOps is null");
"VKBlitLoops_IsoBlit: srcOps is null")
return; return;
} }
@@ -147,7 +139,7 @@ static void VKBlitLoops_FindStageBufferMemoryType(VKMemoryRequirements* requirem
void VKBlitLoops_Blit(JNIEnv *env, void VKBlitLoops_Blit(JNIEnv *env,
SurfaceDataOps* src, SurfaceDataOps* src,
jshort srctype, jint hint, jshort srctype, jint filter,
jint sx1, jint sy1, jint sx1, jint sy1,
jint sx2, jint sy2, jint sx2, jint sy2,
jdouble dx1, jdouble dy1, jdouble dx1, jdouble dy1,
@@ -237,13 +229,13 @@ void VKBlitLoops_Blit(JNIEnv *env,
VKRenderer_RecordBarriers(device->renderer, NULL, NULL, &barrier, &barrierBatch); VKRenderer_RecordBarriers(device->renderer, NULL, NULL, &barrier, &barrierBatch);
} }
VKRenderer_DrawImage(image, type.format, type.swizzle, hint, SAMPLER_WRAP_BORDER, VKRenderer_DrawImage(image, type.format, type.swizzle, filter, SAMPLER_WRAP_BORDER,
0, 0, (float)sw, (float)sh, (float)dx1, (float)dy1, (float)dx2, (float)dy2); 0, 0, (float)sw, (float)sh, (float)dx1, (float)dy1, (float)dx2, (float)dy2);
VKRenderer_FlushMemoryOnReset(context->surface->renderPass, buffer.range); VKRenderer_FlushMemory(context->surface, buffer.range);
VKRenderer_ExecOnCleanup(context->surface->renderPass, VKBlitLoops_DisposeTexture, imageHandle); VKRenderer_ExecOnCleanup(context->surface, VKBlitLoops_DisposeTexture, imageHandle);
VKRenderer_ExecOnCleanup(context->surface->renderPass, VKBlitLoops_DisposeBuffer, buffer.handle); VKRenderer_ExecOnCleanup(context->surface, VKBlitLoops_DisposeBuffer, buffer.handle);
VKRenderer_ExecOnCleanup(context->surface->renderPass, VKBlitLoops_DisposeMemory, page); VKRenderer_ExecOnCleanup(context->surface, VKBlitLoops_DisposeMemory, page);
} else { } else {
J2dRlsTraceLn(J2D_TRACE_ERROR, "VKBlitLoops_Blit: could not get raster info"); J2dRlsTraceLn(J2D_TRACE_ERROR, "VKBlitLoops_Blit: could not get raster info");
} }
@@ -258,7 +250,7 @@ void VKBlitLoops_Blit(JNIEnv *env,
*/ */
void void
VKBlitLoops_SurfaceToSwBlit(JNIEnv *env, VKBlitLoops_SurfaceToSwBlit(JNIEnv *env,
VKSDOps* src, SurfaceDataOps* dst, jint dsttype, VKSDOps* src, SurfaceDataOps* dst,
jint srcx, jint srcy, jint dstx, jint dsty, jint srcx, jint srcy, jint dstx, jint dsty,
jint width, jint height) jint width, jint height)
{ {

View File

@@ -28,10 +28,8 @@
#define VKBlitLoops_h_Included #define VKBlitLoops_h_Included
#include "jni.h" #include "jni.h"
#include "sun_java2d_vulkan_VKBlitLoops.h"
#include "VKTypes.h"
#include "SurfaceData.h" #include "SurfaceData.h"
#include "VKTypes.h"
void VKBlitLoops_IsoBlit(VKSDOps* srcOps, void VKBlitLoops_IsoBlit(VKSDOps* srcOps,
jint filter, jint filter,
@@ -42,7 +40,7 @@ void VKBlitLoops_IsoBlit(VKSDOps* srcOps,
void VKBlitLoops_Blit(JNIEnv *env, void VKBlitLoops_Blit(JNIEnv *env,
SurfaceDataOps* src, SurfaceDataOps* src,
jshort srctype, jint hint, jshort srctype, jint filter,
jint sx1, jint sy1, jint sx1, jint sy1,
jint sx2, jint sy2, jint sx2, jint sy2,
jdouble dx1, jdouble dy1, jdouble dx1, jdouble dy1,
@@ -50,7 +48,7 @@ void VKBlitLoops_Blit(JNIEnv *env,
void void
VKBlitLoops_SurfaceToSwBlit(JNIEnv *env, VKBlitLoops_SurfaceToSwBlit(JNIEnv *env,
VKSDOps* src, SurfaceDataOps* dst, jint dsttype, VKSDOps* src, SurfaceDataOps* dst,
jint srcx, jint srcy, jint dstx, jint dsty, jint srcx, jint srcy, jint dstx, jint dsty,
jint width, jint height); jint width, jint height);

View File

@@ -30,12 +30,9 @@
#include "VKAllocator.h" #include "VKAllocator.h"
#include "VKBuffer.h" #include "VKBuffer.h"
#include "VKDevice.h" #include "VKDevice.h"
#include "VKRenderer.h"
#define VK_BUFFER_HOST_COHERENT_MEMORY #define VK_BUFFER_HOST_COHERENT_MEMORY
const size_t VK_BUFFER_CREATE_THRESHOLD = 0xDC000;
static VKMemory VKBuffer_DestroyBuffersOnFailure(VKDevice* device, VKMemory page, uint32_t bufferCount, VKBuffer* buffers) { static VKMemory VKBuffer_DestroyBuffersOnFailure(VKDevice* device, VKMemory page, uint32_t bufferCount, VKBuffer* buffers) {
assert(device != NULL && device->allocator != NULL); assert(device != NULL && device->allocator != NULL);
for (uint32_t i = 0; i < bufferCount; i++) { for (uint32_t i = 0; i < bufferCount; i++) {
@@ -233,6 +230,11 @@ void VKBuffer_Dispose(VKDevice* device, void* data) {
VKBuffer_Destroy(device, buffer); VKBuffer_Destroy(device, buffer);
} }
// TODO This is an internal API and should not be used from VKBuffer!
void VKRenderer_RecordBarriers(VKRenderer* renderer,
VkBufferMemoryBarrier* bufferBarriers, VKBarrierBatch* bufferBatch,
VkImageMemoryBarrier* imageBarriers, VKBarrierBatch* imageBatch);
VKBuffer *VKBuffer_CreateFromRaster(VKDevice *device, VKBuffer *VKBuffer_CreateFromRaster(VKDevice *device,
VKBuffer_RasterInfo info, VKBuffer_RasterInfo info,
VkPipelineStageFlags stage, VkPipelineStageFlags stage,
@@ -270,19 +272,10 @@ VKBuffer *VKBuffer_CreateFromRaster(VKDevice *device,
device->vkUnmapMemory(device->handle, buffer->range.memory); device->vkUnmapMemory(device->handle, buffer->range.memory);
{ {
VkCommandBuffer cb = VKRenderer_Record(device->renderer);
VkBufferMemoryBarrier barrier; VkBufferMemoryBarrier barrier;
VKBarrierBatch barrierBatch = {}; VKBarrierBatch barrierBatch = {};
VKBuffer_AddBarrier(&barrier, &barrierBatch, buffer, VKBuffer_AddBarrier(&barrier, &barrierBatch, buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, stage, access);
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, stage, access); VKRenderer_RecordBarriers(device->renderer, &barrier, &barrierBatch, NULL, NULL);
if (barrierBatch.barrierCount > 0) {
device->vkCmdPipelineBarrier(cb, barrierBatch.srcStages,
barrierBatch.dstStages,
0, 0, NULL,
barrierBatch.barrierCount, &barrier,
0, NULL);
}
} }
return buffer; return buffer;
} }

View File

@@ -27,11 +27,8 @@
#ifndef VKBuffer_h_Included #ifndef VKBuffer_h_Included
#define VKBuffer_h_Included #define VKBuffer_h_Included
#include "VKTypes.h" #include "VKAllocator.h"
#include "VKUtil.h"
#define ARRAY_TO_VERTEX_BUF(device, vertices) \
VKBuffer_CreateFromData(device, vertices, ARRAY_SIZE(vertices)*sizeof (vertices[0]),\
VK_PIPELINE_STAGE_VERTEX_INPUT_BIT, VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT)
struct VKBuffer { struct VKBuffer {
VkBuffer handle; VkBuffer handle;

View File

@@ -348,6 +348,7 @@ Java_sun_java2d_vulkan_VKGPU_init(JNIEnv *env, jclass jClass, jlong jDevice) {
} }
J2dRlsTraceLn1(J2D_TRACE_INFO, "VKDevice_init(%s)", device->name); J2dRlsTraceLn1(J2D_TRACE_INFO, "VKDevice_init(%s)", device->name);
// Init function tables.
VkBool32 missingAPI = JNI_FALSE; VkBool32 missingAPI = JNI_FALSE;
DEVICE_FUNCTION_TABLE(CHECK_PROC_ADDR, missingAPI, vk->vkGetDeviceProcAddr, device->handle, device->) DEVICE_FUNCTION_TABLE(CHECK_PROC_ADDR, missingAPI, vk->vkGetDeviceProcAddr, device->handle, device->)
if (device->caps & CAP_PRESENTABLE_BIT) { if (device->caps & CAP_PRESENTABLE_BIT) {

View File

@@ -27,7 +27,7 @@
#include <assert.h> #include <assert.h>
#include "VKUtil.h" #include "VKUtil.h"
#include "VKAllocator.h" #include "VKAllocator.h"
#include "VKBuffer.h" #include "VKBuffer.h" // TODO refactor this
#include "VKDevice.h" #include "VKDevice.h"
#include "VKImage.h" #include "VKImage.h"
#include "VKRenderer.h" #include "VKRenderer.h"

View File

@@ -21,6 +21,7 @@
// or visit www.oracle.com if you need additional information or have any // or visit www.oracle.com if you need additional information or have any
// questions. // questions.
#include <assert.h>
#include "VKUtil.h" #include "VKUtil.h"
#include "VKEnv.h" #include "VKEnv.h"
#include "VKPipelines.h" #include "VKPipelines.h"
@@ -528,8 +529,6 @@ VKRenderPassContext* VKPipelines_GetRenderPassContext(VKPipelineContext* pipelin
return renderPassContext; return renderPassContext;
} }
// static VKPipelineInfo VKPipelines_
VKPipelineInfo VKPipelines_GetPipelineInfo(VKRenderPassContext* renderPassContext, VKPipelineDescriptor descriptor) { VKPipelineInfo VKPipelines_GetPipelineInfo(VKRenderPassContext* renderPassContext, VKPipelineDescriptor descriptor) {
assert(renderPassContext != NULL); assert(renderPassContext != NULL);
VKPipelineInfo info = MAP_AT(renderPassContext->pipelines, descriptor); VKPipelineInfo info = MAP_AT(renderPassContext->pipelines, descriptor);

View File

@@ -378,7 +378,7 @@ JNIEXPORT void JNICALL Java_sun_java2d_vulkan_VKRenderQueue_flushBuffer
J2dRlsTraceLn8(J2D_TRACE_VERBOSE, J2dRlsTraceLn8(J2D_TRACE_VERBOSE,
"VKRenderQueue_flushBuffer: SURFACE_TO_SW_BLIT (%p) (%d %d %d %d) -> (%p) (%d %d)", "VKRenderQueue_flushBuffer: SURFACE_TO_SW_BLIT (%p) (%d %d %d %d) -> (%p) (%d %d)",
src, sx, sy, w, h, dst, dx, dy); src, sx, sy, w, h, dst, dx, dy);
VKBlitLoops_SurfaceToSwBlit(env, src, dst, dsttype, sx, sy, dx, dy, w, h); VKBlitLoops_SurfaceToSwBlit(env, src, dst, sx, sy, dx, dy, w, h);
} }
break; break;
case sun_java2d_pipe_BufferedOpCodes_MASK_FILL: case sun_java2d_pipe_BufferedOpCodes_MASK_FILL:

View File

@@ -53,12 +53,6 @@ RING_BUFFER(struct PoolEntry_ ## NAME { \
(VAR) = RING_BUFFER_FRONT((RENDERER)->NAME)->value; RING_BUFFER_POP_FRONT((RENDERER)->NAME); \ (VAR) = RING_BUFFER_FRONT((RENDERER)->NAME)->value; RING_BUFFER_POP_FRONT((RENDERER)->NAME); \
}} while(0) }} while(0)
/**
* Check if there are available items in the pool.
*/
#define POOL_NOT_EMPTY(RENDERER, NAME) \
(VKRenderer_CheckPoolEntryAvailable((RENDERER), RING_BUFFER_FRONT((RENDERER)->NAME)))
/** /**
* Return an item to the pool. It will only become available again * Return an item to the pool. It will only become available again
* after the next submitted batch of work completes execution on GPU. * after the next submitted batch of work completes execution on GPU.
@@ -69,7 +63,7 @@ RING_BUFFER(struct PoolEntry_ ## NAME { \
/** /**
* Insert an item into the pool. It is available for POOL_TAKE immediately. * Insert an item into the pool. It is available for POOL_TAKE immediately.
* This is usually used for bulk insertion of newly-created resources. * This is usually used for bulk insertion of newly created resources.
*/ */
#define POOL_INSERT(RENDERER, NAME, VAR) (RING_BUFFER_PUSH_FRONT((RENDERER)->NAME) = \ #define POOL_INSERT(RENDERER, NAME, VAR) (RING_BUFFER_PUSH_FRONT((RENDERER)->NAME) = \
(struct PoolEntry_ ## NAME) { .timestamp = 0ULL, .value = (VAR) }) (struct PoolEntry_ ## NAME) { .timestamp = 0ULL, .value = (VAR) })
@@ -95,7 +89,7 @@ typedef struct {
} VKCleanupEntry; } VKCleanupEntry;
/** /**
* Renderer attached to device. * Renderer attached to the device.
*/ */
struct VKRenderer { struct VKRenderer {
VKDevice* device; VKDevice* device;
@@ -106,7 +100,6 @@ struct VKRenderer {
POOL(VkSemaphore, semaphorePool); POOL(VkSemaphore, semaphorePool);
POOL(VKBuffer, vertexBufferPool); POOL(VKBuffer, vertexBufferPool);
POOL(VKTexelBuffer, maskFillBufferPool); POOL(VKTexelBuffer, maskFillBufferPool);
POOL(VkFramebuffer, framebufferDestructionQueue);
POOL(VKCleanupEntry, cleanupQueue); POOL(VKCleanupEntry, cleanupQueue);
ARRAY(VKMemory) bufferMemoryPages; ARRAY(VKMemory) bufferMemoryPages;
ARRAY(VkDescriptorPool) descriptorPools; ARRAY(VkDescriptorPool) descriptorPools;
@@ -151,7 +144,7 @@ typedef struct {
} BufferWriting; } BufferWriting;
/** /**
* Rendering-related info attached to surface. * Rendering-related info attached to the surface.
*/ */
struct VKRenderPass { struct VKRenderPass {
VKRenderPassContext* context; VKRenderPassContext* context;
@@ -316,6 +309,16 @@ void VKRenderer_CreateImageDescriptorSet(VKRenderer* renderer, VkDescriptorPool*
*set = VKRenderer_AllocateImageDescriptorSet(renderer, *descriptorPool); *set = VKRenderer_AllocateImageDescriptorSet(renderer, *descriptorPool);
} }
static void VKRenderer_CleanupPendingResources(VKRenderer* renderer) {
VKDevice* device = renderer->device;
for (;;) {
VKCleanupEntry entry = { NULL, NULL };
POOL_TAKE(renderer, cleanupQueue, entry);
if (entry.handler == NULL) break;
entry.handler(device, entry.data);
}
}
static VkSemaphore VKRenderer_AddPendingSemaphore(VKRenderer* renderer) { static VkSemaphore VKRenderer_AddPendingSemaphore(VKRenderer* renderer) {
VKDevice* device = renderer->device; VKDevice* device = renderer->device;
VkSemaphore semaphore = VK_NULL_HANDLE; VkSemaphore semaphore = VK_NULL_HANDLE;
@@ -331,9 +334,11 @@ static VkSemaphore VKRenderer_AddPendingSemaphore(VKRenderer* renderer) {
return semaphore; return semaphore;
} }
/**
* Wait till the GPU execution reached a given timestamp.
*/
static void VKRenderer_Wait(VKRenderer* renderer, uint64_t timestamp) { static void VKRenderer_Wait(VKRenderer* renderer, uint64_t timestamp) {
if (renderer->readTimestamp >= timestamp) return; if (renderer->readTimestamp < timestamp) {
VKDevice* device = renderer->device;
VkSemaphoreWaitInfo semaphoreWaitInfo = { VkSemaphoreWaitInfo semaphoreWaitInfo = {
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO, .sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
.flags = 0, .flags = 0,
@@ -341,11 +346,10 @@ static void VKRenderer_Wait(VKRenderer* renderer, uint64_t timestamp) {
.pSemaphores = &renderer->timelineSemaphore, .pSemaphores = &renderer->timelineSemaphore,
.pValues = &timestamp .pValues = &timestamp
}; };
VK_IF_ERROR(device->vkWaitSemaphores(device->handle, &semaphoreWaitInfo, -1)) { VK_IF_ERROR(renderer->device->vkWaitSemaphores(renderer->device->handle, &semaphoreWaitInfo, -1)) VK_UNHANDLED_ERROR();
} else { else renderer->readTimestamp = timestamp; // On success, update the last known timestamp.
// On success, update last known timestamp.
renderer->readTimestamp = timestamp;
} }
VKRenderer_CleanupPendingResources(renderer);
} }
void VKRenderer_Sync(VKRenderer* renderer) { void VKRenderer_Sync(VKRenderer* renderer) {
@@ -426,9 +430,6 @@ void VKRenderer_Destroy(VKRenderer* renderer) {
device->vkDestroyBufferView(device->handle, entry->value.view, NULL); device->vkDestroyBufferView(device->handle, entry->value.view, NULL);
device->vkDestroyBuffer(device->handle, entry->value.buffer.handle, NULL); device->vkDestroyBuffer(device->handle, entry->value.buffer.handle, NULL);
} }
POOL_DRAIN_FOR(renderer, framebufferDestructionQueue, entry) {
device->vkDestroyFramebuffer(device->handle, entry->value, NULL);
}
for (uint32_t i = 0; i < ARRAY_SIZE(renderer->bufferMemoryPages); i++) { for (uint32_t i = 0; i < ARRAY_SIZE(renderer->bufferMemoryPages); i++) {
VKAllocator_Free(device->allocator, renderer->bufferMemoryPages[i]); VKAllocator_Free(device->allocator, renderer->bufferMemoryPages[i]);
} }
@@ -453,24 +454,6 @@ void VKRenderer_Destroy(VKRenderer* renderer) {
free(renderer); free(renderer);
} }
static void VKRenderer_CleanupPendingResources(VKRenderer* renderer) {
VKDevice* device = renderer->device;
while (POOL_NOT_EMPTY(renderer, cleanupQueue)) {
VKCleanupEntry entry = {};
POOL_TAKE(renderer, cleanupQueue, entry);
entry.handler(device, entry.data);
}
for (;;) {
VkFramebuffer framebuffer = VK_NULL_HANDLE;
POOL_TAKE(renderer, framebufferDestructionQueue, framebuffer);
if (framebuffer == VK_NULL_HANDLE) break;
device->vkDestroyFramebuffer(device->handle, framebuffer, NULL);
J2dRlsTraceLn1(J2D_TRACE_VERBOSE, "VKRenderer_CleanupPendingResources(%p): framebuffer destroyed", renderer);
}
}
/** /**
* Record commands into primary command buffer (outside of a render pass). * Record commands into primary command buffer (outside of a render pass).
* Recorded commands will be sent for execution via VKRenderer_Flush. * Recorded commands will be sent for execution via VKRenderer_Flush.
@@ -575,38 +558,8 @@ void VKRenderer_Flush(VKRenderer* renderer) {
renderer, submitInfo.commandBufferCount, pendingPresentations); renderer, submitInfo.commandBufferCount, pendingPresentations);
} }
/** /**
* Prepare image barrier info to be executed in batch, if needed. * Get Color RGBA components in a format suitable for the current render pass.
*/
void VKRenderer_AddImageBarrier(VkImageMemoryBarrier* barriers, VKBarrierBatch* batch,
VKImage* image, VkPipelineStageFlags stage, VkAccessFlags access, VkImageLayout layout) {
assert(barriers != NULL && batch != NULL && image != NULL);
// TODO Even if stage, access and layout didn't change, we may still need a barrier against WaW hazard.
if (stage != image->lastStage || access != image->lastAccess || layout != image->layout) {
barriers[batch->barrierCount] = (VkImageMemoryBarrier) {
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER,
.srcAccessMask = image->lastAccess,
.dstAccessMask = access,
.oldLayout = image->layout,
.newLayout = layout,
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
.image = image->handle,
.subresourceRange = { VKUtil_GetFormatGroup(image->format).aspect, 0, 1, 0, 1 }
};
batch->barrierCount++;
batch->srcStages |= image->lastStage;
batch->dstStages |= stage;
image->lastStage = stage;
image->lastAccess = access;
image->layout = layout;
}
}
/**
* Get Color RGBA components in a suitable for the current render pass.
*/ */
inline RGBA VKRenderer_GetRGBA(VKSDOps* surface, Color color) { inline RGBA VKRenderer_GetRGBA(VKSDOps* surface, Color color) {
return VKUtil_GetRGBA(color, surface->renderPass->outAlphaType); return VKUtil_GetRGBA(color, surface->renderPass->outAlphaType);
@@ -660,6 +613,25 @@ static void VKRenderer_ResetDrawing(VKSDOps* surface) {
ARRAY_RESIZE(surface->renderPass->cleanupQueue, 0); ARRAY_RESIZE(surface->renderPass->cleanupQueue, 0);
} }
/**
* Flush render passes depending on a given surface.
* This function must be called before mutating a surface
* because there may be pending render passes reading from that surface.
*/
static void VKRenderer_FlushDependentRenderPasses(VKSDOps* surface) {
// We're going to clear dependentSurfaces in the end anyway,
// so temporarily reset it to NULL to save on removing flushed render passes one-by-one.
ARRAY(VKSDOps*) deps = surface->dependentSurfaces;
surface->dependentSurfaces = NULL;
uint32_t size = (uint32_t) ARRAY_SIZE(deps);
if (size > 0) J2dRlsTraceLn2(J2D_TRACE_VERBOSE, "VKRenderer_FlushDependentRenderPasses(%p): %d", surface, size);
for (uint32_t i = 0; i < size; i++) {
VKRenderer_FlushRenderPass(deps[i]);
}
ARRAY_RESIZE(deps, 0);
surface->dependentSurfaces = deps;
}
/** /**
* Discard all recorded commands for the render pass. * Discard all recorded commands for the render pass.
*/ */
@@ -673,7 +645,6 @@ static void VKRenderer_DiscardRenderPass(VKSDOps* surface) {
J2dRlsTraceLn1(J2D_TRACE_VERBOSE, "VKRenderer_DiscardRenderPass(%p)", surface); J2dRlsTraceLn1(J2D_TRACE_VERBOSE, "VKRenderer_DiscardRenderPass(%p)", surface);
} }
} }
static void VKRenderer_FlushDependentRenderPasses(VKSDOps* surface);
void VKRenderer_DestroyRenderPass(VKSDOps* surface) { void VKRenderer_DestroyRenderPass(VKSDOps* surface) {
assert(surface != NULL); assert(surface != NULL);
@@ -688,7 +659,6 @@ void VKRenderer_DestroyRenderPass(VKSDOps* surface) {
} }
if (surface->renderPass == NULL) return; if (surface->renderPass == NULL) return;
if (device != NULL && device->renderer != NULL) { if (device != NULL && device->renderer != NULL) {
VKRenderer_CleanupPendingResources(device->renderer);
VKRenderer_DiscardRenderPass(surface); VKRenderer_DiscardRenderPass(surface);
// Release resources. // Release resources.
device->vkDestroyFramebuffer(device->handle, surface->renderPass->framebuffer, NULL); device->vkDestroyFramebuffer(device->handle, surface->renderPass->framebuffer, NULL);
@@ -744,6 +714,11 @@ static VkBool32 VKRenderer_InitRenderPass(VKSDOps* surface) {
return VK_TRUE; return VK_TRUE;
} }
static void VKRenderer_CleanupFramebuffer(VKDevice* device, void* data) {
device->vkDestroyFramebuffer(device->handle, (VkFramebuffer) data, NULL);
J2dRlsTraceLn1(J2D_TRACE_VERBOSE, "VKRenderer_CleanupFramebuffer(%p)", data);
}
/** /**
* Initialize surface framebuffer. * Initialize surface framebuffer.
* This function can be called between render passes of a single frame, unlike VKRenderer_InitRenderPass. * This function can be called between render passes of a single frame, unlike VKRenderer_InitRenderPass.
@@ -755,7 +730,8 @@ static void VKRenderer_InitFramebuffer(VKSDOps* surface) {
if (renderPass->state.stencilMode == STENCIL_MODE_NONE && surface->stencil != NULL) { if (renderPass->state.stencilMode == STENCIL_MODE_NONE && surface->stencil != NULL) {
// Queue outdated color-only framebuffer for destruction. // Queue outdated color-only framebuffer for destruction.
POOL_RETURN(device->renderer, framebufferDestructionQueue, renderPass->framebuffer); POOL_RETURN(device->renderer, cleanupQueue,
((VKCleanupEntry) { VKRenderer_CleanupFramebuffer, renderPass->framebuffer }));
renderPass->framebuffer = VK_NULL_HANDLE; renderPass->framebuffer = VK_NULL_HANDLE;
renderPass->state.stencilMode = STENCIL_MODE_OFF; renderPass->state.stencilMode = STENCIL_MODE_OFF;
} }
@@ -902,24 +878,20 @@ VkBool32 VKRenderer_FlushRenderPass(VKSDOps* surface) {
} }
ARRAY_RESIZE(surface->renderPass->usedSurfaces, 0); ARRAY_RESIZE(surface->renderPass->usedSurfaces, 0);
// Insert barriers to prepare surface for rendering. // Insert barriers to prepare surface for rendering.
VkImageMemoryBarrier barriers[2]; VkImageMemoryBarrier barriers[2];
VKBarrierBatch barrierBatch = {}; VKBarrierBatch barrierBatch = {};
VKRenderer_AddImageBarrier(barriers, &barrierBatch, surface->image, VKImage_AddBarrier(barriers, &barrierBatch, surface->image,
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
if (surface->stencil != NULL) { if (surface->stencil != NULL) {
VKRenderer_AddImageBarrier(barriers, &barrierBatch, surface->stencil, VKImage_AddBarrier(barriers, &barrierBatch, surface->stencil,
VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT, VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT | VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT,
VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT, VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_READ_BIT | VK_ACCESS_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL); VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
} }
if (barrierBatch.barrierCount > 0) { VKRenderer_RecordBarriers(renderer, NULL, NULL, barriers, &barrierBatch);
device->vkCmdPipelineBarrier(cb, barrierBatch.srcStages, barrierBatch.dstStages,
0, 0, NULL, 0, NULL, barrierBatch.barrierCount, barriers);
}
// If there is a pending clear, record it into render pass. // If there is a pending clear, record it into render pass.
if (clear) VKRenderer_BeginRenderPass(surface); if (clear) VKRenderer_BeginRenderPass(surface);
@@ -949,24 +921,6 @@ VkBool32 VKRenderer_FlushRenderPass(VKSDOps* surface) {
return VK_TRUE; return VK_TRUE;
} }
/**
* Flush render passes depending on a given surface.
* This function must be called before mutating a surface
* because there may be pending render passes reading from that surface.
*/
static void VKRenderer_FlushDependentRenderPasses(VKSDOps* surface) {
// We're going to clear dependentSurfaces in the end anyway,
// so temporarily reset it to NULL to save on removing flushed render passes one-by-one.
ARRAY(VKSDOps*) deps = surface->dependentSurfaces;
surface->dependentSurfaces = NULL;
uint32_t size = (uint32_t) ARRAY_SIZE(deps);
if (size > 0) J2dRlsTraceLn2(J2D_TRACE_VERBOSE, "VKRenderer_FlushDependentRenderPasses(%p): %d", surface, size);
for (uint32_t i = 0; i < size; i++) {
VKRenderer_FlushRenderPass(deps[i]);
}
ARRAY_RESIZE(deps, 0);
surface->dependentSurfaces = deps;
}
void VKRenderer_FlushSurface(VKSDOps* surface) { void VKRenderer_FlushSurface(VKSDOps* surface) {
assert(surface != NULL); assert(surface != NULL);
if (!VKRenderer_FlushRenderPass(surface)) return; if (!VKRenderer_FlushRenderPass(surface)) return;
@@ -1015,10 +969,9 @@ void VKRenderer_FlushSurface(VKSDOps* surface) {
.subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 } .subresourceRange = { VK_IMAGE_ASPECT_COLOR_BIT, 0, 1, 0, 1 }
}}; }};
VKBarrierBatch barrierBatch = {1, surface->image->lastStage | VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT}; VKBarrierBatch barrierBatch = {1, surface->image->lastStage | VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT};
VKRenderer_AddImageBarrier(barriers, &barrierBatch, surface->image, VK_PIPELINE_STAGE_TRANSFER_BIT, VKImage_AddBarrier(barriers, &barrierBatch, surface->image, VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
device->vkCmdPipelineBarrier(cb, barrierBatch.srcStages, barrierBatch.dstStages, VKRenderer_RecordBarriers(renderer, NULL, NULL, barriers, &barrierBatch);
0, 0, NULL, 0, NULL, barrierBatch.barrierCount, barriers);
} }
// Do blit. // Do blit.
@@ -1110,14 +1063,13 @@ BufferWriting VKRenderer_AllocateBufferData(VKSDOps* surface, BufferWritingState
} }
/** /**
* Allocate vertices from vertex buffer. VKRenderer_Validate must have been called before. * Allocate vertices from the vertex buffer, returning the number of allocated primitives (>0).
* VKRenderer_Validate must have been called before.
* This function must not be used directly, use VK_DRAW macro instead. * This function must not be used directly, use VK_DRAW macro instead.
* It is responsibility of the caller to pass correct vertexSize, matching current pipeline.
* This function cannot draw more vertices than fits into single vertex buffer at once.
* This function must be called after all dynamic allocation functions, * This function must be called after all dynamic allocation functions,
* which can invalidate drawing state, e.g. VKRenderer_AllocateMaskFillBytes. * which can invalidate the drawing state, e.g., VKRenderer_AllocateMaskFillBytes.
*/ */
uint32_t VKRenderer_AllocateVertices(uint32_t primitives, uint32_t vertices, size_t vertexSize, void** result) { static uint32_t VKRenderer_AllocateVertices(uint32_t primitives, uint32_t vertices, size_t vertexSize, void** result) {
assert(vertices > 0 && vertexSize > 0); assert(vertices > 0 && vertexSize > 0);
assert(vertexSize * vertices <= VERTEX_BUFFER_SIZE); assert(vertexSize * vertices <= VERTEX_BUFFER_SIZE);
VKSDOps* surface = VKRenderer_GetContext()->surface; VKSDOps* surface = VKRenderer_GetContext()->surface;
@@ -1141,21 +1093,19 @@ uint32_t VKRenderer_AllocateVertices(uint32_t primitives, uint32_t vertices, siz
} }
/** /**
* Allocate vertices from vertex buffer, providing pointer for writing. * Allocate vertices from the vertex buffer, returning the number of allocated primitives (>0).
* VKRenderer_Validate must have been called before. * VKRenderer_Validate must have been called before.
* This function cannot draw more vertices than fits into single vertex buffer at once.
* This function must be called after all dynamic allocation functions, * This function must be called after all dynamic allocation functions,
* which can invalidate drawing state, e.g. VKRenderer_AllocateMaskFillBytes. * which can invalidate the drawing state, e.g., VKRenderer_AllocateMaskFillBytes.
*/ */
#define VK_DRAW(VERTICES, PRIMITIVE_COUNT, VERTEX_COUNT) \ #define VK_DRAW(VERTICES, PRIMITIVE_COUNT, VERTEX_COUNT) \
VKRenderer_AllocateVertices((PRIMITIVE_COUNT), (VERTEX_COUNT), sizeof((VERTICES)[0]), (void**) &(VERTICES)) VKRenderer_AllocateVertices((PRIMITIVE_COUNT), (VERTEX_COUNT), sizeof((VERTICES)[0]), (void**) &(VERTICES))
/** /**
* Allocate bytes from mask fill buffer. VKRenderer_Validate must have been called before. * Allocate bytes from mask fill buffer. VKRenderer_Validate must have been called before.
* This function cannot take more bytes than fits into single mask fill buffer at once. * This function cannot take more bytes than fits into single mask fill buffer at once.
* Caller must write data at the returned pointer VKBufferWritingState.data * Caller must write data at the returned pointer BufferWritingState.data
* and take into account VKBufferWritingState.offset from the beginning of the bound buffer. * and take into account BufferWritingState.offset from the beginning of the bound buffer.
* This function can invalidate drawing state, always call it before VK_DRAW. * This function can invalidate drawing state, always call it before VK_DRAW.
*/ */
static BufferWritingState VKRenderer_AllocateMaskFillBytes(uint32_t size) { static BufferWritingState VKRenderer_AllocateMaskFillBytes(uint32_t size) {
@@ -1211,7 +1161,8 @@ static void VKRenderer_ValidateTransform() {
* pixels inside the clip shape are set to "pass". * pixels inside the clip shape are set to "pass".
* If there is no clip shape, whole attachment is cleared with "pass" value. * If there is no clip shape, whole attachment is cleared with "pass" value.
*/ */
static void VKRenderer_SetupStencil(const VKRenderingContext* context) { static void VKRenderer_SetupStencil() {
VKRenderingContext* context = VKRenderer_GetContext();
assert(context != NULL && context->surface != NULL && context->surface->renderPass != NULL); assert(context != NULL && context->surface != NULL && context->surface->renderPass != NULL);
VKSDOps* surface = context->surface; VKSDOps* surface = context->surface;
VKRenderPass* renderPass = surface->renderPass; VKRenderPass* renderPass = surface->renderPass;
@@ -1246,15 +1197,12 @@ static void VKRenderer_SetupStencil(const VKRenderingContext* context) {
renderPass->vertexBufferWriting.bound = VK_FALSE; renderPass->vertexBufferWriting.bound = VK_FALSE;
// Rasterize clip spans. // Rasterize clip spans.
const uint32_t MAX_VERTICES_PER_DRAW = (VERTEX_BUFFER_SIZE / sizeof(VKIntVertex) / 3) * 3; uint32_t primitiveCount = ARRAY_SIZE(context->clipSpanVertices) / 3;
VKIntVertex* vs; VKIntVertex* vs;
for (uint32_t drawn = 0;;) { for (uint32_t primitivesDrawn = 0; primitivesDrawn < primitiveCount;) {
uint32_t currentDraw = ARRAY_SIZE(context->clipSpanVertices) - drawn; uint32_t currentDraw = VK_DRAW(vs, primitiveCount - primitivesDrawn, 3);
if (currentDraw > MAX_VERTICES_PER_DRAW) currentDraw = MAX_VERTICES_PER_DRAW; memcpy(vs, context->clipSpanVertices + primitivesDrawn * 3, currentDraw * 3 * sizeof(VKIntVertex));
else if (currentDraw == 0) break; primitivesDrawn += currentDraw;
VK_DRAW(vs, 1, currentDraw);
memcpy(vs, context->clipSpanVertices + drawn, currentDraw * sizeof(VKIntVertex));
drawn += currentDraw;
} }
VKRenderer_FlushDraw(surface); VKRenderer_FlushDraw(surface);
@@ -1262,12 +1210,12 @@ static void VKRenderer_SetupStencil(const VKRenderingContext* context) {
renderPass->state.shader = NO_SHADER; renderPass->state.shader = NO_SHADER;
} }
void VKRenderer_ExecOnCleanup(VKRenderPass* renderPass, VKCleanupHandler hnd, void* data) { void VKRenderer_ExecOnCleanup(VKSDOps* surface, VKCleanupHandler handler, void* data) {
ARRAY_PUSH_BACK(renderPass->cleanupQueue) = (VKCleanupEntry) { hnd, data }; ARRAY_PUSH_BACK(surface->renderPass->cleanupQueue) = (VKCleanupEntry) { handler, data };
} }
void VKRenderer_FlushMemoryOnReset(VKRenderPass* renderPass, VkMappedMemoryRange range) { void VKRenderer_FlushMemory(VKSDOps* surface, VkMappedMemoryRange range) {
ARRAY_PUSH_BACK(renderPass->flushRanges) = range; ARRAY_PUSH_BACK(surface->renderPass->flushRanges) = range;
} }
void VKRenderer_RecordBarriers(VKRenderer* renderer, void VKRenderer_RecordBarriers(VKRenderer* renderer,
@@ -1329,7 +1277,7 @@ VkBool32 VKRenderer_Validate(VKShader shader, VkPrimitiveTopology topology, Alph
surface->device->vkCmdSetScissor(renderPass->commandBuffer, 0, 1, &context.clipRect); surface->device->vkCmdSetScissor(renderPass->commandBuffer, 0, 1, &context.clipRect);
if (clipChanged) { if (clipChanged) {
if (ARRAY_SIZE(context.clipSpanVertices) > 0) { if (ARRAY_SIZE(context.clipSpanVertices) > 0) {
VKRenderer_SetupStencil(&context); VKRenderer_SetupStencil();
renderPass->state.stencilMode = STENCIL_MODE_ON; renderPass->state.stencilMode = STENCIL_MODE_ON;
} else renderPass->state.stencilMode = surface->stencil != NULL ? STENCIL_MODE_OFF : STENCIL_MODE_NONE; } else renderPass->state.stencilMode = surface->stencil != NULL ? STENCIL_MODE_OFF : STENCIL_MODE_NONE;
} }
@@ -1440,28 +1388,6 @@ void VKRenderer_FillSpans(jint spanCount, jint *spans) {
} }
} }
void VKRenderer_TextureRender(VkDescriptorSet srcDescriptorSet, VkBuffer vertexBuffer, uint32_t vertexNum,
jint filter, VKSamplerWrap wrap) {
// VKRenderer_Validate was called by VKBlitLoops. TODO refactor this.
VKSDOps* surface = (VKSDOps*)context.surface;
VKRenderPass* renderPass = surface->renderPass;
VkCommandBuffer cb = renderPass->commandBuffer;
VKDevice* device = surface->device;
// TODO We flush all pending draws and rebind the vertex buffer with the provided one.
// We will make it work with our unified vertex buffer later.
VKRenderer_FlushDraw(surface);
renderPass->vertexBufferWriting.bound = VK_FALSE;
VkBuffer vertexBuffers[] = {vertexBuffer};
VkDeviceSize offsets[] = {0};
device->vkCmdBindVertexBuffers(cb, 0, 1, vertexBuffers, offsets);
VkDescriptorSet descriptorSets[] = { srcDescriptorSet,
VKSamplers_GetDescriptorSet(device, &device->renderer->pipelineContext->samplers, filter, wrap) };
device->vkCmdBindDescriptorSets(cb, VK_PIPELINE_BIND_POINT_GRAPHICS,
device->renderer->pipelineContext->texturePipelineLayout, 0, 2, descriptorSets, 0, NULL);
device->vkCmdDraw(cb, vertexNum, 1, 0, 0);
}
void VKRenderer_MaskFill(jint x, jint y, jint w, jint h, void VKRenderer_MaskFill(jint x, jint y, jint w, jint h,
jint maskoff, jint maskscan, jint masklen, uint8_t *mask) { jint maskoff, jint maskscan, jint masklen, uint8_t *mask) {
if (!VKRenderer_Validate(SHADER_MASK_FILL_COLOR, if (!VKRenderer_Validate(SHADER_MASK_FILL_COLOR,
@@ -1480,7 +1406,7 @@ void VKRenderer_MaskFill(jint x, jint y, jint w, jint h,
memcpy(maskState.data, mask + maskoff, byteCount); memcpy(maskState.data, mask + maskoff, byteCount);
} else { } else {
// Special case, fully opaque mask // Special case, fully opaque mask
*((char *)maskState.data) = 0xFF; *((char *)maskState.data) = (char)0xFF;
} }
VKMaskFillColorVertex* vs; VKMaskFillColorVertex* vs;

View File

@@ -27,7 +27,6 @@
#ifndef VKRenderer_h_Included #ifndef VKRenderer_h_Included
#define VKRenderer_h_Included #define VKRenderer_h_Included
#include "SurfaceData.h"
#include "VKTypes.h" #include "VKTypes.h"
#include "VKPipelines.h" #include "VKPipelines.h"
@@ -56,32 +55,21 @@ struct VKRenderingContext {
ARRAY(VKIntVertex) clipSpanVertices; ARRAY(VKIntVertex) clipSpanVertices;
}; };
typedef void (*VKCleanupHandler)(VKDevice *renderer, void* data); typedef void (*VKCleanupHandler)(VKDevice* device, void* data);
VKRenderer* VKRenderer_Create(VKDevice* device); VKRenderer* VKRenderer_Create(VKDevice* device);
/** /**
* Setup pipeline for drawing. Returns FALSE if surface is not yet ready for drawing. * Setup pipeline for drawing. Returns FALSE if the surface is not yet ready for drawing.
*/ */
VkBool32 VKRenderer_Validate(VKShader shader, VkPrimitiveTopology topology, AlphaType inAlphaType); VkBool32 VKRenderer_Validate(VKShader shader, VkPrimitiveTopology topology, AlphaType inAlphaType);
/** /**
* Record draw command, if there are any pending vertices in the vertex buffer * Record commands into the primary command buffer (outside of a render pass).
*/
void VKRenderer_FlushDraw(VKSDOps* surface);
/**
* Record commands into primary command buffer (outside of a render pass).
* Recorded commands will be sent for execution via VKRenderer_Flush. * Recorded commands will be sent for execution via VKRenderer_Flush.
*/ */
VkCommandBuffer VKRenderer_Record(VKRenderer* renderer); VkCommandBuffer VKRenderer_Record(VKRenderer* renderer);
/**
* Prepare image barrier info to be executed in batch, if needed.
*/
void VKRenderer_AddImageBarrier(VkImageMemoryBarrier* barriers, VKBarrierBatch* batch,
VKImage* image, VkPipelineStageFlags stage, VkAccessFlags access, VkImageLayout layout);
/** /**
* Record barrier batches into the primary command buffer. * Record barrier batches into the primary command buffer.
*/ */
@@ -94,7 +82,9 @@ void VKRenderer_CreateImageDescriptorSet(VKRenderer* renderer, VkDescriptorPool*
void VKRenderer_Destroy(VKRenderer* renderer); void VKRenderer_Destroy(VKRenderer* renderer);
/** /**
* Wait for all rendering commands to complete. * Wait for the latest checkpoint to be reached by GPU.
* This only affects commands tracked by the timeline semaphore,
* unlike vkDeviceWaitIdle / vkQueueWaitIdle.
*/ */
void VKRenderer_Sync(VKRenderer* renderer); void VKRenderer_Sync(VKRenderer* renderer);
@@ -115,14 +105,14 @@ void VKRenderer_DestroyRenderPass(VKSDOps* surface);
VkBool32 VKRenderer_FlushRenderPass(VKSDOps* surface); VkBool32 VKRenderer_FlushRenderPass(VKSDOps* surface);
/** /**
* Register a handler to be called at the cleanup phase of the renderer. * Register a handler to be called after the render pass is completed.
*/ */
void VKRenderer_ExecOnCleanup(VKRenderPass* renderPass, VKCleanupHandler hnd, void* data); void VKRenderer_ExecOnCleanup(VKSDOps* surface, VKCleanupHandler handler, void* data);
/** /**
* Register a memory range that will be flushed on render pass reset drawing. * Register a memory range that will be flushed before executing the render pass.
*/ */
void VKRenderer_FlushMemoryOnReset(VKRenderPass* renderPass, VkMappedMemoryRange range); void VKRenderer_FlushMemory(VKSDOps* surface, VkMappedMemoryRange range);
/** /**
* Flush pending render pass and queue surface for presentation (if applicable). * Flush pending render pass and queue surface for presentation (if applicable).
@@ -137,11 +127,6 @@ void VKRenderer_ConfigureSurface(VKSDOps* surface, VkExtent2D extent, VKDevice*
void VKRenderer_AddSurfaceDependency(VKSDOps* src, VKSDOps* dst); void VKRenderer_AddSurfaceDependency(VKSDOps* src, VKSDOps* dst);
// Blit operations.
void VKRenderer_TextureRender(VkDescriptorSet srcDescriptorSet, VkBuffer vertexBuffer, uint32_t vertexNum,
jint filter, VKSamplerWrap wrap);
// Drawing operations. // Drawing operations.
void VKRenderer_RenderRect(VkBool32 fill, jint x, jint y, jint w, jint h); void VKRenderer_RenderRect(VkBool32 fill, jint x, jint y, jint w, jint h);

View File

@@ -292,7 +292,15 @@ VkBool32 VKSD_ConfigureWindowSurface(VKWinSDOps* vkwinsdo) {
} }
static void VKSD_OnDispose(JNIEnv* env, SurfaceDataOps* ops) { static void VKSD_OnDispose(JNIEnv* env, SurfaceDataOps* ops) {
// We are being called from the disposer thread, RQ might be working in parallel.
// VKRenderQueue.lock/unlock is equivalent to AWT_LOCK/AWT_UNLOCK,
// but those are only available in the toolkit-specific part of AWT, so we call RQ there.
jobject rq = JNU_CallStaticMethodByName(env, NULL,
"sun/java2d/vulkan/VKRenderQueue", "getInstance", "()Lsun/java2d/vulkan/VKRenderQueue;").l;
JNU_CallMethodByName(env, NULL, rq, "lock", "()V");
VKSD_ResetSurface((VKSDOps*) ops); VKSD_ResetSurface((VKSDOps*) ops);
JNU_CallMethodByName(env, NULL, rq, "unlock", "()V");
(*env)->DeleteLocalRef(env, rq);
} }
JNIEXPORT VKSDOps* VKSD_CreateSurface(JNIEnv* env, jobject vksd, jint type, jint format, jint backgroundRGB, JNIEXPORT VKSDOps* VKSD_CreateSurface(JNIEnv* env, jobject vksd, jint type, jint format, jint backgroundRGB,

View File

@@ -73,8 +73,7 @@ void VKTexturePoolLock_unlockImpl(ATexturePoolLockPrivPtr *lock) {
} }
static void VKTexturePool_FindImageMemoryType(VKMemoryRequirements* requirements) { static void VKTexturePool_FindImageMemoryType(VKMemoryRequirements* requirements) {
// TODO both DEVICE_LOCAL and HOST_VISIBLE memory is very precious, we may need to use just DEVICE_LOCAL instead. VKAllocator_FindMemoryType(requirements, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, VK_ALL_MEMORY_PROPERTIES);
VKAllocator_FindMemoryType(requirements, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT, VK_ALL_MEMORY_PROPERTIES);
} }
/* Texture allocate/free API */ /* Texture allocate/free API */

View File

@@ -346,8 +346,7 @@ abstract class XDecoratedPeer extends XWindowPeer {
if (XWM.getWMID() != XWM.UNITY_COMPIZ_WM) { if (XWM.getWMID() != XWM.UNITY_COMPIZ_WM) {
wm_set_insets = null; wm_set_insets = null;
Insets in = getWMSetInsets(XAtom.get(ev.get_atom())); Insets in = getWMSetInsets(XAtom.get(ev.get_atom()));
if (((XWM.getWMID() == XWM.MUTTER_WM && !isTargetUndecorated() && isVisible()) if (isReparented() && (!isMapped() || getMWMDecorTitleProperty().isPresent()) &&
|| (isReparented() && (!isMapped() || getMWMDecorTitleProperty().isPresent()))) &&
in != null && !copyAndScaleDown(in).equals(dimensions.getInsets())) { in != null && !copyAndScaleDown(in).equals(dimensions.getInsets())) {
handleCorrectInsets(in); handleCorrectInsets(in);
} }

View File

@@ -40,35 +40,44 @@ import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D; import java.awt.geom.Ellipse2D;
public class DefaultFrameDecoration extends FullFrameDecorationHelper { public class DefaultFrameDecoration extends FullFrameDecorationHelper {
private static final int HEIGHT = 30; private static final int BORDER_SIZE = 1;
private static final int HEIGHT = 28 + BORDER_SIZE;
private static final int BUTTON_ICON_SIZE = 4; private static final int BUTTON_ICON_SIZE = 4;
private static final int BUTTON_CIRCLE_RADIUS = 10; private static final int BUTTON_SIZE = 16;
private static final int BUTTONS_RIGHT_PADDING = 7;
private static final int BUTTONS_PADDING = 8;
private static final Font FONT = new Font(Font.DIALOG, Font.BOLD, 12); private static final Font FONT = new Font(Font.DIALOG, Font.BOLD, 12);
private static final Color ACTIVE_BACKGROUND = new Color(0xebebeb); private static final Color ACTIVE_BACKGROUND = new Color(0xedeeef);
private static final Color ACTIVE_BACKGROUND_DARK = new Color(0x222222); private static final Color ACTIVE_BACKGROUND_DARK = new Color(0x31363b);
private static final Color INACTIVE_BACKGROUND = new Color(0xfafafa); private static final Color INACTIVE_BACKGROUND = new Color(0xdcddde);
private static final Color INACTIVE_BACKGROUND_DARK = new Color(0x2c2c2c); private static final Color INACTIVE_BACKGROUND_DARK = new Color(0x292d31);
private static final Color ICON_BACKGROUND = ACTIVE_BACKGROUND; private static final Color ICON_BACKGROUND = ACTIVE_BACKGROUND;
private static final Color ICON_BACKGROUND_DARK = ACTIVE_BACKGROUND_DARK; private static final Color ICON_BACKGROUND_DARK = ACTIVE_BACKGROUND_DARK;
private static final Color ICON_HOVERED_BACKGROUND = new Color(0xd1d1d1); private static final Color ICON_HOVERED_BACKGROUND = new Color(0x232629);
private static final Color ICON_HOVERED_BACKGROUND_DARK = new Color(0x373737); private static final Color ICON_HOVERED_BACKGROUND_DARK = new Color(0xfcfcfc);
private static final Color ICON_PRESSED_BACKGROUND = new Color(0xc0c0c0); private static final Color ICON_HOVERED_FOREGROUND = new Color(0xcacdcf);
private static final Color ICON_PRESSED_BACKGROUND_DARK = new Color(0x565656); private static final Color ICON_HOVERED_FOREGROUND_DARK = new Color(0x43484c);
private static final Color ACTIVE_FOREGROUND = Color.darkGray; private static final Color ICON_PRESSED_BACKGROUND = new Color(0xa6a8ab);
private static final Color ACTIVE_FOREGROUND_DARK = new Color(0xf7f7f7); private static final Color ICON_PRESSED_BACKGROUND_DARK = new Color(0x6e7175);
private static final Color INACTIVE_FOREGROUND = Color.gray; private static final Color CLOSE_ICON_PRESSED_BACKGROUND = new Color(0x6d2229);
private static final Color INACTIVE_FOREGROUND_DARK = new Color(0xb5b5b5); private static final Color CLOSE_ICON_PRESSED_BACKGROUND_DARK = new Color(0x6d2229);
private static final Color CLOSE_ICON_HOVERED_BACKGROUND = new Color(0xff98a2);
private static final Color CLOSE_ICON_HOVERED_INACTIVE_BACKGROUND = new Color(0xda4453);
private static final Color CLOSE_ICON_HOVERED_INACTIVE_BACKGROUND_DARK = new Color(0xda4453);
private static final Color CLOSE_ICON_HOVERED_BACKGROUND_DARK = new Color(0xff98a2);
private static final Color ACTIVE_FOREGROUND = new Color(0x2d3033);
private static final Color ACTIVE_FOREGROUND_DARK = new Color(0xf1f1f1);
private static final Color INACTIVE_FOREGROUND = ACTIVE_FOREGROUND;
private static final Color INACTIVE_FOREGROUND_DARK = ACTIVE_FOREGROUND_DARK;
private static final Color ACTIVE_BACKGROUND_TOP = new Color(0xfbfbfb); private static final Color ACTIVE_BACKGROUND_TOP = new Color(0xa9abac);
private static final Color ACTIVE_BACKGROUND_TOP_DARK = new Color(0x313131); private static final Color ACTIVE_BACKGROUND_TOP_DARK = new Color(0x4c565f);
private static final Color INACTIVE_BACKGROUND_TOP = new Color(0xfefefe); private static final Color INACTIVE_BACKGROUND_TOP = new Color(0xb7b8b9);
private static final Color INACTIVE_BACKGROUND_TOP_DARK = new Color(0x3a3a3a); private static final Color INACTIVE_BACKGROUND_TOP_DARK = new Color(0x424952);
private static final Color ACTIVE_BORDER = new Color(0x9e9e9e); private static final Color ACTIVE_BORDER = ACTIVE_BACKGROUND_TOP;
private static final Color ACTIVE_BORDER_DARK = new Color(0x080808); private static final Color ACTIVE_BORDER_DARK = ACTIVE_BACKGROUND_TOP_DARK;
private static final Color INACTIVE_BORDER = new Color(0xbcbcbc); private static final Color INACTIVE_BORDER = INACTIVE_BACKGROUND_TOP;
private static final Color INACTIVE_BORDER_DARK = new Color(0x121212); private static final Color INACTIVE_BORDER_DARK = INACTIVE_BACKGROUND_TOP_DARK;
private static final int BORDER_SIZE = 1;
private static final int SIGNIFICANT_DRAG_DISTANCE = 4; private static final int SIGNIFICANT_DRAG_DISTANCE = 4;
public DefaultFrameDecoration(WLDecoratedPeer peer, boolean showMinimize, boolean showMaximize) { public DefaultFrameDecoration(WLDecoratedPeer peer, boolean showMinimize, boolean showMaximize) {
@@ -96,64 +105,27 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
return new Dimension(getButtonSpaceWidth(), HEIGHT); return new Dimension(getButtonSpaceWidth(), HEIGHT);
} }
private Point getCloseButtonCenter() {
int width = peer.getWidth();
return width >= HEIGHT ? new Point(width - HEIGHT / 2, HEIGHT / 2) : null;
}
private Point getMaximizeButtonCenter() {
if (!hasMaximizeButton()) return null;
int width = peer.getWidth();
return width >= 2 * HEIGHT ? new Point(width - HEIGHT * 3 / 2, HEIGHT / 2) : null;
}
private Point getMinimizeButtonCenter() {
if (!hasMinimizeButton()) return null;
int width = peer.getWidth();
int buttonSpaceWidth = getButtonSpaceWidth();
return width >= buttonSpaceWidth ? new Point(width - buttonSpaceWidth + HEIGHT / 2, HEIGHT / 2) : null;
}
@Override @Override
protected Rectangle getCloseButtonBounds() { protected Rectangle getCloseButtonBounds() {
int width = peer.getWidth(); int x = peer.getWidth() - BUTTON_SIZE - BUTTONS_RIGHT_PADDING - BORDER_SIZE;
if (width >= HEIGHT) { int y = (int) Math.floor((HEIGHT - BUTTON_SIZE + 1f) / 2);
return new Rectangle(width - HEIGHT / 2 - BUTTON_CIRCLE_RADIUS, return new Rectangle(x, y, BUTTON_SIZE, BUTTON_SIZE);
HEIGHT / 2 - BUTTON_CIRCLE_RADIUS,
BUTTON_CIRCLE_RADIUS * 2,
BUTTON_CIRCLE_RADIUS * 2);
} else {
return null;
}
} }
@Override @Override
protected Rectangle getMaximizeButtonBounds() { protected Rectangle getMaximizeButtonBounds() {
if (!hasMaximizeButton()) return null; int x = peer.getWidth() - BUTTON_SIZE * 2 - BUTTONS_RIGHT_PADDING
int width = peer.getWidth(); - BUTTONS_PADDING - BORDER_SIZE;
if (width >= 2 * HEIGHT) { int y = (int) Math.floor((HEIGHT - BUTTON_SIZE + 1f) / 2);
return new Rectangle(width - HEIGHT * 3 / 2 - BUTTON_CIRCLE_RADIUS, return x > 0 ? new Rectangle(x, y, BUTTON_SIZE, BUTTON_SIZE) : null;
HEIGHT / 2 - BUTTON_CIRCLE_RADIUS,
BUTTON_CIRCLE_RADIUS * 2,
BUTTON_CIRCLE_RADIUS * 2);
} else {
return null;
}
} }
@Override @Override
protected Rectangle getMinimizeButtonBounds() { protected Rectangle getMinimizeButtonBounds() {
if (!hasMinimizeButton()) return null; int x = peer.getWidth() - BUTTON_SIZE * 3 - BUTTONS_RIGHT_PADDING
int width = peer.getWidth(); - BUTTONS_PADDING * 2 - BORDER_SIZE;
int buttonSpaceWidth = getButtonSpaceWidth(); int y = (int) Math.floor((HEIGHT - BUTTON_SIZE + 1f) / 2);
if (width >= buttonSpaceWidth) { return x > 0 ? new Rectangle(x, y, BUTTON_SIZE, BUTTON_SIZE) : null;
return new Rectangle(width - buttonSpaceWidth + HEIGHT / 2 - BUTTON_CIRCLE_RADIUS,
HEIGHT / 2 - BUTTON_CIRCLE_RADIUS,
BUTTON_CIRCLE_RADIUS * 2,
BUTTON_CIRCLE_RADIUS * 2);
} else {
return null;
}
} }
@Override @Override
@@ -170,7 +142,7 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
final int numButtons = 1 final int numButtons = 1
+ (hasMaximizeButton() ? 1 : 0) + (hasMaximizeButton() ? 1 : 0)
+ (hasMinimizeButton() ? 1 : 0); + (hasMinimizeButton() ? 1 : 0);
return numButtons * HEIGHT; return numButtons * BUTTON_SIZE + (numButtons - 1) * BUTTONS_PADDING + BUTTONS_RIGHT_PADDING;
} }
private Color getBackgroundColor(boolean isActive) { private Color getBackgroundColor(boolean isActive) {
@@ -217,13 +189,33 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
} }
} }
private Color getButtonForeground(boolean isHovered) {
if (isHovered) {
return isDarkTheme() ? ICON_HOVERED_FOREGROUND_DARK : ICON_HOVERED_FOREGROUND;
} else {
return isDarkTheme() ? ACTIVE_FOREGROUND_DARK : ACTIVE_FOREGROUND;
}
}
private Color getClosePressedBackground() {
return isDarkTheme() ? CLOSE_ICON_PRESSED_BACKGROUND_DARK : CLOSE_ICON_PRESSED_BACKGROUND;
}
private Color getCloseHoveredBackground(boolean isActive) {
if (isActive) {
return isDarkTheme() ? CLOSE_ICON_HOVERED_BACKGROUND_DARK : CLOSE_ICON_HOVERED_BACKGROUND;
} else {
return isDarkTheme() ? CLOSE_ICON_HOVERED_INACTIVE_BACKGROUND_DARK : CLOSE_ICON_HOVERED_INACTIVE_BACKGROUND;
}
}
@Override @Override
protected void paintBorder(Graphics2D g2d) { protected void paintBorder(Graphics2D g2d) {
int width = peer.getWidth(); int width = peer.getWidth();
int height = peer.getHeight(); int height = peer.getHeight();
g2d.setColor(getBorderColor(isActive())); g2d.setColor(getBorderColor(isActive()));
g2d.setStroke(new BasicStroke(BORDER_SIZE)); g2d.setStroke(new BasicStroke(BORDER_SIZE));
g2d.drawRect(0, 0, width - BORDER_SIZE, height - BORDER_SIZE); g2d.drawRect(0, 0, width, height);
} }
@Override @Override
@@ -250,17 +242,11 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
// The title bar // The title bar
g.fillRoundRect(0, 0, width, HEIGHT + radius + 1, radius, radius); g.fillRoundRect(0, 0, width, HEIGHT + radius + 1, radius, radius);
// The top bevel of the title bar
g.setColor(getBackgroundTopColor(active));
g.drawLine(radius / 2, 1, width - radius / 2, 1);
g.drawArc(1, 1, (radius - 1), (radius - 1), 90, 60);
g.drawArc(width - radius, 1, (radius - 1), (radius - 1), 45, 45);
// The border // The border
var oldStroke = g.getStroke(); var oldStroke = g.getStroke();
g.setColor(getBorderColor(active)); g.setColor(getBorderColor(active));
g.setStroke(new BasicStroke(BORDER_SIZE)); g.setStroke(new BasicStroke(BORDER_SIZE));
g.drawRoundRect(0, 0, width - BORDER_SIZE, HEIGHT + radius + 1, radius, radius); g.drawRoundRect(0, 0, width, HEIGHT + radius + 1, radius, radius);
g.setStroke(oldStroke); g.setStroke(oldStroke);
g.drawLine(0, HEIGHT - 1, width, HEIGHT - 1); g.drawLine(0, HEIGHT - 1, width, HEIGHT - 1);
} else { } else {
@@ -270,32 +256,35 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
// The top bevel of the title bar // The top bevel of the title bar
g.setColor(getBackgroundTopColor(active)); g.setColor(getBackgroundTopColor(active));
g.drawLine(BORDER_SIZE, BORDER_SIZE, width - BORDER_SIZE, BORDER_SIZE); g.drawLine(BORDER_SIZE, BORDER_SIZE, width, BORDER_SIZE);
g.drawLine(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, HEIGHT - BORDER_SIZE); g.drawLine(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, HEIGHT);
// The border // The border
var oldStroke = g.getStroke(); var oldStroke = g.getStroke();
g.setColor(getBorderColor(active)); g.setColor(getBorderColor(active));
g.setStroke(new BasicStroke(BORDER_SIZE)); g.setStroke(new BasicStroke(BORDER_SIZE));
g.drawRect(0, 0, width - BORDER_SIZE, HEIGHT - BORDER_SIZE); g.drawRect(0, 0, width, HEIGHT);
g.setStroke(oldStroke); g.setStroke(oldStroke);
} }
paintTitle(g, title, foregroundColor, width); paintTitle(g, title, foregroundColor, width);
Point closeButtonCenter = getCloseButtonCenter(); Rectangle closeButtonBounds = getCloseButtonBounds();
if (closeButtonCenter != null) { if (closeButtonBounds != null) {
paintButtonBackground(g, closeButtonCenter, closeButton); paintCloseButtonBackground(g, closeButtonBounds, closeButton);
paintCloseButton(g, closeButtonCenter, foregroundColor); Color buttonColor = getButtonForeground(closeButton.hovered);
paintCloseButton(g, closeButtonBounds, buttonColor);
} }
Point maximizedButtonCenter = getMaximizeButtonCenter(); Rectangle maximizedButtonBounds = getMaximizeButtonBounds();
if (maximizedButtonCenter != null) { if (maximizedButtonBounds != null) {
paintButtonBackground(g, maximizedButtonCenter, maximizeButton); paintButtonBackground(g, maximizedButtonBounds, maximizeButton);
paintMaximizeButton(g, maximizedButtonCenter, foregroundColor); Color buttonColor = getButtonForeground(maximizeButton.hovered);
paintMaximizeButton(g, maximizedButtonBounds, buttonColor);
} }
Point minimizedButtonCenter = getMinimizeButtonCenter(); Rectangle minimizedButtonBounds = getMinimizeButtonBounds();
if (minimizedButtonCenter != null) { if (minimizedButtonBounds != null) {
paintButtonBackground(g, minimizedButtonCenter, minimizeButton); paintButtonBackground(g, minimizedButtonBounds, minimizeButton);
paintMinimizeButton(g, minimizedButtonCenter, foregroundColor); Color buttonColor = getButtonForeground(minimizeButton.hovered);
paintMinimizeButton(g, minimizedButtonBounds, buttonColor);
} }
g.setClip(null); g.setClip(null);
} }
@@ -304,7 +293,7 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
g.setColor(foregroundColor); g.setColor(foregroundColor);
g.setFont(FONT); g.setFont(FONT);
FontMetrics fm = g.getFontMetrics(); FontMetrics fm = g.getFontMetrics();
int leftMargin = HEIGHT / 2 - BUTTON_CIRCLE_RADIUS; // same as space between close button and right window edge int leftMargin = HEIGHT / 2 - BUTTON_SIZE; // same as space between close button and right window edge
int availableWidth = width - getButtonSpaceWidth() - leftMargin; int availableWidth = width - getButtonSpaceWidth() - leftMargin;
String text = SwingUtilities2.clipStringIfNecessary(null, fm, title, availableWidth); String text = SwingUtilities2.clipStringIfNecessary(null, fm, title, availableWidth);
int textWidth = fm.stringWidth(text); int textWidth = fm.stringWidth(text);
@@ -313,48 +302,60 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
(HEIGHT - fm.getHeight()) / 2 + fm.getAscent()); (HEIGHT - fm.getHeight()) / 2 + fm.getAscent());
} }
private void paintButtonBackground(Graphics2D g, Point center, ButtonState state) { private void paintCloseButtonBackground(Graphics2D g, Rectangle bounds, ButtonState state) {
if (isActive()) { if (!isActive() && !state.hovered && !state.pressed) return;
g.setColor(state.pressed ? getClosePressedBackground() :
state.hovered ? getCloseHoveredBackground(isActive()) : getIconBackground());
g.fill(new Ellipse2D.Float(bounds.x, bounds.y, bounds.width, bounds.height));
}
private void paintButtonBackground(Graphics2D g, Rectangle bounds, ButtonState state) {
if (state.hovered || state.pressed) {
g.setColor(state.pressed ? getIconPressedBackground() : g.setColor(state.pressed ? getIconPressedBackground() :
state.hovered ? getIconHoveredBackground() : getIconBackground()); state.hovered ? getIconHoveredBackground() : getIconBackground());
g.fill(new Ellipse2D.Float(center.x - BUTTON_CIRCLE_RADIUS + .5f, g.fill(new Ellipse2D.Float(bounds.x, bounds.y, bounds.width, bounds.height));
center.y - BUTTON_CIRCLE_RADIUS + .5f,
2 * BUTTON_CIRCLE_RADIUS, 2 * BUTTON_CIRCLE_RADIUS));
} }
} }
private void paintCloseButton(Graphics2D g, Point center, Color foregroundColor) { private static Point centerOf(Rectangle rect) {
return new Point((int) Math.floor(rect.x + rect.width / 2f),
(int) Math.floor(rect.y + rect.height / 2f));
}
private void paintCloseButton(Graphics2D g, Rectangle bounds, Color foregroundColor) {
g.setColor(foregroundColor); g.setColor(foregroundColor);
Point center = centerOf(bounds);
g.drawLine(center.x - BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE, g.drawLine(center.x - BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE,
center.x + BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE); center.x + BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE);
g.drawLine(center.x - BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE, g.drawLine(center.x - BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE,
center.x + BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE); center.x + BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE);
} }
private void paintMaximizeButton(Graphics2D g, Point center, Color foregroundColor) { private void paintMaximizeButton(Graphics2D g, Rectangle bounds, Color foregroundColor) {
g.setColor(foregroundColor); g.setColor(foregroundColor);
Point center = centerOf(bounds);
int size = BUTTON_ICON_SIZE + 1;
if (peer.getState() == Frame.MAXIMIZED_BOTH) { if (peer.getState() == Frame.MAXIMIZED_BOTH) {
g.drawLine(center.x - BUTTON_ICON_SIZE, center.y, g.drawLine(center.x - size, center.y, center.x, center.y - size);
center.x, center.y - BUTTON_ICON_SIZE); g.drawLine(center.x, center.y - size, center.x + size, center.y);
g.drawLine(center.x, center.y - BUTTON_ICON_SIZE, g.drawLine(center.x - size, center.y, center.x, center.y + size);
center.x + BUTTON_ICON_SIZE, center.y); g.drawLine(center.x, center.y + size, center.x + size, center.y);
g.drawLine(center.x - BUTTON_ICON_SIZE, center.y,
center.x, center.y + BUTTON_ICON_SIZE);
g.drawLine(center.x, center.y + BUTTON_ICON_SIZE,
center.x + BUTTON_ICON_SIZE, center.y);
} else { } else {
g.drawLine(center.x - BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE / 2, g.drawLine(center.x - size, (int) (center.y + size / 2f),
center.x, center.y - BUTTON_ICON_SIZE / 2); center.x, (int) (center.y - size / 2f));
g.drawLine(center.x, center.y - BUTTON_ICON_SIZE / 2, g.drawLine(center.x, (int) (center.y - size / 2f),
center.x + BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE / 2); center.x + size, (int) (center.y + size / 2f));
} }
} }
private void paintMinimizeButton(Graphics2D g, Point center, Color foregroundColor) { private void paintMinimizeButton(Graphics2D g, Rectangle bounds, Color foregroundColor) {
g.setColor(foregroundColor); g.setColor(foregroundColor);
g.drawLine(center.x - BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE / 2, Point center = centerOf(bounds);
center.x, center.y + BUTTON_ICON_SIZE / 2); int size = BUTTON_ICON_SIZE + 1;
g.drawLine(center.x, center.y + BUTTON_ICON_SIZE / 2, g.drawLine(center.x - size, (int) (center.y - size / 2f),
center.x + BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE / 2); center.x, (int) (center.y + size / 2f));
g.drawLine(center.x, (int) (center.y + size / 2f),
center.x + size, (int) (center.y - size / 2f));
} }
} }

View File

@@ -67,7 +67,7 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
public GtkFrameDecoration(WLDecoratedPeer peer, boolean showMinimize, boolean showMaximize) { public GtkFrameDecoration(WLDecoratedPeer peer, boolean showMinimize, boolean showMaximize) {
super(peer, showMinimize, showMaximize); super(peer, showMinimize, showMaximize);
nativePtr = nativeCreateDecoration(showMinimize, showMaximize); nativePtr = nativeCreateDecoration(showMinimize, showMaximize, isDarkTheme());
assert nativePtr != 0; assert nativePtr != 0;
int t = nativeGetIntProperty(nativePtr, "gtk-dnd-drag-threshold"); int t = nativeGetIntProperty(nativePtr, "gtk-dnd-drag-threshold");
dndThreshold = t > 0 ? t : 4; dndThreshold = t > 0 ? t : 4;
@@ -76,15 +76,20 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
@Override @Override
public void paint(Graphics g) { public void paint(Graphics g) {
// Determine buttons' bounds, etc. // Determine buttons' bounds, etc.
nativePrePaint(nativePtr, peer.getWidth()); nativePrePaint(nativePtr, peer.getWidth(), peer.getHeight());
if (peer.getWidth() >= titleBarMinWidth && peer.getHeight() >= titleBarHeight) {
super.paint(g); super.paint(g);
} }
}
@Override @Override
protected void paintTitleBar(Graphics2D g2d) { protected void paintTitleBar(Graphics2D g2d) {
int width = peer.getWidth(); int width = peer.getWidth();
int height = titleBarHeight; int height = titleBarHeight;
assert width >= titleBarMinWidth;
assert peer.getHeight() >= titleBarHeight;
double scale = ((WLGraphicsConfig) peer.getGraphicsConfiguration()).getEffectiveScale(); double scale = ((WLGraphicsConfig) peer.getGraphicsConfiguration()).getEffectiveScale();
g2d.setBackground(new Color(0, true)); g2d.setBackground(new Color(0, true));
g2d.clearRect(0, 0, width, height); g2d.clearRect(0, 0, width, height);
@@ -186,7 +191,7 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
@Override @Override
public void notifyThemeChanged() { public void notifyThemeChanged() {
nativeSwitchTheme(); nativeSwitchTheme(isDarkTheme());
} }
private int getButtonsState() { private int getButtonsState() {
@@ -210,12 +215,12 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
private static native void initIDs(); private static native void initIDs();
private static native boolean nativeLoadGTK(); private static native boolean nativeLoadGTK();
private native long nativeCreateDecoration(boolean showMinimize, boolean showMaximize); private native long nativeCreateDecoration(boolean showMinimize, boolean showMaximize, boolean isDarkTheme);
private native void nativeDestroyDecoration(long nativePtr); private native void nativeDestroyDecoration(long nativePtr);
private native void nativeSwitchTheme(); private native void nativeSwitchTheme(boolean isDarkTheme);
private native void nativePaintTitleBar(long nativePtr, int[] buffer, int width, int height, double scale, private native void nativePaintTitleBar(long nativePtr, int[] buffer, int width, int height, double scale,
String title, int buttonsState); String title, int buttonsState);
private native int nativeGetIntProperty(long nativePtr, String name); private native int nativeGetIntProperty(long nativePtr, String name);
private native void nativeNotifyConfigured(long nativePtr, boolean active, boolean maximized, boolean fullscreen); private native void nativeNotifyConfigured(long nativePtr, boolean active, boolean maximized, boolean fullscreen);
private native void nativePrePaint(long nativePtr, int width); private native void nativePrePaint(long nativePtr, int width, int height);
} }

View File

@@ -43,6 +43,11 @@ public class WLButtonPeer extends WLComponentPeer implements ButtonPeer {
label = target.getLabel(); label = target.getLabel();
} }
@Override
protected void wlSetVisible(boolean v) {
// TODO: unimplemented
}
public boolean isFocusable() { public boolean isFocusable() {
return true; return true;
} }

View File

@@ -42,4 +42,9 @@ class WLCanvasPeer extends WLComponentPeer implements CanvasPeer {
{ {
return gc; return gc;
} }
@Override
protected void wlSetVisible(boolean v) {
// TODO: unimplemented
}
} }

View File

@@ -88,8 +88,8 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.wl.focus.WLComponentPeer"); private static final PlatformLogger focusLog = PlatformLogger.getLogger("sun.awt.wl.focus.WLComponentPeer");
private static final PlatformLogger popupLog = PlatformLogger.getLogger("sun.awt.wl.popup.WLComponentPeer"); private static final PlatformLogger popupLog = PlatformLogger.getLogger("sun.awt.wl.popup.WLComponentPeer");
private static final int MINIMUM_WIDTH = 1; protected static final int MINIMUM_WIDTH = 1;
private static final int MINIMUM_HEIGHT = 1; protected static final int MINIMUM_HEIGHT = 1;
private final Object stateLock = new Object(); private final Object stateLock = new Object();
@@ -135,7 +135,12 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
log.fine("WLComponentPeer: target=" + target + " with size=" + wlSize); log.fine("WLComponentPeer: target=" + target + " with size=" + wlSize);
} }
shadow = new Shadow(targetIsWlPopup() ? ShadowImage.POPUP_SHADOW_SIZE : ShadowImage.WINDOW_SHADOW_SIZE); boolean shadowEnabled = Boolean.parseBoolean(System.getProperty("sun.awt.wl.Shadow", "true"));
if (shadowEnabled) {
shadow = new ShadowImpl(targetIsWlPopup() ? ShadowImage.POPUP_SHADOW_SIZE : ShadowImage.WINDOW_SHADOW_SIZE);
} else {
shadow = new NilShadow();
}
// TODO // TODO
// setup parent window for target // setup parent window for target
} }
@@ -344,6 +349,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
} }
protected void wlSetVisible(boolean v) { protected void wlSetVisible(boolean v) {
// TODO: this whole method should be moved to WLWindowPeer
synchronized (getStateLock()) { synchronized (getStateLock()) {
if (this.visible == v) return; if (this.visible == v) return;
@@ -364,7 +370,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
performLocked(() -> { performLocked(() -> {
assert wlSurface == null; assert wlSurface == null;
wlSurface = new WLMainSurface(this); wlSurface = new WLMainSurface((WLWindowPeer) this);
long wlSurfacePtr = wlSurface.getWlSurfacePtr(); long wlSurfacePtr = wlSurface.getWlSurfacePtr();
if (isWlPopup) { if (isWlPopup) {
Window popup = (Window) target; Window popup = (Window) target;
@@ -397,11 +403,13 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
// from notifyConfigured() // from notifyConfigured()
} else { } else {
performLocked(() -> { performLocked(() -> {
if (wlSurface != null) { // may get a "hide" request even though we were never shown
nativeHideFrame(nativePtr); nativeHideFrame(nativePtr);
shadow.hide(); shadow.hide();
wlSurface.dispose(); wlSurface.dispose();
wlSurface = null; wlSurface = null;
}
}); });
} }
} }
@@ -849,8 +857,10 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
} }
public Dimension getMinimumSize() { public Dimension getMinimumSize() {
int shadowSize = (int) Math.ceil(shadow.getSize() * 4); int shadowSize = shadow != null ? (int) Math.ceil(shadow.getSize() * 4) : 0;
return new Dimension(shadowSize, shadowSize); return shadowSize == 0
? new Dimension(MINIMUM_WIDTH, MINIMUM_HEIGHT)
: new Dimension(shadowSize, shadowSize);
} }
void showWindowMenu(long serial, int x, int y) { void showWindowMenu(long serial, int x, int y) {
@@ -1074,7 +1084,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
long surface = WLToolkit.getInputState().surfaceForKeyboardInput(); long surface = WLToolkit.getInputState().surfaceForKeyboardInput();
// The surface pointer may be out of date, which will cause a protocol error. // The surface pointer may be out of date, which will cause a protocol error.
// So make sure it is valid and do that under AWT lock. // So make sure it is valid and do that under AWT lock.
if (wlSurface != null && surface != 0 && WLToolkit.componentPeerFromSurface(surface) != null) { if (wlSurface != null && surface != 0 && WLToolkit.peerFromSurface(surface) != null) {
wlSurface.activateByAnotherSurface(serial, surface); wlSurface.activateByAnotherSurface(serial, surface);
} }
}); });
@@ -1608,6 +1618,14 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
return new Dimension(javaUnitsToSurfaceSize(d.width), javaUnitsToSurfaceSize(d.height)); return new Dimension(javaUnitsToSurfaceSize(d.width), javaUnitsToSurfaceSize(d.height));
} }
int javaUnitsToBufferUnits(int value) {
return (int) Math.floor(value * effectiveScale);
}
int javaSizeToBufferSize(int value) {
return (int) Math.ceil(value * effectiveScale);
}
/** /**
* Converts a point in the device (screen) space into coordinates on this surface * Converts a point in the device (screen) space into coordinates on this surface
*/ */
@@ -1738,9 +1756,12 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
private Dimension constrainSize(int width, int height) { private Dimension constrainSize(int width, int height) {
Dimension maxBounds = getMaxBufferBounds(); Dimension maxBounds = getMaxBufferBounds();
Dimension minSize = getMinimumSize();
minSize.width = Math.max(MINIMUM_WIDTH, minSize.width);
minSize.height = Math.max(MINIMUM_HEIGHT, minSize.height);
return new Dimension( return new Dimension(
Math.max(Math.min(width, maxBounds.width), MINIMUM_WIDTH), Math.max(Math.min(width, maxBounds.width), minSize.width),
Math.max(Math.min(height, maxBounds.height), MINIMUM_HEIGHT)); Math.max(Math.min(height, maxBounds.height), minSize.height));
} }
private Dimension constrainSize(Dimension bounds) { private Dimension constrainSize(Dimension bounds) {
@@ -1809,6 +1830,20 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
return result; return result;
} }
private interface Shadow {
int getSize();
void updateSurfaceSize();
void resizeToParentWindow();
void createSurface();
void commitSurface();
void dispose();
void hide();
void updateSurfaceData();
void paint();
void commitSurfaceData();
void notifyConfigured(boolean active, boolean maximized, boolean fullscreen);
}
private static class ShadowImage { private static class ShadowImage {
private static final Color activeColor = new Color(0, 0, 0, 0xA0); private static final Color activeColor = new Color(0, 0, 0, 0xA0);
private static final Color inactiveColor = new Color(0, 0, 0, 0x40); private static final Color inactiveColor = new Color(0, 0, 0, 0x40);
@@ -1913,7 +1948,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
} }
} }
private class Shadow implements WLSurfaceSizeListener { private class ShadowImpl implements WLSurfaceSizeListener, Shadow {
private WLSubSurface shadowSurface; // protected by AWT lock private WLSubSurface shadowSurface; // protected by AWT lock
private SurfaceData shadowSurfaceData; // protected by AWT lock private SurfaceData shadowSurfaceData; // protected by AWT lock
private boolean needsRepaint = true; // protected by AWT lock private boolean needsRepaint = true; // protected by AWT lock
@@ -1921,7 +1956,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
private final WLSize shadowWlSize = new WLSize(); // protected by stateLock private final WLSize shadowWlSize = new WLSize(); // protected by stateLock
private boolean isActive; // protected by AWT lock private boolean isActive; // protected by AWT lock
public Shadow(int shadowSize) { public ShadowImpl(int shadowSize) {
this.shadowSize = shadowSize; this.shadowSize = shadowSize;
shadowWlSize.deriveFromJavaSize(wlSize.getJavaWidth() + shadowSize * 2, wlSize.getJavaHeight() + shadowSize * 2); shadowWlSize.deriveFromJavaSize(wlSize.getJavaWidth() + shadowSize * 2, wlSize.getJavaHeight() + shadowSize * 2);
shadowSurfaceData = ((WLGraphicsConfig) getGraphicsConfiguration()).createSurfaceData(this, shadowWlSize.getPixelWidth(), shadowWlSize.getPixelHeight()); shadowSurfaceData = ((WLGraphicsConfig) getGraphicsConfiguration()).createSurfaceData(this, shadowWlSize.getPixelWidth(), shadowWlSize.getPixelHeight());
@@ -2036,6 +2071,20 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
} }
} }
private static class NilShadow implements Shadow {
@Override public int getSize() { return 0; }
@Override public void updateSurfaceSize() { }
@Override public void resizeToParentWindow() { }
@Override public void createSurface() { }
@Override public void commitSurface() { }
@Override public void dispose() { }
@Override public void hide() { }
@Override public void updateSurfaceData() { }
@Override public void paint() { }
@Override public void commitSurfaceData() { }
@Override public void notifyConfigured(boolean active, boolean maximized, boolean fullscreen) { }
}
private class WLSize { private class WLSize {
/** /**
* Represents the full size of the component in "client" units as returned by Component.getSize(). * Represents the full size of the component in "client" units as returned by Component.getSize().

View File

@@ -88,7 +88,7 @@ public class WLDataDevice {
private static native void dispatchDataSourceQueueImpl(long nativePtr); private static native void dispatchDataSourceQueueImpl(long nativePtr);
private static native void setSelectionImpl(int protocol, long nativePtr, long dataOfferNativePtr, long serial); private static native void setSelectionImpl(int protocol, long nativePtr, long dataOfferNativePtr, long serial);
private static native void startDragImpl(long nativePtr, long dataOfferNativePtr, private static native void startDragImpl(long nativePtr, long dataOfferNativePtr,
long originSurfaceNativePtr, long iconNativePtr, long serial); long originSurfaceNativePtr, long serial);
public boolean isProtocolSupported(int protocol) { public boolean isProtocolSupported(int protocol) {
return isProtocolSupportedImpl(nativePtr, protocol); return isProtocolSupportedImpl(nativePtr, protocol);
@@ -98,8 +98,8 @@ public class WLDataDevice {
setSelectionImpl(protocol, nativePtr, (source == null) ? 0 : source.getNativePtr(), serial); setSelectionImpl(protocol, nativePtr, (source == null) ? 0 : source.getNativePtr(), serial);
} }
public void startDrag(WLDataSource source, long originSurfaceNativePtr, long iconNativePtr, long serial) { public void startDrag(WLDataSource source, long originSurfaceNativePtr, long serial) {
startDragImpl(nativePtr, source.getNativePtr(), originSurfaceNativePtr, iconNativePtr, serial); startDragImpl(nativePtr, source.getNativePtr(), originSurfaceNativePtr, serial);
} }
public WLClipboard getSystemClipboard() { public WLClipboard getSystemClipboard() {

View File

@@ -25,7 +25,11 @@
package sun.awt.wl; package sun.awt.wl;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.datatransfer.Transferable; import java.awt.datatransfer.Transferable;
import java.awt.image.BufferedImage;
import java.util.HashSet;
public class WLDataSource { public class WLDataSource {
// nativePtr will be reset to 0 after this object receives a "cancelled" event, and is destroyed. // nativePtr will be reset to 0 after this object receives a "cancelled" event, and is destroyed.
@@ -43,6 +47,8 @@ public class WLDataSource {
private static native void setDnDActionsImpl(long nativePtr, int actions); private static native void setDnDActionsImpl(long nativePtr, int actions);
private static native void setDnDIconImpl(long nativePtr, int width, int height, int offsetX, int offsetY, int[] pixels);
WLDataSource(WLDataDevice dataDevice, int protocol, Transferable data) { WLDataSource(WLDataDevice dataDevice, int protocol, Transferable data) {
var wlDataTransferer = (WLDataTransferer) WLDataTransferer.getInstance(); var wlDataTransferer = (WLDataTransferer) WLDataTransferer.getInstance();
@@ -52,9 +58,20 @@ public class WLDataSource {
try { try {
if (data != null) { if (data != null) {
var mimes = new HashSet<String>();
long[] formats = wlDataTransferer.getFormatsForTransferableAsArray(data, wlDataTransferer.getFlavorTable()); long[] formats = wlDataTransferer.getFormatsForTransferableAsArray(data, wlDataTransferer.getFlavorTable());
for (long format : formats) { for (long format : formats) {
String mime = wlDataTransferer.getNativeForFormat(format); String mime = wlDataTransferer.getNativeForFormat(format);
mimes.add(mime);
if (mime.contains("/") && !mime.startsWith("JAVA_DATAFLAVOR")) {
// Qt apps require lowercase spelling of mime types, like text/plain;charset=utf-8
mimes.add(mime.toLowerCase());
}
}
for (var mime : mimes) {
offerMimeImpl(nativePtr, mime); offerMimeImpl(nativePtr, mime);
} }
} }
@@ -79,6 +96,31 @@ public class WLDataSource {
setDnDActionsImpl(nativePtr, actions); setDnDActionsImpl(nativePtr, actions);
} }
public void setDnDIcon(Image image, int offsetX, int offsetY) {
if (nativePtr == 0) {
throw new IllegalStateException("Native pointer is null");
}
int width = image.getWidth(null);
int height = image.getHeight(null);
int[] pixels = new int[width * height];
if (image instanceof BufferedImage) {
// NOTE: no need to ensure that the BufferedImage is TYPE_INT_ARGB,
// getRGB() does pixel format conversion automatically
((BufferedImage) image).getRGB(0, 0, width, height, pixels, 0, width);
} else {
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
Graphics2D g = bufferedImage.createGraphics();
g.drawImage(image, 0, 0, null);
g.dispose();
bufferedImage.getRGB(0, 0, width, height, pixels, 0, width);
}
setDnDIconImpl(nativePtr, width, height, offsetX, offsetY, pixels);
}
public synchronized void destroy() { public synchronized void destroy() {
if (nativePtr != 0) { if (nativePtr != 0) {
destroyImpl(nativePtr); destroyImpl(nativePtr);

View File

@@ -63,7 +63,7 @@ public abstract class WLDecoratedPeer extends WLWindowPeer {
d = new DefaultFrameDecoration(this, showMinimize, showMaximize); d = new DefaultFrameDecoration(this, showMinimize, showMaximize);
} }
} else { } else {
if (isGTKAvailable()) { if (!WLToolkit.isKDE() && isGTKAvailable()) {
d = new GtkFrameDecoration(this, showMinimize, showMaximize); d = new GtkFrameDecoration(this, showMinimize, showMaximize);
} else { } else {
d = new DefaultFrameDecoration(this, showMinimize, showMaximize); d = new DefaultFrameDecoration(this, showMinimize, showMaximize);
@@ -134,10 +134,11 @@ public abstract class WLDecoratedPeer extends WLWindowPeer {
@Override @Override
public Dimension getMinimumSize() { public Dimension getMinimumSize() {
final Dimension parentMinimumSize = super.getMinimumSize(); final Dimension parentMinimumSize = super.getMinimumSize();
final Dimension decorMinimumSize = getDecoration().getMinimumSize(); var d = getDecoration();
final Dimension decorMinimumSize = d != null ? d.getMinimumSize() : new Dimension(0, 0);
final Dimension frameMinimumSize final Dimension frameMinimumSize
= (decorMinimumSize.getWidth() == 0 && decorMinimumSize.getHeight() == 0) = (decorMinimumSize.getWidth() == 0 && decorMinimumSize.getHeight() == 0)
? new Dimension(1, 1) ? new Dimension(MINIMUM_WIDTH, MINIMUM_HEIGHT)
: decorMinimumSize; : decorMinimumSize;
return new Rectangle(parentMinimumSize) return new Rectangle(parentMinimumSize)
.union(new Rectangle(frameMinimumSize)) .union(new Rectangle(frameMinimumSize))

View File

@@ -115,10 +115,16 @@ public class WLDragSourceContextPeer extends SunDragSourceContextPeer {
source.setDnDActions(waylandActions); source.setDnDActions(waylandActions);
var dragImage = getDragImage();
if (dragImage != null) {
var dragImageOffset = getDragImageOffset();
source.setDnDIcon(dragImage, dragImageOffset.x, dragImageOffset.y);
}
long eventSerial = WLToolkit.getInputState().pointerButtonSerial(); long eventSerial = WLToolkit.getInputState().pointerButtonSerial();
var wlSurface = getComponentWlSurfacePtr(); var wlSurface = getComponentWlSurfacePtr();
dataDevice.startDrag(source, wlSurface, 0, eventSerial); dataDevice.startDrag(source, wlSurface, eventSerial);
} }
@Override @Override

View File

@@ -154,7 +154,7 @@ public class WLDropTargetContextPeer extends SunDropTargetContextPeer {
} }
public synchronized void handleEnter(WLDataOffer offer, long serial, long surfacePtr, double x, double y) { public synchronized void handleEnter(WLDataOffer offer, long serial, long surfacePtr, double x, double y) {
var peer = WLToolkit.componentPeerFromSurface(surfacePtr); var peer = WLToolkit.peerFromSurface(surfacePtr);
if (peer == null) { if (peer == null) {
return; return;
} }

View File

@@ -316,7 +316,7 @@ record WLInputState(WLPointerEvent eventWithSurface,
*/ */
public WLComponentPeer peerForPointerEvents() { public WLComponentPeer peerForPointerEvents() {
return eventWithSurface != null return eventWithSurface != null
? WLToolkit.componentPeerFromSurface(eventWithSurface.getSurface()) ? WLToolkit.peerFromSurface(eventWithSurface.getSurface())
: null; : null;
} }

View File

@@ -1,5 +1,6 @@
package sun.awt.wl; package sun.awt.wl;
import sun.awt.AWTAccessor;
import sun.awt.KeyboardFocusManagerPeerImpl; import sun.awt.KeyboardFocusManagerPeerImpl;
import sun.util.logging.PlatformLogger; import sun.util.logging.PlatformLogger;
@@ -35,10 +36,25 @@ public class WLKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
@Override @Override
public void setCurrentFocusOwner(Component comp) { public void setCurrentFocusOwner(Component comp) {
Window cur = getCurrentFocusedWindow();
if (comp != null && (!(comp instanceof Window window) || if (comp != null && (!(comp instanceof Window window) ||
WLComponentPeer.getNativelyFocusableOwnerOrSelf(window) != currentFocusedWindow)) { WLComponentPeer.getNativelyFocusableOwnerOrSelf(window) != cur)) {
// In Wayland, only Window can be focused, not any widget in it. // In Wayland, only Window can be focused, not any widget in it.
focusLog.severe("Unexpected focus owner set in a Window: " + comp); focusLog.severe("Unexpected focus owner set in a Window: " + comp);
return;
}
if (comp != null) {
Window nativeFocusable = WLComponentPeer.getNativelyFocusableOwnerOrSelf(comp);
AWTAccessor.ComponentAccessor acc = AWTAccessor.getComponentAccessor();
WLComponentPeer nativeFocusablePeer = acc.getPeer(nativeFocusable);
if (nativeFocusablePeer instanceof WLWindowPeer windowPeer) {
// May have to transfer the keyboard focus to a child popup window
// when this 'windowPeer' receives focus from Wayland again because popups
// aren't natively focusable under Wayland.
Component synthFocusOwner = nativeFocusable != comp ? comp : null;
windowPeer.setSyntheticFocusOwner(synthFocusOwner);
}
} }
} }

View File

@@ -33,12 +33,12 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
public class WLMainSurface extends WLSurface { public class WLMainSurface extends WLSurface {
private final WLComponentPeer peer; private final WLWindowPeer peer;
// Graphics devices this top-level component is visible on // Graphics devices this top-level component is visible on
private final List<WLGraphicsDevice> devices = new ArrayList<>(); private final List<WLGraphicsDevice> devices = new ArrayList<>();
public WLMainSurface(WLComponentPeer peer) { public WLMainSurface(WLWindowPeer peer) {
this.peer = peer; this.peer = peer;
} }

View File

@@ -52,7 +52,8 @@ public class WLRoundedCornersManager implements RoundedCornersManager {
public static int roundCornerRadiusFor(RoundedCornerKind kind) { public static int roundCornerRadiusFor(RoundedCornerKind kind) {
return switch (kind) { return switch (kind) {
case DEFAULT, FULL -> 24; case DEFAULT -> 12;
case FULL -> 24;
case NONE -> 0; case NONE -> 0;
case SMALL -> 8; case SMALL -> 8;
}; };

View File

@@ -87,6 +87,7 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Properties; import java.util.Properties;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
@@ -139,6 +140,8 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
private static Boolean sunAwtDisableGtkFileDialogs = null; private static Boolean sunAwtDisableGtkFileDialogs = null;
private static final boolean isKDE;
private static native void initIDs(long displayPtr); private static native void initIDs(long displayPtr);
static { static {
@@ -148,6 +151,11 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
VKEnv.init(display); VKEnv.init(display);
initIDs(display); initIDs(display);
} }
@SuppressWarnings("removal")
String desktop = AccessController.doPrivileged((PrivilegedAction<String>) ()
-> System.getenv("XDG_CURRENT_DESKTOP"));
isKDE = desktop != null && desktop.toLowerCase().contains("kde");
initialized = true; initialized = true;
} }
@@ -335,7 +343,7 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
} }
final long surfacePtr = inputState.surfaceForKeyboardInput(); final long surfacePtr = inputState.surfaceForKeyboardInput();
final WLComponentPeer peer = componentPeerFromSurface(surfacePtr); final WLComponentPeer peer = peerFromSurface(surfacePtr);
if (peer != null) { if (peer != null) {
if (extendedKeyCode >= 0x1000000) { if (extendedKeyCode >= 0x1000000) {
int ch = extendedKeyCode - 0x1000000; int ch = extendedKeyCode - 0x1000000;
@@ -402,10 +410,20 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
} }
final WLInputState newInputState = inputState.updatedFromKeyboardEnterEvent(serial, surfacePtr); final WLInputState newInputState = inputState.updatedFromKeyboardEnterEvent(serial, surfacePtr);
final WLComponentPeer peer = componentPeerFromSurface(surfacePtr); final WLWindowPeer peer = peerFromSurface(surfacePtr);
if (peer != null && peer.getTarget() instanceof Window window) { if (peer != null) {
Window window = (Window) peer.getTarget();
Window winToFocus = window;
Component s = peer.getSyntheticFocusOwner();
if (s instanceof Window synthWindow) {
if (synthWindow.isVisible() && synthWindow.isFocusableWindow()) {
winToFocus = synthWindow;
}
}
WLKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(window); WLKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(window);
final WindowEvent windowEnterEvent = new WindowEvent(window, WindowEvent.WINDOW_GAINED_FOCUS); WindowEvent windowEnterEvent = new WindowEvent(winToFocus, WindowEvent.WINDOW_GAINED_FOCUS);
postPriorityEvent(windowEnterEvent); postPriorityEvent(windowEnterEvent);
} }
inputState = newInputState; inputState = newInputState;
@@ -423,8 +441,9 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
keyboard.onLostFocus(); keyboard.onLostFocus();
final WLInputState newInputState = inputState.updatedFromKeyboardLeaveEvent(serial, surfacePtr); final WLInputState newInputState = inputState.updatedFromKeyboardLeaveEvent(serial, surfacePtr);
final WLComponentPeer peer = componentPeerFromSurface(surfacePtr); final WLWindowPeer peer = peerFromSurface(surfacePtr);
if (peer != null && peer.getTarget() instanceof Window window) { if (peer != null && peer.getTarget() instanceof Window window) {
((WLToolkit) Toolkit.getDefaultToolkit()).ungrab(window);
final WindowEvent winLostFocusEvent = new WindowEvent(window, WindowEvent.WINDOW_LOST_FOCUS); final WindowEvent winLostFocusEvent = new WindowEvent(window, WindowEvent.WINDOW_LOST_FOCUS);
WLKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(null); WLKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(null);
WLKeyboardFocusManagerPeer.getInstance().setCurrentFocusOwner(null); WLKeyboardFocusManagerPeer.getInstance().setCurrentFocusOwner(null);
@@ -436,28 +455,28 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
/** /**
* Maps 'struct wl_surface*' to WLComponentPeer that owns the Wayland surface. * Maps 'struct wl_surface*' to WLComponentPeer that owns the Wayland surface.
*/ */
private static final Map<Long, WLComponentPeer> wlSurfaceToComponentMap = new HashMap<>(); private static final Map<Long, WLWindowPeer> wlSurfaceToPeerMap = new HashMap<>();
static void registerWLSurface(long wlSurfacePtr, WLComponentPeer componentPeer) { static void registerWLSurface(long wlSurfacePtr, WLWindowPeer peer) {
if (log.isLoggable(PlatformLogger.Level.FINE)) { if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine("registerWLSurface: 0x" + Long.toHexString(wlSurfacePtr) + "->" + componentPeer); log.fine("registerWLSurface: 0x" + Long.toHexString(wlSurfacePtr) + "->" + peer);
} }
synchronized (wlSurfaceToComponentMap) { synchronized (wlSurfaceToPeerMap) {
wlSurfaceToComponentMap.put(wlSurfacePtr, componentPeer); wlSurfaceToPeerMap.put(wlSurfacePtr, peer);
} }
} }
static void unregisterWLSurface(long wlSurfacePtr) { static void unregisterWLSurface(long wlSurfacePtr) {
synchronized (wlSurfaceToComponentMap) { synchronized (wlSurfaceToPeerMap) {
wlSurfaceToComponentMap.remove(wlSurfacePtr); wlSurfaceToPeerMap.remove(wlSurfacePtr);
} }
inputState = inputState.updatedFromUnregisteredSurface(wlSurfacePtr); inputState = inputState.updatedFromUnregisteredSurface(wlSurfacePtr);
} }
static WLComponentPeer componentPeerFromSurface(long wlSurfacePtr) { static WLWindowPeer peerFromSurface(long wlSurfacePtr) {
synchronized (wlSurfaceToComponentMap) { synchronized (wlSurfaceToPeerMap) {
return wlSurfaceToComponentMap.get(wlSurfacePtr); return wlSurfaceToPeerMap.get(wlSurfacePtr);
} }
} }
@@ -466,15 +485,15 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
* associated with that surface. * associated with that surface.
* Otherwise, throw UOE. * Otherwise, throw UOE.
*/ */
static WLComponentPeer getSingularWindowPeer() { static WLWindowPeer getSingularWindowPeer() {
synchronized (wlSurfaceToComponentMap) { synchronized (wlSurfaceToPeerMap) {
if (wlSurfaceToComponentMap.size() > 1) { if (wlSurfaceToPeerMap.size() > 1) {
throw new UnsupportedOperationException("More than one native window"); throw new UnsupportedOperationException("More than one native window");
} else if (wlSurfaceToComponentMap.isEmpty()) { } else if (wlSurfaceToPeerMap.isEmpty()) {
throw new UnsupportedOperationException("No native windows"); throw new UnsupportedOperationException("No native windows");
} }
return wlSurfaceToComponentMap.values().iterator().next(); return wlSurfaceToPeerMap.values().iterator().next();
} }
} }
@@ -947,15 +966,25 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
@Override @Override
public void grab(Window w) { public void grab(Window w) {
if (log.isLoggable(PlatformLogger.Level.FINE)) { // There is no input grab in Wayland for client applications, only
log.fine("Not implemented: WLToolkit.grab()"); // the compositor can control grabs. But we need UngrabEvent
// for popup/tooltip management, so we do input grab accounting here
// and in ungrab() below.
Objects.requireNonNull(w);
var peer = AWTAccessor.getComponentAccessor().getPeer(w);
if (peer instanceof WLWindowPeer windowPeer) {
windowPeer.grab();
} }
} }
@Override @Override
public void ungrab(Window w) { public void ungrab(Window w) {
if (log.isLoggable(PlatformLogger.Level.FINE)) { Objects.requireNonNull(w);
log.fine("Not implemented: WLToolkit.ungrab()");
var peer = AWTAccessor.getComponentAccessor().getPeer(w);
if (peer instanceof WLWindowPeer windowPeer) {
windowPeer.ungrab();
} }
} }
/** /**
@@ -1078,4 +1107,7 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
return WLCursorManager.getInstance(); return WLCursorManager.getInstance();
} }
public static boolean isKDE() {
return isKDE;
}
} }

View File

@@ -25,7 +25,11 @@
package sun.awt.wl; package sun.awt.wl;
import sun.awt.AWTAccessor; import sun.awt.AWTAccessor;
import sun.awt.SurfacePixelGrabber;
import sun.awt.UngrabEvent;
import sun.java2d.SunGraphics2D; import sun.java2d.SunGraphics2D;
import sun.java2d.vulkan.VKSurfaceData;
import sun.java2d.wl.WLSMSurfaceData;
import javax.swing.JRootPane; import javax.swing.JRootPane;
import javax.swing.RootPaneContainer; import javax.swing.RootPaneContainer;
@@ -35,17 +39,24 @@ import java.awt.Component;
import java.awt.Dialog; import java.awt.Dialog;
import java.awt.Font; import java.awt.Font;
import java.awt.Insets; import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.RenderingHints; import java.awt.RenderingHints;
import java.awt.SystemColor; import java.awt.SystemColor;
import java.awt.Window; import java.awt.Window;
import java.awt.event.WindowEvent; import java.awt.event.WindowEvent;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import java.awt.image.BufferedImage;
import java.awt.peer.ComponentPeer; import java.awt.peer.ComponentPeer;
import java.awt.peer.WindowPeer; import java.awt.peer.WindowPeer;
import java.lang.ref.WeakReference;
public class WLWindowPeer extends WLComponentPeer implements WindowPeer { public class WLWindowPeer extends WLComponentPeer implements WindowPeer, SurfacePixelGrabber {
private static Font defaultFont; private static Font defaultFont;
private Dialog blocker; private Dialog blocker;
private static WLWindowPeer grabbingWindow; // fake, kept for UngrabEvent only
// If this window gets focus from Wayland, we need to transfer focus synthFocusOwner, if any
private WeakReference<Component> synthFocusOwner = new WeakReference<>(null);
public static final String WINDOW_CORNER_RADIUS = "apple.awt.windowCornerRadius"; public static final String WINDOW_CORNER_RADIUS = "apple.awt.windowCornerRadius";
@@ -89,6 +100,8 @@ public class WLWindowPeer extends WLComponentPeer implements WindowPeer {
@Override @Override
protected void wlSetVisible(boolean v) { protected void wlSetVisible(boolean v) {
if (!v) ungrab();
if (v && targetIsWlPopup() && shouldBeFocusedOnShowing()) { if (v && targetIsWlPopup() && shouldBeFocusedOnShowing()) {
requestWindowFocus(); requestWindowFocus();
} }
@@ -191,6 +204,7 @@ public class WLWindowPeer extends WLComponentPeer implements WindowPeer {
@Override @Override
public void dispose() { public void dispose() {
ungrab();
resetCornerMasks(); resetCornerMasks();
super.dispose(); super.dispose();
} }
@@ -222,6 +236,90 @@ public class WLWindowPeer extends WLComponentPeer implements WindowPeer {
} }
} }
public Component getSyntheticFocusOwner() {
return synthFocusOwner.get();
}
public void setSyntheticFocusOwner(Component c) {
synthFocusOwner = new WeakReference<>(c);
}
public void grab() {
if (grabbingWindow != null && !isGrabbing()) {
grabbingWindow.ungrab();
}
grabbingWindow = this;
}
public void ungrab() {
if (isGrabbing()) {
grabbingWindow = null;
WLToolkit.postEvent(new UngrabEvent(getTarget()));
}
}
private boolean isGrabbing() {
return this == grabbingWindow;
}
@Override
public BufferedImage getClientAreaSnapshot(int x, int y, int width, int height) {
// Move the coordinate system to the client area
Insets insets = getInsets();
x += insets.left;
y += insets.top;
if (width <= 0 || height <= 0) {
return null;
}
if (x < 0 || y < 0) {
// Shouldn't happen, but better avoid accessing surface data outside the range
throw new IllegalArgumentException("Negative coordinates are not allowed");
}
if (x >= getWidth()) {
throw new IllegalArgumentException(String.format("x coordinate (%d) is out of bounds (%d)", x, getWidth()));
}
if (y >= getHeight()) {
throw new IllegalArgumentException(String.format("y coordinate (%d) is out of bounds (%d)", y, getHeight()));
}
if ((long) x + width > getWidth()) {
width = getWidth() - x;
}
if ((long) y + height > getHeight()) {
height = getHeight() - y;
}
// At this point the coordinates and size are in Java units;
// need to convert them into pixels.
Rectangle bounds = new Rectangle(
javaUnitsToBufferUnits(x),
javaUnitsToBufferUnits(y),
javaSizeToBufferSize(width),
javaSizeToBufferSize(height)
);
Rectangle bufferBounds = getBufferBounds();
if (bounds.x >= bufferBounds.width) {
bounds.x = bufferBounds.width - 1;
}
if (bounds.y >= bufferBounds.height) {
bounds.y = bufferBounds.height - 1;
}
if (bounds.x + bounds.width > bufferBounds.width) {
bounds.width = bufferBounds.width - bounds.x;
}
if (bounds.y + bounds.height > bufferBounds.height) {
bounds.height = bufferBounds.height - bounds.y;
}
if (surfaceData instanceof VKSurfaceData vksd) {
return vksd.getSnapshot(bounds.x, bounds.y, bounds.width, bounds.height);
} else if (surfaceData instanceof WLSMSurfaceData smsd) {
return smsd.getSnapshot(bounds.x, bounds.y, bounds.width, bounds.height);
}
return null;
}
private boolean canPaintRoundedCorners() { private boolean canPaintRoundedCorners() {
int roundedCornerSize = WLRoundedCornersManager.roundCornerRadiusFor(roundedCornerKind); int roundedCornerSize = WLRoundedCornersManager.roundCornerRadiusFor(roundedCornerKind);
// Note: You would normally get a transparency-capable color model when using // Note: You would normally get a transparency-capable color model when using

View File

@@ -26,19 +26,25 @@
package sun.java2d.wl; package sun.java2d.wl;
import java.awt.AlphaComposite;
import java.awt.Color; import java.awt.Color;
import java.awt.Component; import java.awt.Component;
import java.awt.Window; import java.awt.Window;
import java.awt.GraphicsConfiguration; import java.awt.GraphicsConfiguration;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.Raster; import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
import java.util.Objects; import java.util.Objects;
import sun.awt.AWTAccessor; import sun.awt.AWTAccessor;
import sun.awt.wl.WLComponentPeer; import sun.awt.wl.WLComponentPeer;
import sun.awt.wl.WLGraphicsConfig;
import sun.awt.wl.WLSMGraphicsConfig; import sun.awt.wl.WLSMGraphicsConfig;
import sun.java2d.SurfaceData; import sun.java2d.SurfaceData;
import sun.java2d.loops.Blit;
import sun.java2d.loops.CompositeType;
import sun.java2d.loops.SurfaceType; import sun.java2d.loops.SurfaceType;
import sun.util.logging.PlatformLogger; import sun.util.logging.PlatformLogger;
@@ -124,16 +130,20 @@ public class WLSMSurfaceData extends SurfaceData implements WLSurfaceDataExt, WL
return gc; return gc;
} }
public BufferedImage getSnapshot(int x, int y, int width, int height) {
ColorModel colorModel = getColorModel();
SampleModel sampleModel = colorModel.createCompatibleSampleModel(width, height);
WritableRaster raster = Raster.createWritableRaster(sampleModel, null);
BufferedImage image = new BufferedImage(colorModel, raster, colorModel.isAlphaPremultiplied(), null);
SurfaceData sd = SurfaceData.getPrimarySurfaceData(image);
Blit blit = Blit.getFromCache(getSurfaceType(), CompositeType.SrcNoEa, sd.getSurfaceType());
blit.Blit(this, sd, AlphaComposite.Src, null, x, y, 0, 0, width, height);
return image;
}
@Override @Override
public Raster getRaster(int x, int y, int w, int h) { public Raster getRaster(int x, int y, int w, int h) {
// Can do something like the following: return getSnapshot(x, y, w, h).getRaster().createTranslatedChild(x, y);
// Raster r = getColorModel().createCompatibleWritableRaster(w, h);
// copy surface data to this raster
// save a reference to this raster
// return r;
// then in flush() check if raster was modified and take pixels from there
// This is obviously suboptimal and shouldn't be used in performance-critical situations.
throw new UnsupportedOperationException("Not implemented yet");
} }
@Override @Override
@@ -189,7 +199,7 @@ public class WLSMSurfaceData extends SurfaceData implements WLSurfaceDataExt, WL
private void countNewFrame() { private void countNewFrame() {
// Called from the native code when this surface data has been sent to the Wayland server // Called from the native code when this surface data has been sent to the Wayland server
if (target instanceof Window window) { if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.frames"); AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.frames");
} }
} }
@@ -198,7 +208,7 @@ public class WLSMSurfaceData extends SurfaceData implements WLSurfaceDataExt, WL
// the Wayland server, but that attempt was not successful. This can happen, for example, // the Wayland server, but that attempt was not successful. This can happen, for example,
// when those attempts are too frequent. // when those attempts are too frequent.
if (target instanceof Window window) { if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.framesDropped"); AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.framesDropped");
} }
} }

View File

@@ -137,6 +137,7 @@ typedef gboolean (*gtk_icon_size_lookup_t)(GtkIconSize, gint*, gint*);
typedef GdkPixbuf* (*gtk_icon_info_load_symbolic_for_context_t)(GtkIconInfo*, GtkStyleContext*, gboolean*, GError**); typedef GdkPixbuf* (*gtk_icon_info_load_symbolic_for_context_t)(GtkIconInfo*, GtkStyleContext*, gboolean*, GError**);
typedef GtkIconInfo* (*gtk_icon_theme_lookup_icon_for_scale_t)(GtkIconTheme*, const gchar*, gint, gint, GtkIconLookupFlags); typedef GtkIconInfo* (*gtk_icon_theme_lookup_icon_for_scale_t)(GtkIconTheme*, const gchar*, gint, gint, GtkIconLookupFlags);
typedef GtkIconTheme* (*gtk_icon_theme_get_default_t)(void); typedef GtkIconTheme* (*gtk_icon_theme_get_default_t)(void);
typedef GtkSettings* (*gtk_settings_get_default_t)(void);
typedef GtkSettings* (*gtk_widget_get_settings_t)(GtkWidget*); typedef GtkSettings* (*gtk_widget_get_settings_t)(GtkWidget*);
typedef GtkStateFlags (*gtk_style_context_get_state_t)(GtkStyleContext *context); typedef GtkStateFlags (*gtk_style_context_get_state_t)(GtkStyleContext *context);
typedef GtkStyleContext* (*gtk_widget_get_style_context_t)(GtkWidget*); typedef GtkStyleContext* (*gtk_widget_get_style_context_t)(GtkWidget*);
@@ -191,7 +192,6 @@ typedef void (*g_object_get_t)(gpointer, const gchar*, ...);
typedef void (*g_object_set_t)(gpointer, const gchar*, ...); typedef void (*g_object_set_t)(gpointer, const gchar*, ...);
typedef void (*g_object_get_property_t)(GObject*, const gchar*, GValue*); typedef void (*g_object_get_property_t)(GObject*, const gchar*, GValue*);
typedef gboolean (*g_type_check_instance_is_a_t)(void**, GType); typedef gboolean (*g_type_check_instance_is_a_t)(void**, GType);
typedef gboolean (*g_main_context_iteration_t)(GMainContext *context, gboolean);
typedef struct GtkFrameDecorationDescr { typedef struct GtkFrameDecorationDescr {
GtkWidget *window; GtkWidget *window;
@@ -227,6 +227,7 @@ static gtk_offscreen_window_new_t p_gtk_offscreen_window_new;
static gtk_render_background_t p_gtk_render_background; static gtk_render_background_t p_gtk_render_background;
static gtk_render_frame_t p_gtk_render_frame; static gtk_render_frame_t p_gtk_render_frame;
static gtk_render_icon_surface_t p_gtk_render_icon_surface; static gtk_render_icon_surface_t p_gtk_render_icon_surface;
static gtk_settings_get_default_t p_gtk_settings_get_default;
static gtk_style_context_add_class_t p_gtk_style_context_add_class; static gtk_style_context_add_class_t p_gtk_style_context_add_class;
static gtk_style_context_get_border_t p_gtk_style_context_get_border; static gtk_style_context_get_border_t p_gtk_style_context_get_border;
static gtk_style_context_get_padding_t p_gtk_style_context_get_padding; static gtk_style_context_get_padding_t p_gtk_style_context_get_padding;
@@ -272,7 +273,6 @@ static g_object_get_t p_g_object_get;
static g_object_set_t p_g_object_set; static g_object_set_t p_g_object_set;
static g_object_get_property_t p_g_object_get_property; static g_object_get_property_t p_g_object_get_property;
static g_type_check_instance_is_a_t p_g_type_check_instance_is_a; static g_type_check_instance_is_a_t p_g_type_check_instance_is_a;
static g_main_context_iteration_t p_g_main_context_iteration;
static void* gtk_handle; static void* gtk_handle;
static void* gdk_handle; static void* gdk_handle;
@@ -328,6 +328,7 @@ static jboolean load_gtk(JNIEnv *env) {
p_gtk_render_background = find_func(env, gtk_handle, "gtk_render_background"); p_gtk_render_background = find_func(env, gtk_handle, "gtk_render_background");
p_gtk_render_frame = find_func(env, gtk_handle, "gtk_render_frame"); p_gtk_render_frame = find_func(env, gtk_handle, "gtk_render_frame");
p_gtk_render_icon_surface = find_func(env, gtk_handle, "gtk_render_icon_surface"); p_gtk_render_icon_surface = find_func(env, gtk_handle, "gtk_render_icon_surface");
p_gtk_settings_get_default = find_func(env, gtk_handle, "gtk_settings_get_default");
p_gtk_style_context_add_class = find_func(env, gtk_handle, "gtk_style_context_add_class"); p_gtk_style_context_add_class = find_func(env, gtk_handle, "gtk_style_context_add_class");
p_gtk_style_context_get_border = find_func(env, gtk_handle, "gtk_style_context_get_border"); p_gtk_style_context_get_border = find_func(env, gtk_handle, "gtk_style_context_get_border");
p_gtk_style_context_get = find_func(env, gtk_handle, "gtk_style_context_get"); p_gtk_style_context_get = find_func(env, gtk_handle, "gtk_style_context_get");
@@ -372,7 +373,6 @@ static jboolean load_gtk(JNIEnv *env) {
p_g_object_set = find_func(env, gtk_handle, "g_object_set"); p_g_object_set = find_func(env, gtk_handle, "g_object_set");
p_g_object_get_property = find_func(env, gtk_handle, "g_object_get_property"); p_g_object_get_property = find_func(env, gtk_handle, "g_object_get_property");
p_g_type_check_instance_is_a = find_func(env, gtk_handle, "g_type_check_instance_is_a"); p_g_type_check_instance_is_a = find_func(env, gtk_handle, "g_type_check_instance_is_a");
p_g_main_context_iteration = find_func(env, gtk_handle, "g_main_context_iteration");
// NB: An error had been thrown in case some function was missing // NB: An error had been thrown in case some function was missing
return JNI_TRUE; return JNI_TRUE;
@@ -561,6 +561,13 @@ static void draw_title_bar(GtkFrameDecorationDescr* decor, cairo_surface_t * sur
draw_titlebar_buttons(decor, surface, cr, scale, buttonsState); draw_titlebar_buttons(decor, surface, cr, scale, buttonsState);
} }
static void set_theme(jboolean is_dark_theme) {
p_g_object_set(p_gtk_settings_get_default(),
"gtk-application-prefer-dark-theme",
is_dark_theme,
NULL);
}
JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_initIDs(JNIEnv *env, jclass clazz) { JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_initIDs(JNIEnv *env, jclass clazz) {
CHECK_NULL_THROW_IE(env, CHECK_NULL_THROW_IE(env,
CloseButtonBoundsFID = (*env)->GetFieldID(env, clazz, "closeButtonBounds", "Ljava/awt/Rectangle;"), CloseButtonBoundsFID = (*env)->GetFieldID(env, clazz, "closeButtonBounds", "Ljava/awt/Rectangle;"),
@@ -584,12 +591,14 @@ JNIEXPORT jboolean JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeLoadGTK(JNIE
} }
JNIEXPORT jlong JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeCreateDecoration JNIEXPORT jlong JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeCreateDecoration
(JNIEnv *env, jobject obj, jboolean show_minimize, jboolean show_maximize) { (JNIEnv *env, jobject obj, jboolean show_minimize, jboolean show_maximize, jboolean is_dark_theme) {
GtkFrameDecorationDescr *d = calloc(1, sizeof(GtkFrameDecorationDescr)); GtkFrameDecorationDescr *d = calloc(1, sizeof(GtkFrameDecorationDescr));
CHECK_NULL_THROW_OOME_RETURN(env, d, "Failed to allocate GtkFrameDeocration", 0); CHECK_NULL_THROW_OOME_RETURN(env, d, "Failed to allocate GtkFrameDeocration", 0);
p_gdk_threads_enter(); p_gdk_threads_enter();
set_theme(is_dark_theme);
d->show_minimize = show_minimize; d->show_minimize = show_minimize;
d->show_maximize = show_maximize; d->show_maximize = show_maximize;
d->window = p_gtk_offscreen_window_new(); d->window = p_gtk_offscreen_window_new();
@@ -675,7 +684,7 @@ JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativePaintTitleBar
} }
JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativePrePaint(JNIEnv *env, jobject obj, JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativePrePaint(JNIEnv *env, jobject obj,
jlong ptr, jint width) { jlong ptr, jint width, jint height) {
assert (ptr != 0); assert (ptr != 0);
GtkFrameDecorationDescr* decor = jlong_to_ptr(ptr); GtkFrameDecorationDescr* decor = jlong_to_ptr(ptr);
@@ -705,6 +714,12 @@ JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativePrePaint(JNIEnv
(*env)->SetIntField(env, obj, TitleBarHeightFID, pref_height); (*env)->SetIntField(env, obj, TitleBarHeightFID, pref_height);
(*env)->SetIntField(env, obj, TitleBarMinWidthFID, min_width); (*env)->SetIntField(env, obj, TitleBarMinWidthFID, min_width);
if (width < min_width || height < pref_height) {
// Avoid gtk warnings in case of insufficient space
p_gdk_threads_leave();
return;
}
GtkAllocation ha = {0, 0, width, pref_height}; GtkAllocation ha = {0, 0, width, pref_height};
p_gtk_widget_size_allocate(decor->titlebar, &ha); p_gtk_widget_size_allocate(decor->titlebar, &ha);
@@ -736,8 +751,10 @@ JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativePrePaint(JNIEnv
p_gdk_threads_leave(); p_gdk_threads_leave();
} }
JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeSwitchTheme(JNIEnv *env, jobject obj) { JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeSwitchTheme(JNIEnv *env, jobject obj, jboolean is_dark_theme) {
while ((*p_g_main_context_iteration)(NULL, false)); p_gdk_threads_enter();
set_theme(is_dark_theme);
p_gdk_threads_leave();
} }
JNIEXPORT jint JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeGetIntProperty JNIEXPORT jint JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeGetIntProperty

View File

@@ -72,6 +72,9 @@ struct DataSource
struct wl_data_source *wlDataSource; struct wl_data_source *wlDataSource;
struct zwp_primary_selection_source_v1 *zwpPrimarySelectionSource; struct zwp_primary_selection_source_v1 *zwpPrimarySelectionSource;
}; };
struct wl_surface* dragIcon;
struct wl_buffer* dragIconBuffer;
}; };
// native part of WLDataOffer, remains alive until WLDataOffer.destroy() is called // native part of WLDataOffer, remains alive until WLDataOffer.destroy() is called
@@ -937,7 +940,7 @@ Java_sun_awt_wl_WLDataDevice_setSelectionImpl(JNIEnv *env,
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_sun_awt_wl_WLDataDevice_startDragImpl(JNIEnv *env, jclass clazz, jlong dataDeviceNativePtr, Java_sun_awt_wl_WLDataDevice_startDragImpl(JNIEnv *env, jclass clazz, jlong dataDeviceNativePtr,
jlong dataSourceNativePtr, jlong wlSurfacePtr, jlong dataSourceNativePtr, jlong wlSurfacePtr,
jlong iconPtr, jlong serial) jlong serial)
{ {
struct DataDevice *dataDevice = jlong_to_ptr(dataDeviceNativePtr); struct DataDevice *dataDevice = jlong_to_ptr(dataDeviceNativePtr);
assert(dataDevice != NULL); assert(dataDevice != NULL);
@@ -946,7 +949,10 @@ Java_sun_awt_wl_WLDataDevice_startDragImpl(JNIEnv *env, jclass clazz, jlong data
assert(source != NULL); assert(source != NULL);
wl_data_device_start_drag(dataDevice->wlDataDevice, source->wlDataSource, jlong_to_ptr(wlSurfacePtr), wl_data_device_start_drag(dataDevice->wlDataDevice, source->wlDataSource, jlong_to_ptr(wlSurfacePtr),
jlong_to_ptr(iconPtr), serial); source->dragIcon, serial);
if (source->dragIcon != NULL) {
wl_surface_commit(source->dragIcon);
}
} }
JNIEXPORT jlong JNICALL JNIEXPORT jlong JNICALL
@@ -1045,6 +1051,14 @@ Java_sun_awt_wl_WLDataSource_destroyImpl(JNIEnv *env, jclass clazz, jlong native
zwp_primary_selection_source_v1_destroy(source->zwpPrimarySelectionSource); zwp_primary_selection_source_v1_destroy(source->zwpPrimarySelectionSource);
} }
if (source->dragIconBuffer) {
wl_buffer_destroy(source->dragIconBuffer);
}
if (source->dragIcon) {
wl_surface_destroy(source->dragIcon);
}
free(source); free(source);
} }
@@ -1058,6 +1072,65 @@ Java_sun_awt_wl_WLDataSource_setDnDActionsImpl(JNIEnv *env,
DataSource_setDnDActions(source, actions); DataSource_setDnDActions(source, actions);
} }
JNIEXPORT void JNICALL Java_sun_awt_wl_WLDataSource_setDnDIconImpl
(JNIEnv * env, jclass clazz, jlong nativePtr, jint width, jint height, jint offsetX, jint offsetY, jintArray pixels)
{
struct DataSource *source = jlong_to_ptr(nativePtr);
size_t pixelCount = (size_t)((*env)->GetArrayLength(env, pixels));
size_t byteSize = pixelCount * 4U;
if (byteSize >= INT32_MAX) {
return;
}
jint *shmPixels = NULL;
struct wl_shm_pool *pool = CreateShmPool(byteSize, "WLDataSource_DragIcon", (void**)&shmPixels, NULL);
if (!pool) {
return;
}
(*env)->GetIntArrayRegion(env, pixels, 0, pixelCount, shmPixels);
#if defined(__BYTE_ORDER__) && defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
// Wayland requires little-endian data
for (size_t i = 0; i < pixelCount; i++) {
uint32_t value = (uint32_t)shmPixels[i];
shmPixels[i] = (jint)((value & 0xFFU) << 24 |
(value & 0xFF00U) << 8 |
(value & 0xFF0000U) >> 8 |
(value & 0xFF000000U) >> 24 & 0xFFU);
}
#endif
source->dragIconBuffer = wl_shm_pool_create_buffer(pool, 0, width, height, width * 4, WL_SHM_FORMAT_ARGB8888);
wl_shm_pool_destroy(pool);
if (!source->dragIconBuffer) {
return;
}
source->dragIcon = wl_compositor_create_surface(wl_compositor);
if (!source->dragIcon) {
wl_buffer_destroy(source->dragIconBuffer);
source->dragIconBuffer = NULL;
return;
}
#if WL_SURFACE_OFFSET_SINCE_VERSION >= 5
int wl_compositor_version = wl_compositor_get_version(wl_compositor);
if (wl_compositor_version >= 5) {
wl_surface_attach(source->dragIcon, source->dragIconBuffer, 0, 0);
wl_surface_offset(source->dragIcon, offsetX, offsetY);
} else {
wl_surface_attach(source->dragIcon, source->dragIconBuffer, offsetX, offsetY);
}
#else
wl_surface_attach(source->dragIcon, source->dragIconBuffer, offsetX, offsetY);
#endif
wl_surface_damage_buffer(source->dragIcon, 0, 0, width, height);
// NOTE: we still need to commit the surface, this is done immediately after start_drag
}
JNIEXPORT void JNICALL JNIEXPORT void JNICALL
Java_sun_awt_wl_WLDataOffer_destroyImpl(JNIEnv *env, jclass clazz, jlong nativePtr) Java_sun_awt_wl_WLDataOffer_destroyImpl(JNIEnv *env, jclass clazz, jlong nativePtr)
{ {

View File

@@ -1161,6 +1161,8 @@ postKeyTypedJavaChar(long serial, long timestamp, uint16_t javaChar) {
fprintf(stderr, "postKeyTypedJavaChar(0x%04x)\n", (int) javaChar); fprintf(stderr, "postKeyTypedJavaChar(0x%04x)\n", (int) javaChar);
#endif #endif
int javaModifiers = convertXKBModifiersToJavaModifiers(getXKBModifiers());
struct WLKeyEvent event = { struct WLKeyEvent event = {
.serial = serial, .serial = serial,
.timestamp = timestamp, .timestamp = timestamp,
@@ -1169,7 +1171,8 @@ postKeyTypedJavaChar(long serial, long timestamp, uint16_t javaChar) {
.keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN, .keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
.rawCode = 0, .rawCode = 0,
.extendedKeyCode = 0, .extendedKeyCode = 0,
.keyChar = javaChar .keyChar = javaChar,
.modifiers = javaModifiers,
}; };
wlPostKeyEvent(&event); wlPostKeyEvent(&event);

View File

@@ -531,7 +531,12 @@ registry_global(void *data, struct wl_registry *wl_registry,
if (strcmp(interface, wl_shm_interface.name) == 0) { if (strcmp(interface, wl_shm_interface.name) == 0) {
wl_shm = wl_registry_bind( wl_registry, name, &wl_shm_interface, 1); wl_shm = wl_registry_bind( wl_registry, name, &wl_shm_interface, 1);
} else if (strcmp(interface, wl_compositor_interface.name) == 0) { } else if (strcmp(interface, wl_compositor_interface.name) == 0) {
wl_compositor = wl_registry_bind(wl_registry, name, &wl_compositor_interface, 4); #if WL_SURFACE_OFFSET_SINCE_VERSION >= 5
uint32_t chosen_version = (version >= 5) ? 5 : 4;
#else
uint32_t chosen_version = 4;
#endif
wl_compositor = wl_registry_bind(wl_registry, name, &wl_compositor_interface, chosen_version);
} else if (strcmp(interface, wl_subcompositor_interface.name) == 0) { } else if (strcmp(interface, wl_subcompositor_interface.name) == 0) {
wl_subcompositor = wl_registry_bind(wl_registry, name, &wl_subcompositor_interface, 1); wl_subcompositor = wl_registry_bind(wl_registry, name, &wl_subcompositor_interface, 1);
} else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) {

View File

@@ -0,0 +1,173 @@
/*
* Copyright 2024 JetBrains s.r.o.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
* particular file as subject to the "Classpath" exception as provided
* by Oracle in the LICENSE file that accompanied this code.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
package sun.awt.windows;
import sun.awt.AWTAccessor;
import sun.java2d.SunGraphicsEnvironment;
import javax.swing.*;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.text.JTextComponent;
import java.awt.*;
import java.awt.im.InputMethodRequests;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.lang.ref.WeakReference;
/**
* Provides caret tracking support for assistive tools that don't work with Java Access Bridge.
* Specifically, it's targeted for the built-in Windows Magnifier.
* This class listens to caret change events of the currently focused JTextComponent
* and forwards them to the native code, which then sends them as Win32 IAccessible events.
* <p>
* A typical high-level scenario of the interaction with the magnifier:
* <ol>
* <li>Magnifier sends a WM_GETOBJECT window message to get accessible content of the window.</li>
* <li>The message is handled in AwtComponent native class (awt_Component.cpp),
* which calls {@link #startCaretNotifier}.</li>
* <li>We start listening for keyboard focus change events.</li>
* <li>If at some point focus gets to a {@link JTextComponent}, we subscribe to its caret events.</li>
* <li>When the caret changes, we need to move the magnifier viewport to the new caret location.
* To achieve this, we create a Win32 IAccessible object for the caret (see AccessibleCaret.cpp)
* and send an event that its location was changed (EVENT_OBJECT_LOCATIONCHANGE).</li>
* <li>Magnifier receives this event and sends the WM_GETOBJECT message with the OBJID_CARET argument
* to get the caret object and its location property. After that, it moves the viewport to the returned location.
* </li>
* <li>When the {@link JTextComponent} loses focus, we stop listening to caret events
* and release the IAccessible caret object.</li>
* </ol>
* </p>
* <p>
* The feature is enabled by default
* and can be toggled by setting the sun.awt.windows.use.native.caret.accessibility.events property.
* </p>
*/
@SuppressWarnings("unused") // Used from the native side through JNI.
class AccessibleCaretLocationNotifier implements PropertyChangeListener, CaretListener {
private volatile static AccessibleCaretLocationNotifier caretNotifier;
private static final boolean nativeCaretEventsEnabled =
Boolean.parseBoolean(System.getProperty("sun.awt.windows.use.native.caret.accessibility.events", "true"));
private WeakReference<JTextComponent> currentFocusedComponent;
private long currentHwnd;
@SuppressWarnings("unused") // Called from the native through JNI.
public static void startCaretNotifier(long hwnd) {
if (nativeCaretEventsEnabled && caretNotifier == null) {
SwingUtilities.invokeLater(() -> {
if (caretNotifier == null) {
caretNotifier = new AccessibleCaretLocationNotifier(hwnd);
KeyboardFocusManager cfm = KeyboardFocusManager.getCurrentKeyboardFocusManager();
cfm.addPropertyChangeListener("focusOwner", caretNotifier);
if (cfm.getFocusOwner() instanceof JTextComponent textComponent) {
caretNotifier.propertyChange(new PropertyChangeEvent(caretNotifier, "focusOwner", null, textComponent));
}
}
});
}
}
public AccessibleCaretLocationNotifier(long hwnd) {
currentHwnd = hwnd;
}
private static native void updateNativeCaretLocation(long hwnd, int x, int y, int width, int height);
private static native void releaseNativeCaret(long hwnd);
@Override
public void propertyChange(PropertyChangeEvent e) {
Window w = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusedWindow();
if (w != null) {
WWindowPeer wp = AWTAccessor.getComponentAccessor().getPeer(w);
if (wp != null) {
long hwnd = wp.getHWnd();
if (currentHwnd != hwnd) {
currentHwnd = hwnd;
}
}
}
Object newFocusedComponent = e.getNewValue();
if (currentFocusedComponent != null) {
JTextComponent currentComponentStrong = currentFocusedComponent.get();
if (currentComponentStrong != null && newFocusedComponent != currentComponentStrong) {
currentComponentStrong.removeCaretListener(this);
currentFocusedComponent.clear();
currentFocusedComponent = null;
releaseNativeCaret(currentHwnd);
}
}
if (newFocusedComponent instanceof JTextComponent textComponent) {
currentFocusedComponent = new WeakReference<>(textComponent);
textComponent.addCaretListener(this);
// Trigger the caret event when the text component receives focus to notify about the initial caret location
caretUpdate(new CaretEvent(textComponent) {
// Dot and mark won't be used, so we can set any values.
@Override
public int getDot() { return 0; }
@Override
public int getMark() { return 0; }
});
}
}
@Override
public void caretUpdate(CaretEvent e) {
if (!(e.getSource() instanceof JTextComponent textComponent)) {
return;
}
SwingUtilities.invokeLater(() -> {
if (!textComponent.isShowing()) return;
InputMethodRequests imr = textComponent.getInputMethodRequests();
if (imr == null) return;
Rectangle caretRectangle = imr.getTextLocation(null);
if (caretRectangle == null) return;
caretRectangle.width = 1;
Container parent = textComponent.getParent();
if (parent != null && parent.isShowing()) {
// Make sure we don't go outside of parent bounds, which can happen in the case of scrollable components.
Rectangle parentBounds = parent.getBounds();
parentBounds.setLocation(parent.getLocationOnScreen());
if (!parentBounds.contains(caretRectangle)) {
caretRectangle = parentBounds.intersection(caretRectangle);
if (caretRectangle.isEmpty()) return;
}
}
caretRectangle = SunGraphicsEnvironment.toDeviceSpaceAbs(caretRectangle);
updateNativeCaretLocation(AccessibleCaretLocationNotifier.this.currentHwnd,
(int) caretRectangle.getX(), (int) caretRectangle.getY(),
(int) caretRectangle.getWidth(), (int) caretRectangle.getHeight());
});
}
}

View File

@@ -824,11 +824,11 @@ public class D3DSurfaceData extends SurfaceData implements AccelSurface {
if (sd.getPeer().getTarget() instanceof Window window) { if (sd.getPeer().getTarget() instanceof Window window) {
switch (D3DRenderQueue.getFramePresentedStatus()) { switch (D3DRenderQueue.getFramePresentedStatus()) {
case 1: case 1:
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.framesPresentRequested"); AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.framesPresentRequested");
break; break;
case 0: case 0:
default: default:
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.framesPresentFailed"); AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.framesPresentFailed");
} }
} }
} }

View File

@@ -0,0 +1,317 @@
/*
* Copyright (c) 2024, JetBrains s.r.o.. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#include "AccessibleCaret.h"
#include "debug_assert.h" // DASSERT
#include "sun_awt_windows_AccessibleCaretLocationNotifier.h"
#include <atomic> // std::atomic
/**
* This class implements Win32 IAccessible interface in a similar way to the system text caret.
*/
static std::atomic<AccessibleCaret *> GLOBAL_INSTANCE{nullptr};
AccessibleCaret* AccessibleCaret::getInstanceIfPresent() noexcept {
return GLOBAL_INSTANCE.load();
}
AccessibleCaret* AccessibleCaret::getOrCreateInstance() {
bool unused;
return AccessibleCaret::getOrCreateInstance(unused);
}
AccessibleCaret* AccessibleCaret::getOrCreateInstance(bool& instanceIsNew) {
instanceIsNew = false;
AccessibleCaret* result = GLOBAL_INSTANCE.load();
if (result == nullptr) {
AccessibleCaret* newInstance = new AccessibleCaret();
if (GLOBAL_INSTANCE.compare_exchange_strong(result, newInstance)) {
result = newInstance;
instanceIsNew = true;
} else {
DASSERT(result != nullptr);
delete newInstance;
}
}
DASSERT(result != nullptr);
return result;
}
bool AccessibleCaret::releaseInstanceIfPresent() {
AccessibleCaret* instance = GLOBAL_INSTANCE.exchange(nullptr);
if (instance != nullptr) {
instance->Release();
return true;
}
return false;
}
AccessibleCaret::AccessibleCaret()
: m_refCount(1), m_x(0), m_y(0), m_width(0), m_height(0) {
InitializeCriticalSection(&m_caretLocationLock);
}
AccessibleCaret::~AccessibleCaret() {
DeleteCriticalSection(&m_caretLocationLock);
// If the destroyed object is being referred by the singleton variable, the latter should be cleared.
// This case should never happen, but if it does, it's better not to leave a dangling pointer.
AccessibleCaret* self = this;
(void)GLOBAL_INSTANCE.compare_exchange_strong(self, nullptr);
}
// IUnknown methods
IFACEMETHODIMP_(ULONG) AccessibleCaret::AddRef() {
return InterlockedIncrement(&m_refCount);
}
IFACEMETHODIMP_(ULONG) AccessibleCaret::Release() {
ULONG count = InterlockedDecrement(&m_refCount);
if (count == 0) {
delete this;
}
return count;
}
IFACEMETHODIMP AccessibleCaret::QueryInterface(REFIID riid, void **ppInterface) {
if (ppInterface == nullptr) {
return E_POINTER;
}
if (riid == IID_IUnknown || riid == IID_IDispatch || riid == IID_IAccessible) {
*ppInterface = static_cast<IAccessible *>(this);
AddRef();
return S_OK;
}
*ppInterface = nullptr;
return E_NOINTERFACE;
}
// IDispatch methods
IFACEMETHODIMP AccessibleCaret::GetTypeInfoCount(UINT *pctinfo) {
return E_NOTIMPL;
}
IFACEMETHODIMP AccessibleCaret::GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo **pptinfo) {
return E_NOTIMPL;
}
IFACEMETHODIMP AccessibleCaret::GetIDsOfNames(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid,
DISPID *rgdispid) {
return E_NOTIMPL;
}
IFACEMETHODIMP AccessibleCaret::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags,
DISPPARAMS *pdispparams, VARIANT *pvarResult, EXCEPINFO *pexcepinfo,
UINT *puArgErr) {
return E_NOTIMPL;
}
// IAccessible methods
IFACEMETHODIMP AccessibleCaret::get_accParent(IDispatch **ppdispParent) {
if (ppdispParent == nullptr) {
return E_POINTER;
}
*ppdispParent = nullptr;
return S_FALSE;
}
IFACEMETHODIMP AccessibleCaret::get_accChildCount(long *pcountChildren) {
if (pcountChildren == nullptr) {
return E_POINTER;
}
*pcountChildren = 0;
return S_OK;
}
IFACEMETHODIMP AccessibleCaret::get_accChild(VARIANT varChild, IDispatch **ppdispChild) {
if (ppdispChild == nullptr) {
return E_POINTER;
}
*ppdispChild = nullptr;
return S_FALSE;
}
IFACEMETHODIMP AccessibleCaret::get_accName(VARIANT varChild, BSTR *pszName) {
if (pszName == nullptr) {
return E_POINTER;
}
*pszName = SysAllocString(L"Edit"); // Same name as the system caret.
return S_OK;
}
IFACEMETHODIMP AccessibleCaret::get_accValue(VARIANT varChild, BSTR *pszValue) {
return DISP_E_MEMBERNOTFOUND;
}
IFACEMETHODIMP AccessibleCaret::get_accDescription(VARIANT varChild, BSTR *pszDescription) {
return S_FALSE;
}
IFACEMETHODIMP AccessibleCaret::get_accRole(VARIANT varChild, VARIANT *pvarRole) {
if (pvarRole == nullptr) {
return E_POINTER;
}
pvarRole->vt = VT_I4;
pvarRole->lVal = ROLE_SYSTEM_CARET;
return S_OK;
}
IFACEMETHODIMP AccessibleCaret::get_accState(VARIANT varChild, VARIANT *pvarState) {
if (pvarState == nullptr) {
return E_POINTER;
}
pvarState->vt = VT_I4;
pvarState->lVal = 0; // The state without any flags, corresponds to "normal".
return S_OK;
}
IFACEMETHODIMP AccessibleCaret::get_accHelp(VARIANT varChild, BSTR *pszHelp) {
return S_FALSE;
}
IFACEMETHODIMP AccessibleCaret::get_accHelpTopic(BSTR *pszHelpFile, VARIANT varChild, long *pidTopic) {
return S_FALSE;
}
IFACEMETHODIMP AccessibleCaret::get_accKeyboardShortcut(VARIANT varChild, BSTR *pszKeyboardShortcut) {
return S_FALSE;
}
IFACEMETHODIMP AccessibleCaret::get_accFocus(VARIANT *pvarChild) {
if (pvarChild == nullptr) {
return E_POINTER;
}
pvarChild->vt = VT_EMPTY;
return S_OK;
}
IFACEMETHODIMP AccessibleCaret::get_accSelection(VARIANT *pvarChildren) {
return DISP_E_MEMBERNOTFOUND;
}
IFACEMETHODIMP AccessibleCaret::get_accDefaultAction(VARIANT varChild, BSTR *pszDefaultAction) {
return S_FALSE;
}
IFACEMETHODIMP AccessibleCaret::accSelect(long flagsSelect, VARIANT varChild) {
return DISP_E_MEMBERNOTFOUND;
}
IFACEMETHODIMP AccessibleCaret::accLocation(long *pxLeft, long *pyTop, long *pcxWidth, long *pcyHeight,
VARIANT varChild) {
if (pxLeft == nullptr || pyTop == nullptr || pcxWidth == nullptr || pcyHeight == nullptr) {
return E_POINTER;
}
EnterCriticalSection(&m_caretLocationLock);
*pxLeft = m_x;
*pyTop = m_y;
*pcxWidth = m_width;
*pcyHeight = m_height;
LeaveCriticalSection(&m_caretLocationLock);
return S_OK;
}
IFACEMETHODIMP AccessibleCaret::accNavigate(long navDir, VARIANT varStart, VARIANT *pvarEndUpAt) {
return DISP_E_MEMBERNOTFOUND;
}
IFACEMETHODIMP AccessibleCaret::accHitTest(long xLeft, long yTop, VARIANT *pvarChild) {
return DISP_E_MEMBERNOTFOUND;
}
IFACEMETHODIMP AccessibleCaret::accDoDefaultAction(VARIANT varChild) {
return DISP_E_MEMBERNOTFOUND;
}
IFACEMETHODIMP AccessibleCaret::put_accName(VARIANT varChild, BSTR szName) {
return E_NOTIMPL;
}
IFACEMETHODIMP AccessibleCaret::put_accValue(VARIANT varChild, BSTR szValue) {
return DISP_E_MEMBERNOTFOUND;
}
void AccessibleCaret::setLocation(long x, long y, long width, long height) {
EnterCriticalSection(&m_caretLocationLock);
m_x = x;
m_y = y;
m_width = width;
m_height = height;
LeaveCriticalSection(&m_caretLocationLock);
}
extern "C" {
/*
* Class: sun_awt_windows_AccessibleCaretLocationNotifier
* Method: updateNativeCaretLocation
* Signature: (JIIII)V
*/
JNIEXPORT void JNICALL Java_sun_awt_windows_AccessibleCaretLocationNotifier_updateNativeCaretLocation(
JNIEnv *env, jclass jClass,
jlong jHwnd, jint x, jint y, jint width, jint height) {
HWND hwnd = reinterpret_cast<HWND>(jHwnd);
bool caretIsNew = false;
AccessibleCaret* caret = AccessibleCaret::getOrCreateInstance(caretIsNew);
if (caretIsNew) {
// Notify with Object ID "OBJID_CARET".
// After that, an assistive tool will send a WM_GETOBJECT message with this ID,
// and we can return the caret instance.
NotifyWinEvent(EVENT_OBJECT_CREATE, hwnd, OBJID_CARET, CHILDID_SELF);
NotifyWinEvent(EVENT_OBJECT_SHOW, hwnd, OBJID_CARET, CHILDID_SELF);
}
caret->setLocation(x, y, width, height);
NotifyWinEvent(EVENT_OBJECT_LOCATIONCHANGE, hwnd, OBJID_CARET, CHILDID_SELF);
}
/*
* Class: sun_awt_windows_AccessibleCaretLocationNotifier
* Method: releaseNativeCaret
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_sun_awt_windows_AccessibleCaretLocationNotifier_releaseNativeCaret(
JNIEnv *env, jclass jClass, jlong jHwnd) {
if (AccessibleCaret::releaseInstanceIfPresent()) {
HWND hwnd = reinterpret_cast<HWND>(jHwnd);
NotifyWinEvent(EVENT_OBJECT_HIDE, hwnd, OBJID_CARET, CHILDID_SELF);
NotifyWinEvent(EVENT_OBJECT_DESTROY, hwnd, OBJID_CARET, CHILDID_SELF);
}
}
} /* extern "C" */

View File

@@ -0,0 +1,85 @@
/*
* Copyright (c) 2024, JetBrains s.r.o.. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
#ifndef ACCESSIBLECARET_H
#define ACCESSIBLECARET_H
#include <oleacc.h>
#include <windows.h> // ULONG, CRITICAL_SECTION
class AccessibleCaret : public IAccessible {
public:
static AccessibleCaret* getInstanceIfPresent() noexcept;
static AccessibleCaret* getOrCreateInstance();
static AccessibleCaret* getOrCreateInstance(bool& instanceIsNew);
static bool releaseInstanceIfPresent();
// IUnknown methods.
IFACEMETHODIMP_(ULONG) AddRef();
IFACEMETHODIMP_(ULONG) Release();
IFACEMETHODIMP QueryInterface(REFIID riid, void **ppInterface);
// IDispatch methods.
IFACEMETHODIMP GetTypeInfoCount(UINT *pctinfo);
IFACEMETHODIMP GetTypeInfo(UINT itinfo, LCID lcid, ITypeInfo **pptinfo);
IFACEMETHODIMP GetIDsOfNames(REFIID riid, __in_ecount(cNames)
OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid);
IFACEMETHODIMP Invoke(DISPID dispidMember, REFIID riid, LCID lcid,
WORD wFlags, DISPPARAMS *pdispparams, VARIANT *pvarResult,
EXCEPINFO *pexcepinfo, UINT *puArgErr);
// IAccessible methods
IFACEMETHODIMP get_accParent(IDispatch **ppdispParent);
IFACEMETHODIMP get_accChildCount(long *pcountChildren);
IFACEMETHODIMP get_accChild(VARIANT varChild, IDispatch **ppdispChild);
IFACEMETHODIMP get_accName(VARIANT varChild, BSTR *pszName);
IFACEMETHODIMP get_accValue(VARIANT varChild, BSTR *pszValue);
IFACEMETHODIMP get_accDescription(VARIANT varChild, BSTR *pszDescription);
IFACEMETHODIMP get_accRole(VARIANT varChild, VARIANT *pvarRole);
IFACEMETHODIMP get_accState(VARIANT varChild, VARIANT *pvarState);
IFACEMETHODIMP get_accHelp(VARIANT varChild, BSTR *pszHelp);
IFACEMETHODIMP get_accHelpTopic(BSTR *pszHelpFile, VARIANT varChild, long *pidTopic);
IFACEMETHODIMP get_accKeyboardShortcut(VARIANT varChild, BSTR *pszKeyboardShortcut);
IFACEMETHODIMP get_accFocus(VARIANT *pvarChild);
IFACEMETHODIMP get_accSelection(VARIANT *pvarChildren);
IFACEMETHODIMP get_accDefaultAction(VARIANT varChild, BSTR *pszDefaultAction);
IFACEMETHODIMP accSelect(long flagsSelect, VARIANT varChild);
IFACEMETHODIMP accLocation(long *pxLeft, long *pyTop, long *pcxWidth, long *pcyHeight, VARIANT varChild);
IFACEMETHODIMP accNavigate(long navDir, VARIANT varStart, VARIANT *pvarEndUpAt);
IFACEMETHODIMP accHitTest(long xLeft, long yTop, VARIANT *pvarChild);
IFACEMETHODIMP accDoDefaultAction(VARIANT varChild);
IFACEMETHODIMP put_accName(VARIANT varChild, BSTR szName);
IFACEMETHODIMP put_accValue(VARIANT varChild, BSTR szValue);
void setLocation(long x, long y, long width, long height);
private:
AccessibleCaret();
~AccessibleCaret();
ULONG m_refCount;
int m_x, m_y, m_width, m_height;
CRITICAL_SECTION m_caretLocationLock;
};
#endif //ACCESSIBLECARET_H

View File

@@ -48,6 +48,7 @@
#include "awt_Win32GraphicsDevice.h" #include "awt_Win32GraphicsDevice.h"
#include "Hashtable.h" #include "Hashtable.h"
#include "ComCtl32Util.h" #include "ComCtl32Util.h"
#include "AccessibleCaret.h"
#include "math.h" #include "math.h"
#include <Region.h> #include <Region.h>
@@ -2071,6 +2072,32 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
if (::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()))) { if (::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()))) {
mr = mrConsume; mr = mrConsume;
} }
break;
}
case WM_GETOBJECT:
{
// We've got a WM_GETOBJECT message which was likely sent by an assistive tool.
// Therefore, we can start generating native caret accessibility events.
DWORD objId = static_cast<DWORD>(static_cast<DWORD_PTR>(lParam));
if (objId == OBJID_CLIENT) {
JNIEnv *env = (JNIEnv *) JNU_GetEnv(jvm, JNI_VERSION_1_2);
if (env != nullptr) {
jclass cls = env->FindClass("sun/awt/windows/AccessibleCaretLocationNotifier");
if (cls != nullptr) {
jmethodID mid = env->GetStaticMethodID(cls, "startCaretNotifier", "(J)V");
if (mid != nullptr) {
env->CallStaticVoidMethod(cls, mid, reinterpret_cast<jlong>(GetHWnd()));
}
}
}
} else if (objId == OBJID_CARET) {
AccessibleCaret *caret = AccessibleCaret::getInstanceIfPresent();
if (caret != nullptr) {
retValue = LresultFromObject(IID_IAccessible, wParam, caret);
mr = mrConsume;
}
}
break;
} }
} }

View File

@@ -140,6 +140,7 @@ runtime/cds/appcds/methodHandles/MethodHandlesInvokersTest.java initial_run gene
runtime/cds/appcds/methodHandles/MethodHandlesCastFailureTest.java initial_run generic-all runtime/cds/appcds/methodHandles/MethodHandlesCastFailureTest.java initial_run generic-all
runtime/cds/appcds/methodHandles/MethodHandlesGeneralTest.java initial_run generic-all runtime/cds/appcds/methodHandles/MethodHandlesGeneralTest.java initial_run generic-all
runtime/cds/CheckDefaultArchiveFile.java JBR-4227 generic-all runtime/cds/CheckDefaultArchiveFile.java JBR-4227 generic-all
runtime/cds/DeterministicDump.java JBR-9215 macosx-26.0
runtime/cds/TestCDSVMCrash.java JBR-7316 windows-aarch64 runtime/cds/TestCDSVMCrash.java JBR-7316 windows-aarch64
runtime/jni/daemonDestroy/TestDaemonDestroy.java NOBUG windows-all # Expected to get exit value of [0], exit value is: [-1073741515] runtime/jni/daemonDestroy/TestDaemonDestroy.java NOBUG windows-all # Expected to get exit value of [0], exit value is: [-1073741515]
runtime/jni/terminatedThread/TestTerminatedThread.java 8317789 aix-ppc64 runtime/jni/terminatedThread/TestTerminatedThread.java 8317789 aix-ppc64
@@ -173,8 +174,14 @@ runtime/cds/appcds/methodHandles/MethodHandlesAsCollectorTest.java initial_run g
runtime/cds/SharedBaseAddress.java initial_run generic-all runtime/cds/SharedBaseAddress.java initial_run generic-all
runtime/cds/appcds/methodHandles/MethodHandlesSpreadArgumentsTest.java initial_run generic-all runtime/cds/appcds/methodHandles/MethodHandlesSpreadArgumentsTest.java initial_run generic-all
containers/docker/TestCPUAwareness.java JBR-9163 linux-6.14.0-1010-aws,linux-6.14.0-1011-aws,linux-6.14.0-1012-aws
containers/docker/TestCPUSets.java JBR-9164 linux-6.14.0-1010-aws,linux-6.14.0-1011-aws,linux-6.14.0-1012-aws
containers/docker/TestJcmd.java 8278102 linux-all containers/docker/TestJcmd.java 8278102 linux-all
containers/docker/TestJcmdWithSideCar.java JBR-9074 linux-6.14.0-1010-aws,linux-6.14.0-1011-aws,linux-6.14.0-1012-aws
containers/docker/TestJFREvents.java JBR-9165 linux-6.14.0-1010-aws,linux-6.14.0-1011-aws,linux-6.14.0-1012-aws
containers/docker/TestLimitsUpdating.java JBR-9166 linux-6.14.0-1010-aws,linux-6.14.0-1011-aws,linux-6.14.0-1012-aws
containers/docker/TestMemoryAwareness.java 8303470 linux-all containers/docker/TestMemoryAwareness.java 8303470 linux-all
containers/docker/TestMisc.java JBR-9167 linux-6.14.0-1010-aws,linux-6.14.0-1011-aws,linux-6.14.0-1012-aws
containers/docker/TestPids.java 8356277 linux-all containers/docker/TestPids.java 8356277 linux-all
############################################################################# #############################################################################
@@ -298,7 +305,7 @@ vmTestbase/nsk/jdwp/ThreadReference/ForceEarlyReturn/forceEarlyReturn001/forceEa
vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi001/Multi001.java JBR-8545,JBR-8546 windows-all vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi001/Multi001.java JBR-8545,JBR-8546 windows-all
vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi002/TestDescription.java JBR-8545 windows-all vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi002/TestDescription.java JBR-8545 windows-all
vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi003/TestDescription.java 8076494 windows-x64 vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi003/TestDescription.java 8076494,JBR-8743 windows-x64,windows-all
vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi004/TestDescription.java JBR-8744 windows-all vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi004/TestDescription.java JBR-8744 windows-all
vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi005/TestDescription.java 8076494,JBR-8927 windows-x64,windows-aarch64 vmTestbase/nsk/monitoring/ThreadMXBean/ThreadInfo/Multi/Multi005/TestDescription.java 8076494,JBR-8927 windows-x64,windows-aarch64

View File

@@ -427,7 +427,9 @@ jdk_editpad = \
jdk/editpad jdk/editpad
jbr_all = \ jbr_all = \
jb jb \
-jb/java/awt/vulkan \
-jb/java/awt/wayland/vulkan \
jdk_desktop = \ jdk_desktop = \
:jdk_desktop_part1 \ :jdk_desktop_part1 \
@@ -459,9 +461,6 @@ jdk_desktop_part3 = \
java/awt/datatransfer \ java/awt/datatransfer \
java/awt/Window java/awt/Window
jbr_all = \
jb
jbr_desktop_part11 = \ jbr_desktop_part11 = \
:jdk_desktop_part1 \ :jdk_desktop_part1 \
-:jdk_swing \ -:jdk_swing \
@@ -796,6 +795,7 @@ jdk_core_no_security = \
jdk_awt_wayland = \ jdk_awt_wayland = \
:jdk_awt \ :jdk_awt \
jb/java/awt/wayland \ jb/java/awt/wayland \
-jb/java/awt/wayland/vulkan \
jb/java/awt/Focus/ActivateAfterHide.java \ jb/java/awt/Focus/ActivateAfterHide.java \
-com/apple/eawt \ -com/apple/eawt \
-com/apple/laf \ -com/apple/laf \
@@ -1098,12 +1098,7 @@ jdk_awt_wayland = \
jdk_swing_wayland= \ jdk_swing_wayland= \
:jdk_swing \ :jdk_swing \
jb/javax/swing/Popup/WLPopupAsParent.java \ jb/javax/swing/wayland \
jb/javax/swing/Popup/WLPopupMinSize.java \
jb/javax/swing/Popup/WLPopupResize.java \
jb/javax/swing/Popup/WLPopupLocation.java \
jb/javax/swing/Popup/WLPopupMoves.java \
jb/javax/swing/Popup/WLPopupVisibility.java \
-com/sun/java/swing/plaf/gtk/TestBackSpaceAction.java \ -com/sun/java/swing/plaf/gtk/TestBackSpaceAction.java \
-com/sun/java/swing/plaf/gtk/TestFileChooserCtrlASelection.java \ -com/sun/java/swing/plaf/gtk/TestFileChooserCtrlASelection.java \
-com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java \ -com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java \
@@ -1374,3 +1369,19 @@ jdk_swing_wayland= \
jdk_desktop_wayland = \ jdk_desktop_wayland = \
:jdk_awt_wayland \ :jdk_awt_wayland \
:jdk_swing_wayland :jdk_swing_wayland
# Wayland+Vulkan tests to be executed with -Dawt.toolkit.name=WLToolkit -Dsun.java2d.vulkan=True
jdk_awt_wayland_vulkan = \
:jdk_awt_wayland \
jb/java/awt/wayland/vulkan
jdk_swing_wayland_vulkan = \
:jdk_swing_wayland
jdk_desktop_wayland_vulkan = \
:jdk_awt_wayland_vulkan \
:jdk_swing_wayland_vulkan
# Vulkan tests to be executed with -Dsun.java2d.vulkan=True
jdk_awt_vulkan = \
jb/java/awt/vulkan

View File

@@ -0,0 +1,83 @@
/*
* Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.image.BufferedImage;
import java.awt.image.VolatileImage;
import java.lang.ref.WeakReference;
import jtreg.SkippedException;
/*
* @test
* @key headful
* @bug 8364434
* @summary Check that garbage-collecting Color before accelerated painting is complete does not cause artifacts.
* @requires (os.family != "linux")
* @library /test/lib
* @run main/othervm -Xms16m -Xmx16m WeakColorTest
*/
public class WeakColorTest {
public static void main(String[] args) throws Exception {
BufferedImage bi = new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB); // This image is full-black.
VolatileImage image = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getDefaultScreenDevice().getDefaultConfiguration().createCompatibleVolatileImage(100, 100);
Graphics2D g = image.createGraphics();
// Create a new Color - we want it to be collected later.
g.setColor(new Color(255, 0, 0));
WeakReference<Color> color = new WeakReference<>(g.getColor());
g.fillRect(0, 0, 100, 100);
// Change color to prevent Graphics from keeping our Color alive.
g.setColor(Color.BLACK);
// Force Color to be GC'ed.
final int MAX_ITERATIONS = 1000, ARRAY_SIZE = 1000000;
WeakReference<Object[]> array = null;
for (int i = 0;; i++) {
System.gc();
if (color.get() == null) {
System.out.println("Color collected at: " + i);
break;
} else if (i >= MAX_ITERATIONS) {
throw new SkippedException("Color was not collected after " + MAX_ITERATIONS + " iterations");
}
Object[] a = new Object[ARRAY_SIZE];
a[0] = array;
array = new WeakReference<>(a);
}
// Do a blit. If it succeeds, the resulting image will be full-black.
g.drawImage(bi, 0, 0, null);
g.dispose();
// We expect black. If it's red, then the blit must have failed.
int actualColor = image.getSnapshot().getRGB(50, 50);
if ((actualColor & 0xFFFFFF) != 0) throw new Error("Wrong color: 0x" + Integer.toHexString(actualColor));
}
}

View File

@@ -35,6 +35,7 @@ public class DetectingOSThemeTest {
private static final String LIGHT_THEME_NAME = "Light"; private static final String LIGHT_THEME_NAME = "Light";
private static final String DARK_THEME_NAME = "Dark"; private static final String DARK_THEME_NAME = "Dark";
private static final String UNDEFINED_THEME_NAME = "Undefined"; private static final String UNDEFINED_THEME_NAME = "Undefined";
private static boolean isKDE = false;
private static String currentTheme() { private static String currentTheme() {
Boolean val = (Boolean) Toolkit.getDefaultToolkit().getDesktopProperty("awt.os.theme.isDark"); Boolean val = (Boolean) Toolkit.getDefaultToolkit().getDesktopProperty("awt.os.theme.isDark");
@@ -44,8 +45,14 @@ public class DetectingOSThemeTest {
return (val) ? DARK_THEME_NAME : LIGHT_THEME_NAME; return (val) ? DARK_THEME_NAME : LIGHT_THEME_NAME;
} }
private static void setOsDarkTheme(String val) { private static void setOsDarkTheme(String val) throws Exception {
try { if (isKDE) {
if (val.equals(DARK_THEME_NAME)) {
Runtime.getRuntime().exec("plasma-apply-colorscheme BreezeDark");
} else {
Runtime.getRuntime().exec("plasma-apply-colorscheme BreezeLight");
}
} else {
if (val.equals(DARK_THEME_NAME)) { if (val.equals(DARK_THEME_NAME)) {
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'"); Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita-dark'");
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'"); Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark'");
@@ -53,14 +60,13 @@ public class DetectingOSThemeTest {
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'"); Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface gtk-theme 'Adwaita'");
Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'default'"); Runtime.getRuntime().exec("gsettings set org.gnome.desktop.interface color-scheme 'default'");
} }
} catch (IOException e) {
throw new RuntimeException(e);
} }
} }
private static String currentTheme = null; private static String currentTheme = null;
public static void main(String[] args) throws Exception { public static void main(String[] args) throws Exception {
isKDE = "KDE".equals(System.getenv("XDG_CURRENT_DESKTOP"));
currentTheme = currentTheme(); currentTheme = currentTheme();
if (currentTheme.equals(UNDEFINED_THEME_NAME)) { if (currentTheme.equals(UNDEFINED_THEME_NAME)) {
throw new RuntimeException("Test Failed! Cannot detect current OS theme"); throw new RuntimeException("Test Failed! Cannot detect current OS theme");

View File

@@ -27,9 +27,12 @@
* @run junit/othervm * @run junit/othervm
* -Djava.nio.file.spi.DefaultFileSystemProvider=testNio.ManglingFileSystemProvider * -Djava.nio.file.spi.DefaultFileSystemProvider=testNio.ManglingFileSystemProvider
* -Djbr.java.io.use.nio=true * -Djbr.java.io.use.nio=true
* --add-opens jdk.unsupported/com.sun.nio.file=ALL-UNNAMED
* --add-opens java.base/java.io=ALL-UNNAMED
* RandomAccessFileTest * RandomAccessFileTest
*/ */
import com.sun.nio.file.ExtendedOpenOption;
import org.junit.After; import org.junit.After;
import org.junit.Assume; import org.junit.Assume;
import org.junit.Before; import org.junit.Before;
@@ -42,10 +45,15 @@ import testNio.ManglingFileSystemProvider;
import java.io.EOFException; import java.io.EOFException;
import java.io.File; import java.io.File;
import java.io.RandomAccessFile; import java.io.RandomAccessFile;
import java.lang.reflect.Field;
import java.nio.channels.FileChannel; import java.nio.channels.FileChannel;
import java.nio.channels.FileLock; import java.nio.channels.FileLock;
import java.nio.file.FileSystems;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Objects; import java.util.Objects;
import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertEquals;
@@ -268,4 +276,21 @@ public class RandomAccessFileTest {
assertFalse(file.delete()); assertFalse(file.delete());
} }
} }
/** JBR-9260 */
@Test
public void testNoShareDelete() throws Exception {
// This code should throw no exceptions.
File file = temporaryFolder.newFile();
FileSystems.getDefault().provider().newFileChannel(file.toPath(), EnumSet.of(ExtendedOpenOption.NOSHARE_DELETE)).close();
{
Class<?> cls = RandomAccessFileTest.class.getClassLoader().loadClass("java.io.JbExtendedOpenOptions");
Field field = cls.getDeclaredField("NOSHARE_DELETE");
field.setAccessible(true);
OpenOption option = (OpenOption) field.get(null);
FileSystems.getDefault().provider().newFileChannel(file.toPath(), Collections.singleton(option)).close();
}
}
} }

View File

@@ -0,0 +1,65 @@
/*
* Copyright 2025 JetBrains s.r.o.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import jdk.test.lib.process.OutputAnalyzer;
import jdk.test.lib.process.ProcessTools;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
* @test
* @summary Verifies that a small window does not generate GTK warnings in Wayland
* @requires os.family == "linux"
* @key headful
* @library /test/lib
* @run main WLFrameMinSize
*/
public class WLFrameMinSize {
private static JFrame frame;
public static void main(String[] args) throws Exception {
if (args.length > 0 && args[0].equals("--test")) {
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
frame = new JFrame("WLFrameMinSize");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().add(new JLabel("a"));
frame.pack();
frame.setVisible(true);
}
});
Thread.sleep(2000);
javax.swing.SwingUtilities.invokeAndWait(new Runnable() {
public void run() {
frame.dispose();
}
});
} else {
ProcessBuilder pb = ProcessTools.createTestJavaProcessBuilder(
WLFrameMinSize.class.getName(),
"--test");
OutputAnalyzer output = new OutputAnalyzer(pb.start());
output.shouldNotContain("Gtk-WARNING");
}
}
}

View File

@@ -1,6 +1,5 @@
/* /*
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved. * Copyright 2024 JetBrains s.r.o.
* Copyright (c) 2024, JetBrains s.r.o.. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
* *
* This code is free software; you can redistribute it and/or modify it * This code is free software; you can redistribute it and/or modify it

View File

@@ -21,30 +21,6 @@
* questions. * questions.
*/ */
/*
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2024, JetBrains s.r.o.. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import javax.swing.JFrame; import javax.swing.JFrame;
import javax.swing.JLabel; import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;

View File

@@ -0,0 +1,112 @@
/*
* Copyright 2025 JetBrains s.r.o.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
import javax.swing.JFrame;
import javax.swing.JMenuBar;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import java.awt.GridLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.util.concurrent.CompletableFuture;
/**
* @test
* @summary Verifies popups and tooltips are disposed of when switching to a different window
* @requires os.family == "linux"
* @key headful
* @run main/manual WLUngrab
*/
public class WLUngrab {
static final CompletableFuture<RuntimeException> swingError = new CompletableFuture<>();
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(WLUngrab::showUI);
swingError.get();
}
private static void showUI() {
JFrame frame = new JFrame("Ungrab test");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JMenuBar menuBar = new JMenuBar();
JMenu menu1 = new JMenu("Test menu");
menu1.add(new JMenuItem("item 1"));
menu1.add(new JMenuItem("item 2"));
menu1.addSeparator();
JMenu submenu = new JMenu("submenu...");
submenu.add(new JMenuItem("subitem1"));
submenu.add(new JMenuItem("subitem2"));
submenu.add(new JMenuItem("subitem3"));
menu1.add(submenu);
menuBar.add(menu1);
JMenu menu2 = new JMenu("Another");
menu2.add(new JMenuItem("test"));
menuBar.add(menu2);
frame.setJMenuBar(menuBar);
JLabel label = new JLabel("Right-click here for a popup-menu.");
final JPopupMenu popup = new JPopupMenu();
popup.add(new JMenuItem("popup menu item"));
popup.add(new JMenuItem("popup menu item 2"));
popup.add(new JMenuItem("popup menu item 3"));
label.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.isPopupTrigger()) {
popup.show(e.getComponent(),
e.getX(), e.getY());
}
}
});
JPanel content = new JPanel();
var layout = new GridLayout(3, 2, 10, 10);
content.setLayout(layout);
content.add(label);
JButton button = new JButton("Hover here for a tooltip");
button.setToolTipText("<html><h1>TOOLTIP</h2><p>tooltip text</p></html>");
content.add(button);
JButton passButton = new JButton("Pass");
passButton.addActionListener(e -> {swingError.complete(null);});
JButton failButton = new JButton("Fail");
failButton.addActionListener(e -> {swingError.completeExceptionally(new RuntimeException("The tester has pressed FAILED"));});
content.add(failButton);
content.add(passButton);
content.add(new JLabel("<html><h1>INSTRUCTIONS</h1>" +
"<p>Make a tooltip, popup, or pulldown menu appear.</p>" +
"<p>Switch to a different application window.</p>" +
"<p>Switch back to this window.</p>" +
"<p>Press Pass iff the tooltip/popup/menu was closed upon switching back.</p>" +
"<p>Otherwise press Fail.</p></html>"));
frame.setContentPane(content);
frame.pack();
frame.setVisible(true);
}
}

View File

@@ -22,13 +22,14 @@ java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersInKeyEvent.java 8157147,JBR-
java/awt/Paint/PaintNativeOnUpdate.java JBR-5397,JBR-7415 macosx-all,windows-x64 java/awt/Paint/PaintNativeOnUpdate.java JBR-5397,JBR-7415 macosx-all,windows-x64
java/awt/PopupMenu/PopupMenuLocation.java JBR-5397,JBR-7375 macosx-all,windows-x64 java/awt/PopupMenu/PopupMenuLocation.java JBR-5397,JBR-7375 macosx-all,windows-x64
java/awt/Robot/CheckCommonColors/CheckCommonColors.java JBR-5397,JBR-6092 macosx-all,windows-x64 java/awt/Robot/CheckCommonColors/CheckCommonColors.java JBR-5397,JBR-6092 macosx-all,windows-x64
java/awt/Robot/NonEmptyErrorStream.java JBR-5510,JBR-7375 linux-5.18.2-arch1-1,windows-x64 java/awt/Robot/NonEmptyErrorStream.java JBR-7375 windows-x64
java/awt/Robot/RobotWheelTest/RobotWheelTest.java JBR-5397,JBR-7377 macosx-all,windows-x64 java/awt/Robot/RobotWheelTest/RobotWheelTest.java JBR-5397,JBR-7377 macosx-all,windows-x64
java/awt/Scrollbar/ScrollbarMouseWheelTest/ScrollbarMouseWheelTest.java JBR-5397,JBR-7531 macosx-all,windows-x64 java/awt/Scrollbar/ScrollbarMouseWheelTest/ScrollbarMouseWheelTest.java JBR-5397,JBR-7531 macosx-all,windows-x64
java/awt/ScrollPane/ScrollPaneLimitation.java JBR-8579 windows-x64 java/awt/ScrollPane/ScrollPaneLimitation.java JBR-8579 windows-x64
java/awt/ScrollPane/ScrollPaneRemoveAdd.java JBR-8580 windows-x64 java/awt/ScrollPane/ScrollPaneRemoveAdd.java JBR-8580 windows-x64
java/awt/TextArea/Mixing/TextAreaMixing.java JBR-8581 windows-x64 java/awt/TextArea/Mixing/TextAreaMixing.java JBR-8581 windows-x64
java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java JBR-7822,JBR-8582 linux-all,windows-x64 java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java JBR-7822,JBR-8582 linux-all,windows-x64
java/awt/TextField/GetTextTest/GetTextTest.java JBR-9253 windows-x64
java/awt/TextField/SelectionInvisibleTest/SelectionInvisibleTest.java JBR-6748,JBR-8583 linux-all,windows-x64 java/awt/TextField/SelectionInvisibleTest/SelectionInvisibleTest.java JBR-6748,JBR-8583 linux-all,windows-x64
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5397,JBR-7378 macosx-all,windows-x64 java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5397,JBR-7378 macosx-all,windows-x64
java/awt/Window/GrabSequence/GrabSequence.java 6848409,JBR-8584 macosx-all,linux-all,windows-x64 java/awt/Window/GrabSequence/GrabSequence.java 6848409,JBR-8584 macosx-all,linux-all,windows-x64
@@ -38,7 +39,8 @@ java/beans/PropertyEditor/6380849/TestPropertyEditor.java JBR-9130 windows-x64
javax/accessibility/JFileChooserAccessibleDescriptionTest.java JBR-5397,JBR-7379 macosx-all,windows-x64 javax/accessibility/JFileChooserAccessibleDescriptionTest.java JBR-5397,JBR-7379 macosx-all,windows-x64
javax/accessibility/SlowPanelIteration/SlowPanelIteration.java JBR-870,JBR-5397 windows-x64,linux-x64,macosx-all javax/accessibility/SlowPanelIteration/SlowPanelIteration.java JBR-870,JBR-5397 windows-x64,linux-x64,macosx-all
javax/swing/event/FocusEventCauseTest.java JBR-7381 windows-x64 javax/swing/event/FocusEventCauseTest.java JBR-7381 windows-x64
javax/swing/JButton/8151303/PressedIconTest.java JBR-5210,JBR-5510,JBR-5397 windows-all,linux-all,macosx-all javax/swing/JButton/4796987/bug4796987.java JBR-9345 windows-x64
javax/swing/JButton/8151303/PressedIconTest.java JBR-5210,JBR-5397 windows-all,linux-all,macosx-all
javax/swing/JComboBox/4743225/bug4743225.java JBR-5210,JBR-5397 windows-all,macosx-all javax/swing/JComboBox/4743225/bug4743225.java JBR-5210,JBR-5397 windows-all,macosx-all
javax/swing/JComboBox/6559152/bug6559152.java JBR-5397,JBR-7382 macosx-all,windows-x64 javax/swing/JComboBox/6559152/bug6559152.java JBR-5397,JBR-7382 macosx-all,windows-x64
javax/swing/JComboBox/8041909/ActionListenerExceptionTest.java JBR-5210 windows-all javax/swing/JComboBox/8041909/ActionListenerExceptionTest.java JBR-5210 windows-all
@@ -61,10 +63,15 @@ javax/swing/JTree/4518432/JTreeNodeCopyPasteTest.java JBR-5397,JBR-8335 macosx-a
javax/swing/text/StyledEditorKit/4506788/bug4506788.java JBR-7386 windows-x64 javax/swing/text/StyledEditorKit/4506788/bug4506788.java JBR-7386 windows-x64
jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java JBR-9083 windows-x64 jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java JBR-9083 windows-x64
jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java JBR-9159 windows-x64
jb/java/awt/CustomTitleBar/HitTestNonClientArea.java JBR-8861 windows-x64 jb/java/awt/CustomTitleBar/HitTestNonClientArea.java JBR-8861 windows-x64
jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java JBR-9161 windows-x64
jb/java/awt/CustomTitleBar/MaximizeWindowTest.java JBR-9160 windows-x64
jb/java/awt/Desktop/AboutHandlerTest.java nobug macosx-all,linux-all,windows-all jb/java/awt/Desktop/AboutHandlerTest.java nobug macosx-all,linux-all,windows-all
jb/java/awt/Focus/NewFrameAfterDialogTest.java JBR-7387 windows-x64
jb/java/awt/Focus/ChainOfPopupsFocusTest.java JBR-8407 windows-x64 jb/java/awt/Focus/ChainOfPopupsFocusTest.java JBR-8407 windows-x64
jb/java/awt/Focus/FrameAfterPopup.java JBR-9161 windows-x64
jb/java/awt/Focus/MaximizedCustomDecorationsTest.java JBR-9346 windows-x64
jb/java/awt/Focus/NewFrameAfterDialogTest.java JBR-7387 windows-x64
# VoiceOver on MacOS # VoiceOver on MacOS
java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-5397 macosx-all java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-5397 macosx-all
@@ -92,9 +99,12 @@ java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5397,JBR-5802 maco
java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java JBR-6948 windows-x64 java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java JBR-6948 windows-x64
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5397 macosx-all java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5397 macosx-all
javax/swing/JFileChooser/4400728/JFileChooserDefaultDirectoryTest.java JBR-8855 windows-all
javax/swing/JFileChooser/4524490/bug4524490.java JBR-5397,JBR-5846 macosx-all,windows-all javax/swing/JFileChooser/4524490/bug4524490.java JBR-5397,JBR-5846 macosx-all,windows-all
javax/swing/JFileChooser/6520101/bug6520101.java JBR-5397,JBR-7413 macosx-all,windows-x64 javax/swing/JFileChooser/6520101/bug6520101.java JBR-5397,JBR-7413 macosx-all,windows-x64
javax/swing/JFileChooser/8002077/bug8002077.java JBR-4880,JBR-5397 windows-all,macosx-all javax/swing/JFileChooser/8002077/bug8002077.java JBR-4880,JBR-5397 windows-all,macosx-all
javax/swing/JFileChooser/8010718/bug8010718.java JBR-8855 windows-all
javax/swing/JFileChooser/8013442/Test8013442.java JBR-8534 windows-x64
javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-4949,JBR-5397 linux-all,windows-all,macosx-all javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-4949,JBR-5397 linux-all,windows-all,macosx-all
javax/swing/JLabel/6596966/bug6596966.java 8197552,JBR-5397 windows-all,macosx-all javax/swing/JLabel/6596966/bug6596966.java 8197552,JBR-5397 windows-all,macosx-all
javax/swing/JList/4618767/JListSelectedElementTest.java JBR-4955,JBR-5397 windows-all,macosx-all javax/swing/JList/4618767/JListSelectedElementTest.java JBR-4955,JBR-5397 windows-all,macosx-all
@@ -123,10 +133,11 @@ javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java JBR-5397 macosx-all
javax/swing/plaf/aqua/JInternalFrameBorderTest.java JBR-5397 macosx-all javax/swing/plaf/aqua/JInternalFrameBorderTest.java JBR-5397 macosx-all
javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184,JBR-6727,JBR-5397 windows-all,linux-all,macosx-all javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184,JBR-6727,JBR-5397 windows-all,linux-all,macosx-all
javax/swing/plaf/basic/BasicRootPaneUI/HiddenDefaultButtonTest.java JBR-7310 windows-x64 javax/swing/plaf/basic/BasicRootPaneUI/HiddenDefaultButtonTest.java JBR-7310 windows-x64
javax/swing/plaf/basic/Test6984643.java JBR-8855 windows-all
javax/swing/plaf/synth/7158712/bug7158712.java JBR-125,8322653,JBR-5397 linux-all,windows-all,macosx-all javax/swing/plaf/synth/7158712/bug7158712.java JBR-125,8322653,JBR-5397 linux-all,windows-all,macosx-all
javax/swing/Popup/TaskbarPositionTest.java 8310689,JBR-5397 windows-all,macosx-all javax/swing/Popup/TaskbarPositionTest.java 8310689,JBR-5397 windows-all,macosx-all
javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-5397,JBR-6465 macosx-all,windows-all,linux-aarch64 javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-5397,JBR-6465 macosx-all,windows-all,linux-aarch64
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5397,8212240,JBR-5510,JBR-6285,8253184 macosx-all,linux-all,windows-all sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5397,8212240,JBR-6285,8253184 macosx-all,linux-all,windows-all
sanity/client/SwingSet/src/ToolTipDemoTest.java JBR-5397 macosx-all sanity/client/SwingSet/src/ToolTipDemoTest.java JBR-5397 macosx-all
sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java JBR-5397 macosx-all sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java JBR-5397 macosx-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5397 macosx-all sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5397 macosx-all
@@ -148,7 +159,7 @@ javax/swing/JComboBox/8182031/ComboPopupTest.java 8253184,JBR-5397 windows-all,m
javax/swing/JComboBox/JComboBoxPopupMenuEventTest.java JBR-5397 macosx-all javax/swing/JComboBox/JComboBoxPopupMenuEventTest.java JBR-5397 macosx-all
javax/swing/JComboBox/JComboBoxWithTitledBorderTest.java JBR-5397 macosx-all javax/swing/JComboBox/JComboBoxWithTitledBorderTest.java JBR-5397 macosx-all
javax/swing/JEditorPane/6917744/bug6917744.java 8213124,JBR-7497 macosx-all,windows-all javax/swing/JEditorPane/6917744/bug6917744.java 8213124,JBR-7497 macosx-all,windows-all
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510,JBR-6283,JBR-5397 windows-all,linux-5.18.2-arch1-1,macosx-all javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-6283,JBR-5397 windows-all,macosx-all
javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-5397 macosx-all javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-5397 macosx-all
# Windows (ZoomText, NVDA, or JAWS is enabled during testing) # Windows (ZoomText, NVDA, or JAWS is enabled during testing)
@@ -158,8 +169,8 @@ java/awt/Choice/ChoiceFreezeTest.java JBR-6952 windows-x64
java/awt/Choice/ChoiceMouseEventOutbounds.java TBD windows-x64 java/awt/Choice/ChoiceMouseEventOutbounds.java TBD windows-x64
java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857,JBR-5505 macosx-all,windows-all java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857,JBR-5505 macosx-all,windows-all
java/awt/Choice/NonFocusablePopupMenuTest.java JBR-7961 windows-x64 java/awt/Choice/NonFocusablePopupMenuTest.java JBR-7961 windows-x64
java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java JBR-5510,8310487,JBR-6950 linux-5.18.2-arch1-1,linux-all,windows-x64 java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java 8310487,JBR-6950 linux-all,windows-x64
java/awt/Choice/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5510,JBR-5905 linux-5.18.2-arch1-1,linux-all,windows-x64 java/awt/Choice/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5905 linux-all,windows-x64
java/awt/ColorClass/AlphaColorTest.java JBR-7253 windows-x64 java/awt/ColorClass/AlphaColorTest.java JBR-7253 windows-x64
java/awt/Component/NativeInLightShow/NativeInLightShow.java JBR-7715 windows-x64 java/awt/Component/NativeInLightShow/NativeInLightShow.java JBR-7715 windows-x64
java/awt/Component/RepaintTest.java JBR-7754 windows-x64 java/awt/Component/RepaintTest.java JBR-7754 windows-x64
@@ -181,10 +192,11 @@ java/awt/hidpi/DrawOnFrameGraphicsTest.java JBR-5505 windows-all
java/awt/im/4959409/bug4959409.java JBR-5505 windows-all java/awt/im/4959409/bug4959409.java JBR-5505 windows-all
java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-5505 windows-all java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-5505 windows-all
java/awt/image/VolatileImage/DrawBufImgOp.java java/awt/image/VolatileImage/DrawBufImgOp.java
java/awt/LightweightComponent/MultipleAddNotifyTest/MultipleAddNotifyTest.java JBR-9252 windows-all
java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java JBR-5505 windows-all java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java JBR-5505 windows-all
java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711,JBR-5505 windows-all,linux-all java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711,JBR-5505 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510,JBR-5505 macosx-all,linux-5.18.2-arch1-1,windows-all java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5505 macosx-all,windows-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510,JBR-5505 linux-5.18.2-arch1-1,windows-all java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5505 windows-all
java/awt/Mixing/MixingOnDialog.java JBR-5505 windows-all java/awt/Mixing/MixingOnDialog.java JBR-5505 windows-all
java/awt/Mixing/MixingOnShrinkingHWButton.java JBR-5505 windows-all java/awt/Mixing/MixingOnShrinkingHWButton.java JBR-5505 windows-all
java/awt/Mixing/OpaqueTest.java JBR-5707,JBR-5505 linux-all,windows-all java/awt/Mixing/OpaqueTest.java JBR-5707,JBR-5505 linux-all,windows-all

View File

@@ -1,32 +1,29 @@
java/awt/Choice/GrabLockTest/GrabLockTest.java.GrabLockTest JBR-6510 macosx-all
java/awt/dnd/ImageDecoratedDnDNegative/ImageDecoratedDnDNegative.java JBR-6510 macosx-all
java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-6510 macosx-all
java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.java JBR-6510 macosx-all
java/awt/FullScreen/SetFullScreenTest.java JBR-8184 macosx-aarch64 java/awt/FullScreen/SetFullScreenTest.java JBR-8184 macosx-aarch64
java/awt/Graphics2D/DrawPrimitivesTest.java JBR-5620 macosx-aarch64 java/awt/Graphics2D/DrawPrimitivesTest.java JBR-5620 macosx-aarch64
java/awt/image/multiresolution/MultiresolutionIconTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java JBR-6510 macosx-all
java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java JBR-6510 macosx-all
java/awt/Paint/PaintNativeOnUpdate.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 java/awt/Paint/ExposeOnEDT.java JBR-6510 macosx-all
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 java/awt/print/PaintSetEnabledDeadlock/PaintSetEnabledDeadlock.java JBR-6510 macosx-all
java/awt/Robot/InfiniteLoopException.java JBR-6510 macosx-all
java/awt/Robot/ScreenCaptureRobotTest.java#id0 JBR-8984 macosx-all java/awt/Robot/ScreenCaptureRobotTest.java#id0 JBR-8984 macosx-all
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-7146 macosx-all java/awt/TextArea/TextAreaScrolling/TextAreaScrolling.java JBR-6510 macosx-all
java/awt/Window/FullWindowContentTest/FullWindowContentRenderTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-8983 macosx-all
java/awt/Window/FullWindowContentTest/FullWindowContentTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-7312 macosx-all java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-7312 macosx-all
java/awt/Window/ShapedAndTranslucentWindows/TranslucentChoice.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 javax/swing/JComboBox/4515752/DefaultButtonTest.java JBR-6510 macosx-all
javax/swing/JButton/8151303/PressedIconTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 javax/swing/JComboBox/EditableComboBoxPopupPos.java JBR-6510 macosx-all
javax/swing/JComponent/7154030/bug7154030.java JBR-7713 macosx-aarch64 javax/swing/JComponent/7154030/bug7154030.java JBR-7713 macosx-aarch64
javax/swing/JDialog/Transparency/TransparencyTest.java JBR-7554 macosx-aarch64 javax/swing/JDialog/Transparency/TransparencyTest.java JBR-7554 macosx-aarch64
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 javax/swing/JFileChooser/7199708/bug7199708.java JBR-6510 macosx-all
javax/swing/JInternalFrame/DockIconRepaint/DockIconRepaint.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 javax/swing/JFileChooser/8021253/bug8021253.java JBR-6510 macosx-all
javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 javax/swing/JList/4618767/JListSelectedElementTest.java JBR-6510 macosx-all
javax/swing/JSplitPane/4164779/JSplitPaneKeyboardNavigationTest.java JBR-6510 macosx-all
javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-7247 macosx-all javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-7247 macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucent.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6 javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentGradient.java JBR-8217 macosx-15.6,macosx-15.6.1
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentGradient.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentPerPixelTranslucentGradient.java JBR-8327 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id1 JBR-7146 macosx-all
javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-6464 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
javax/swing/SwingGraphics/TranslateTest.java JBR-7510 macosx-aarch64 javax/swing/SwingGraphics/TranslateTest.java JBR-7510 macosx-aarch64
javax/swing/system/6799345/TestShutdown.java JBR-6881 macosx-12.7.4
jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java JBR-6998 macosx-all jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java JBR-6998 macosx-all
jb/java/awt/Window/MacNativeTransparentTitlebarWithCustomHeight.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
sun/java2d/SunGraphics2D/DrawImageBilinear.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6

View File

@@ -122,18 +122,19 @@ java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-7339 linux-all,windows-
java/awt/Focus/8282640/ScrollPaneFocusBugTest.java JBR-7340 linux-all java/awt/Focus/8282640/ScrollPaneFocusBugTest.java JBR-7340 linux-all
java/awt/Focus/ActivateFocusTest.java JBR-7888 linux-all java/awt/Focus/ActivateFocusTest.java JBR-7888 linux-all
java/awt/Focus/ChoiceFocus/ChoiceFocus.java JBR-7341 linux-all java/awt/Focus/ChoiceFocus/ChoiceFocus.java JBR-7341 linux-all
java/awt/Focus/ModalDialogInFocusEventTest.java JBR-7818 linux-all
java/awt/Focus/RollbackFocusFromAnotherWindowTest/RollbackFocusFromAnotherWindowTest.java JBR-8233 linux-x64 java/awt/Focus/RollbackFocusFromAnotherWindowTest/RollbackFocusFromAnotherWindowTest.java JBR-8233 linux-x64
java/awt/Graphics2D/TextPerf.java JBR-8541 linux-all,windows-all java/awt/Graphics2D/TextPerf.java JBR-8541 linux-all,windows-all
java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogTest/EnqueueWithDialogTest.java JBR-5210,JBR-7077 windows-all,linux-all java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogTest/EnqueueWithDialogTest.java JBR-5210,JBR-7077 windows-all,linux-all
java/awt/List/PageUPSelectsItemsTest.java JBR-8281 linux-all java/awt/List/PageUPSelectsItemsTest.java JBR-8281 linux-all
java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-all java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-all
java/awt/MenuItem/EnableTest.java NOBUG windows-all timeout java/awt/MenuItem/EnableTest.java NOBUG windows-all timeout
java/awt/Modal/MultipleDialogs/MixOfModalAndNonModalDialogs.java JBR-9317 linux-6.15.8-100.fc41.x86_64
java/awt/Mouse/EnterExitEvents/DragWindowTest.java 8253184,JBR-5710 windows-all,linux-all java/awt/Mouse/EnterExitEvents/DragWindowTest.java 8253184,JBR-5710 windows-all,linux-all
java/awt/Robot/NonEmptyErrorStream.java JBR-6275,JBR-5510 macosx-all,linux-5.18.2-arch1-1 java/awt/Robot/NonEmptyErrorStream.java JBR-6275 macosx-all
java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java JBR-7779 linux-all java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java JBR-7779 linux-all
javax/swing/event/FocusEventCauseTest.java JBR-8811 windows-all javax/swing/event/FocusEventCauseTest.java JBR-8811 windows-all
javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-9273 linux-6.15.8-100.fc41.x86_64
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-6697 linux-aarch64 javax/swing/JEditorPane/TestBrowserBGColor.java JBR-6697 linux-aarch64
javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-6485 linux-all javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-6485 linux-all
javax/swing/plaf/nimbus/8041642/bug8041642.java JBR-6698 linux-all javax/swing/plaf/nimbus/8041642/bug8041642.java JBR-6698 linux-all
@@ -141,3 +142,5 @@ javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR
jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-2651 generic-all jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-2651 generic-all
jb/java/awt/Window/UndecoratedDialogInTransientsChain.java JBR-6924 windows-all jb/java/awt/Window/UndecoratedDialogInTransientsChain.java JBR-6924 windows-all
sun/java2d/Disposer/TestDisposerRace.java JBR-9272 macosx-14.7.7

View File

@@ -9,7 +9,7 @@ java/awt/grab/SystemMenuTest.java JBR-8829 windows-x64
java/awt/Multiscreen/MultiScreenInsetsTest/MultiScreenInsetsTest.java JBR-7782 linux-x64 java/awt/Multiscreen/MultiScreenInsetsTest/MultiScreenInsetsTest.java JBR-7782 linux-x64
java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-6058,JBR-6664 windows-all,linux-all,macosx-all java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-6058,JBR-6664 windows-all,linux-all,macosx-all
java/awt/Multiscreen/WindowGCChangeTest/WindowGCChangeTest.java JBR-5531 macosx-all,linux-all java/awt/Multiscreen/WindowGCChangeTest/WindowGCChangeTest.java JBR-5531 macosx-all,linux-all
java/awt/Focus/6981400/Test1.java 8029675,JBR-5510,JBR-6702 windows-all,macosx-all,linux-5.18.2-arch1-1,linux-all java/awt/Focus/6981400/Test1.java 8029675,JBR-6702 windows-all,macosx-all,linux-all
java/awt/Focus/NullActiveWindowOnFocusLost/NullActiveWindowOnFocusLost.java JBR-8896 windows-x64 java/awt/Focus/NullActiveWindowOnFocusLost/NullActiveWindowOnFocusLost.java JBR-8896 windows-x64
java/awt/Focus/TemporaryLostComponentDeadlock.java JBR-5734 windows-all java/awt/Focus/TemporaryLostComponentDeadlock.java JBR-5734 windows-all
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-5117,JBR-6509 linux-all,generic-all java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-5117,JBR-6509 linux-all,generic-all
@@ -26,8 +26,8 @@ java/awt/datatransfer/Clipboard/GetContentsInterruptedTest.java JBR-5086 linux-5
java/awt/KeyboardFocusmanager/TypeAhead/MenuItemActivatedTest/MenuItemActivatedTest.java JBR-8905 windows-x64 java/awt/KeyboardFocusmanager/TypeAhead/MenuItemActivatedTest/MenuItemActivatedTest.java JBR-8905 windows-x64
java/awt/MenuShortcut/ActionCommandTest.java JBR-8822 windows-x64 java/awt/MenuShortcut/ActionCommandTest.java JBR-8822 windows-x64
java/awt/Robot/Delay/InterruptOfDelay.java 8265986,JBR-8148 macosx-all,linux-x64 java/awt/Robot/Delay/InterruptOfDelay.java 8265986,JBR-8148 macosx-all,linux-x64
java/awt/Robot/MouseLocationOnScreen/MouseLocationOnScreen.java JBR-5390 macosx-all,linux-all java/awt/Robot/MouseLocationOnScreen/MouseLocationOnScreen.java JBR-5390,JBR-9209 macosx-all,linux-all,linux-6.15.8-100.fc41.x86_64
java/awt/Robot/NonEmptyErrorStream.java JBR-5442,JBR-5510 macosx-15.4,macosx-15.5,linux-5.18.2-arch1-1 java/awt/Robot/NonEmptyErrorStream.java JBR-5442 macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
java/awt/Robot/RobotMoveMultiscreen.java JBR-5442 linux-all java/awt/Robot/RobotMoveMultiscreen.java JBR-5442 linux-all
java/awt/Robot/SpuriousMouseEvents/SpuriousMouseEvents.java JBR-6572 linux-all java/awt/Robot/SpuriousMouseEvents/SpuriousMouseEvents.java JBR-6572 linux-all
java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java JBR-7822 linux-x64 java/awt/TextArea/UsingWithMouse/SelectionAutoscrollTest.java JBR-7822 linux-x64
@@ -37,8 +37,8 @@ java/awt/Window/WindowSizeDifferentScreens/WindowSizeDifferentScreens.java JBR-5
javax/swing/event/FocusEventCauseTest.java JBR-8811 windows-all javax/swing/event/FocusEventCauseTest.java JBR-8811 windows-all
javax/swing/JButton/bug4234034.java JBR-8997 windows-all javax/swing/JButton/bug4234034.java JBR-8997 windows-all
javax/swing/JTextField/4532513/DefaultCaretRequestsFocusTest.java JBR-8330 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 javax/swing/JTextField/4532513/DefaultCaretRequestsFocusTest.java JBR-8330 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
javax/swing/JTextArea/4514331/TabShiftsFocusToNextComponent.java JBR-8329 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 javax/swing/JTextArea/4514331/TabShiftsFocusToNextComponent.java JBR-8329 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
javax/swing/JTextArea/8149849/DNDTextToScaledArea.java JBR-5442 linux-all javax/swing/JTextArea/8149849/DNDTextToScaledArea.java JBR-5442 linux-all
javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java JBR-5442 linux-all javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java JBR-5442 linux-all
javax/swing/system/6799345/TestShutdown.java JBR-6020 windows-all javax/swing/system/6799345/TestShutdown.java JBR-6020 windows-all
@@ -47,105 +47,96 @@ javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-4379 windo
jb/java/awt/dnd/DnDScalingWithHIDPI/DnDScalingWithHIDPITest.java JBR-5442 linux-all jb/java/awt/dnd/DnDScalingWithHIDPI/DnDScalingWithHIDPITest.java JBR-5442 linux-all
java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.java JBR-5510 linux-all
java/awt/ColorClass/AlphaColorTest.java JBR-5510 linux-all
java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java JBR-5210,JBR-5510 windows-all,linux-all
java/awt/Dialog/DialogLocationTest.java JBR-7781 linux-x64 java/awt/Dialog/DialogLocationTest.java JBR-7781 linux-x64
java/awt/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.java nobug linux-all java/awt/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.java nobug linux-all
java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java nobug linux-all java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java nobug linux-all
java/awt/Graphics2D/CopyAreaOOB.java JBR-5354 macosx-all,windows-all,linux-all java/awt/Graphics2D/CopyAreaOOB.java JBR-5354 macosx-all,windows-all,linux-all
java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-6065 windows-all java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-6065 windows-all
java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-5510,JBR-6833 windows-all,linux-all,macosx-all java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-6833 windows-all,linux-all,macosx-all
java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java 8253184,JBR-5510 windows-all,linux-all java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java 8253184 windows-all,linux-all
java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-6663 linux-all java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-6663 linux-all
java/awt/Insets/DialogInsets.java JBR-5510 linux-all
java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050 windows-all,macosx-all,linux-all java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050 windows-all,macosx-all,linux-all
java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java JBR-6662 windows-all java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java JBR-6662 windows-all
java/awt/Menu/OpensWithNoGrab/OpensWithNoGrab.java JBR-5510 linux-all
java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-all java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510 macosx-all,linux-all java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405 macosx-all,linux-all
java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510,JBR-6134 windows-x64,linux-all java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-6134 windows-x64,linux-all
java/awt/Mixing/AWT_Mixing/JInternalFrameMoveOverlapping.java 6986109,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JInternalFrameMoveOverlapping.java 6986109 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JInternalFrameOverlapping.java JBR-5510 linux-all java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JPopupMenuOverlapping.java JBR-5210,8049405 windows-all,macosx-all,linux-all
java/awt/Mixing/AWT_Mixing/JPopupMenuOverlapping.java JBR-5210,8049405,JBR-5510 windows-all,macosx-all,linux-all java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-all java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8253184 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8253184,JBR-5510 windows-all,linux-all java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java 8066259,8253184 macosx-all,windows-all,linux-all
java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java 8066259,8253184,JBR-5510 macosx-all,windows-all,linux-all java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java 8198665,8253184,JBR-6284 macosx-all,windows-all,linux-all
java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java 8198665,8253184,JBR-5510,JBR-6284 macosx-all,windows-all,linux-all
java/awt/Modal/BlockedMouseInputTest.java nobug linux-all java/awt/Modal/BlockedMouseInputTest.java nobug linux-all
java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java#id1 JBR-5442 linux-all java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java#id1 JBR-5442 linux-all
java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184 windows-all,linux-all java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184 windows-all,linux-all
java/awt/MouseInfo/MultiscreenPointerInfo.java nobug linux-all java/awt/MouseInfo/MultiscreenPointerInfo.java nobug linux-all
java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java 8253184 windows-all,linux-all java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java 8253184 windows-all,linux-all
java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java nobug linux-all java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java nobug linux-all
java/awt/Paint/PaintNativeOnUpdate.java 8253184,JBR-5510 windows-all,linux-all java/awt/Paint/PaintNativeOnUpdate.java 8253184 windows-all,linux-all
java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-7035,JBR-7079 windows-all,macosx-all,linux-x64 java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-7035,JBR-7079 windows-all,macosx-all,linux-x64
java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184,JBR-5510,JBR-6092 windows-all,linux-all,macosx-aarch64 java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184,JBR-6092 windows-all,linux-all,macosx-aarch64
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184 windows-all,linux-all java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184 windows-all,linux-all
java/awt/Window/8159168/SetShapeTest.java 8253184,JBR-5510 windows-all,linux-all java/awt/Window/8159168/SetShapeTest.java 8253184 windows-all,linux-all
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linux-all java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-7312 linux-all,macosx-all
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-5510,JBR-7312 linux-all,macosx-all java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184 windows-all,linux-all
java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510 windows-all,linux-all java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184 windows-all,linux-all
java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184,JBR-5510 windows-all,linux-all
java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java nobug linux-all java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java nobug linux-all
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java nobug linux-all javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java nobug linux-all
javax/swing/JButton/8151303/PressedIconTest.java JBR-5210,JBR-5510 windows-all,linux-all javax/swing/JButton/8151303/PressedIconTest.java JBR-5210 windows-all,linux-all
javax/swing/JComboBox/6559152/bug6559152.java JBR-7783,JBR-8964 linux-x64,windows-all javax/swing/JComboBox/6559152/bug6559152.java JBR-7783,JBR-8964 linux-x64,windows-all
javax/swing/JComponent/7154030/bug7154030.java JBR-5510 linux-all javax/swing/JDialog/Transparency/TransparencyTest.java 8253184 windows-all,linux-all
javax/swing/JDialog/Transparency/TransparencyTest.java 8253184,JBR-5510 windows-all,linux-all javax/swing/JFileChooser/4847375/bug4847375.java JBR-8534 windows-x64
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5510 linux-all javax/swing/JFileChooser/4966171/bug4966171.java JBR-8534 windows-x64
javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,linux-all javax/swing/JFileChooser/8010718/bug8010718.java JBR-8534 windows-x64
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5510 linux-all javax/swing/JFileChooser/8013442/Test8013442.java JBR-8534 windows-x64
javax/swing/JFileChooser/FileChooserListenerLeak.java JBR-8534 windows-x64
javax/swing/JFileChooser/JFileChooserFontReset.java JBR-8534 windows-x64
javax/swing/JInternalFrame/5066752/bug5066752.java 8253184 windows-all,linux-all
javax/swing/JInternalFrame/bug4732229.java JBR-8897 windows-x64 javax/swing/JInternalFrame/bug4732229.java JBR-8897 windows-x64
javax/swing/JMenu/JMenuSelectedColorTest.java JBR-5510 linux-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java nobug linux-all javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java nobug linux-all
javax/swing/JProgressBar/TestJProgressBarHighlightColor.java nobug linux-all javax/swing/JProgressBar/TestJProgressBarHighlightColor.java nobug linux-all
javax/swing/JRadioButton/8041561/bug8041561.java JBR-5510 linux-all
javax/swing/JSlider/TestJSliderRendering.java nobug linux-all javax/swing/JSlider/TestJSliderRendering.java nobug linux-all
javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-6347 linux-all javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-6347 linux-all
javax/swing/JSpinner/TestSelectedTextBackgroundColor.java nobug linux-all javax/swing/JSpinner/TestSelectedTextBackgroundColor.java nobug linux-all
javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5510 linux-all
javax/swing/JSplitPane/4885629/bug4885629.java JBR-5510 linux-all
javax/swing/JTextPane/TestJTextPaneBackgroundColor.java nobug linux-all javax/swing/JTextPane/TestJTextPaneBackgroundColor.java nobug linux-all
javax/swing/JToolTip/TestTooltipBackgroundColor.java nobug linux-all javax/swing/JToolTip/TestTooltipBackgroundColor.java nobug linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8253184,JBR-5510,JBR-7404 windows-all,linux-all,macosx-all javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8253184,JBR-7404 windows-all,linux-all,macosx-all
javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-all javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184 windows-all,linux-all
javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184,JBR-5510 windows-all,linux-all javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184 windows-all,linux-all
javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184,JBR-5510 windows-all,linux-all javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184 windows-all,linux-all
javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-5510 linux-all javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-8300 windows-all,linux-all,macosx-aarch64
javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-5510,JBR-8300 windows-all,linux-all,macosx-aarch64 javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5951 linux-all,windows-x64
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5510,JBR-5951 linux-all,windows-x64 javax/swing/text/html/StyleSheet/bug4936917.java JBR-899 windows-all,linux-all
javax/swing/text/html/StyleSheet/bug4936917.java JBR-899,JBR-5510 windows-all,linux-all
jb/java/awt/MouseInfo/GetPointerInfoTest.java nobug linux-all jb/java/awt/MouseInfo/GetPointerInfoTest.java nobug linux-all
jb/java/awt/Window/WindowEventsOnPopupShowing.java JBR-7744 linux-x64 jb/java/awt/Window/WindowEventsOnPopupShowing.java JBR-7744 linux-x64
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 linux-all,macosx-all,windows-all sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 linux-all,macosx-all,windows-all
sun/java2d/GdiRendering/InsetClipping.java 7124403,JBR-5510 windows-x64,macosx-all,linux-all sun/java2d/GdiRendering/InsetClipping.java 7124403 windows-x64,macosx-all,linux-all

View File

@@ -27,7 +27,7 @@ java/awt/Graphics/XORPaint.java#id2 JBR-7373 linux-x64
java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java initial_runs generic-all java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java initial_runs generic-all
java/awt/image/DrawImage/IncorrectManagedImageSourceOffset.java JBR-8240 linux-aarch64 java/awt/image/DrawImage/IncorrectManagedImageSourceOffset.java JBR-8240 linux-aarch64
java/awt/image/DrawImage/IncorrectUnmanagedImageSourceOffset.java JBR-7945 linux-x64 java/awt/image/DrawImage/IncorrectUnmanagedImageSourceOffset.java JBR-7945 linux-x64
java/awt/image/DrawImage/SimpleManagedImage.java initial_runs generic-all java/awt/image/DrawImage/SimpleManagedImage.java JBR-8769 linux-all
java/awt/image/DrawImage/SimpleUnmanagedImage.java initial_runs generic-all java/awt/image/DrawImage/SimpleUnmanagedImage.java initial_runs generic-all
java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-9135 linux-x64 java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-9135 linux-x64
java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java JBR-9136 linux-x64 java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java JBR-9136 linux-x64

View File

@@ -116,7 +116,7 @@
java/awt/AlphaComposite/WindowAlphaCompositeTest.java JBR-6553 macosx-all java/awt/AlphaComposite/WindowAlphaCompositeTest.java JBR-6553 macosx-all
java/awt/Button/DisabledButtonPress.java JBR-5799 windows-aarch64 java/awt/Button/DisabledButtonPress.java JBR-5799 windows-aarch64
java/awt/Desktop/8064934/bug8064934.java JBR-5764,JBR-5799 windows-all java/awt/Desktop/8064934/bug8064934.java JBR-5764,JBR-5799 windows-all
java/awt/Debug/DumpOnKey/DumpOnKey.java JBR-5225 windows-all java/awt/Debug/DumpOnKey/DumpOnKey.java JBR-5225,JBR-9350 windows-all,macosx-all
java/awt/event/HierarchyEvent/SpecTest.java JBR-7589 windows-all java/awt/event/HierarchyEvent/SpecTest.java JBR-7589 windows-all
java/awt/event/KeyEvent/CorrectTime/CorrectTime.java JBR-6665 linux-all,windows-all java/awt/event/KeyEvent/CorrectTime/CorrectTime.java JBR-6665 linux-all,windows-all
java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java 8224055,JBR-5906 macosx-all,linux-all java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java 8224055,JBR-5906 macosx-all,linux-all
@@ -143,7 +143,7 @@ java/awt/Focus/ComponentLostFocusTest.java JBR-7909 generic-all
java/awt/Focus/EmptyWindowKeyTest.java JBR-7913 windows-all java/awt/Focus/EmptyWindowKeyTest.java JBR-7913 windows-all
java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-all java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-all
java/awt/Focus/FocusSubRequestTest/FocusSubRequestTest.java JBR-5178 windows-all java/awt/Focus/FocusSubRequestTest/FocusSubRequestTest.java JBR-5178 windows-all
java/awt/Focus/FocusTransitionTest/FocusTransitionTest.java JBR-5809 linux-all java/awt/Focus/FocusTransitionTest/FocusTransitionTest.java JBR-5809,JBR-9214 linux-all,macosx-26.0
java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java JBR-5210 windows-all java/awt/Focus/FocusTraversalPolicy/ButtonGroupLayoutTraversal/ButtonGroupLayoutTraversalTest.java JBR-5210 windows-all
java/awt/Focus/FrameMinimizeTest/FrameMinimizeTest.java 8016266 linux-all java/awt/Focus/FrameMinimizeTest/FrameMinimizeTest.java 8016266 linux-all
java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java 6849364 generic-all java/awt/Focus/IconifiedFrameFocusChangeTest/IconifiedFrameFocusChangeTest.java 6849364 generic-all
@@ -158,21 +158,22 @@ java/awt/Focus/UnaccessibleChoice/AccessibleChoiceTest.java JBR-5178 windows-all
java/awt/Focus/VetoableChangeListenerLoopTest.java JBR-5785 linux-all java/awt/Focus/VetoableChangeListenerLoopTest.java JBR-5785 linux-all
java/awt/Frame/7024749/bug7024749.java JBR-5210 windows-all java/awt/Frame/7024749/bug7024749.java JBR-5210 windows-all
java/awt/Frame/8158918/SetExtendedState.java JBR-6408 linux-all java/awt/Frame/8158918/SetExtendedState.java JBR-6408 linux-all
java/awt/Frame/DisposeTest.java JBR-7937,JBR-8718 macosx-aarch64,linux-5.18.2-arch1-1 java/awt/Frame/DisposeTest.java JBR-7937 macosx-aarch64
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-6509 generic-all java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-6509 generic-all
java/awt/Frame/HideMaximized/HideMaximized.java JBR-8310 linux-all java/awt/Frame/HideMaximized/HideMaximized.java JBR-8310 linux-all
java/awt/Frame/Iconify/IconifyTest.java JBR-8836 linux-all java/awt/Frame/Iconify/IconifyTest.java JBR-8836 linux-all
java/awt/Frame/InitialIconifiedTest.java 7144049,8203920 macosx-all,linux-all java/awt/Frame/InitialIconifiedTest.java 7144049,8203920 macosx-all,linux-all
java/awt/Frame/MaximizeUndecoratedTest.java JBR-8064 linux-all java/awt/Frame/MaximizeUndecoratedTest.java JBR-8064 linux-all
java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java JBR-7509,JBR-8889 macosx-15.4.1,macosx-15.5,macosx-all java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java JBR-7509,JBR-8889 macosx-15.4.1,macosx-15.5,macosx-15.6,macosx-15.6.1,macosx-all
java/awt/Frame/MaximizedToMaximized/MaximizedToMaximized.java JBR-7786,JBR-7947 linux-all,macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 java/awt/Frame/MaximizedToMaximized/MaximizedToMaximized.java JBR-7786,JBR-7947 linux-all,macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1,macosx-26.0
java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenBig.java JBR-5303 windows-all java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenBig.java JBR-5303 windows-all
java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-all java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-all
java/awt/Frame/MinimizeUndecoratedTest.java 8330731 linux-all java/awt/Frame/MinimizeUndecoratedTest.java 8330731 linux-all
java/awt/Frame/MinimumSizeTest.java JBR-8298 linux-5.18.2-arch1-1,linux-6.8.0-1031-aws,linux-6.8.0-1032-aws java/awt/Frame/MinimumSizeTest.java JBR-8298 linux-6.8.0-1031-aws,linux-6.8.0-1032-aws,linux-6.8.0-1033-aws,linux-6.8.0-1035-aws,linux-6.8.0-1036-aws
java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java 8286840 linux-all java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java 8286840 linux-all
java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java JBR-4880,JBR-6683 windows-all,linux-all java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java JBR-4880,JBR-6683 windows-all,linux-all
java/awt/dnd/CustomDragCursorTest.java 8242805 macosx-all java/awt/dnd/CustomDragCursorTest.java 8242805 macosx-all
java/awt/dnd/DnDClipboardDeadlockTest.java JBR-6442 linux-all
java/awt/dnd/DnDCursorCrashTest.java 8242805,JBR-7966 macosx-all,windows-all java/awt/dnd/DnDCursorCrashTest.java 8242805,JBR-7966 macosx-all,windows-all
java/awt/dnd/DnDRemoveFocusOwnerCrashTest.java 8242805 macosx-all java/awt/dnd/DnDRemoveFocusOwnerCrashTest.java 8242805 macosx-all
java/awt/dnd/DragExitBeforeDropTest.java 8242805 macosx-all java/awt/dnd/DragExitBeforeDropTest.java 8242805 macosx-all
@@ -202,7 +203,7 @@ java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShow
java/awt/Focus/ConsumedTabKeyTest.java JBR-5833 windows-all java/awt/Focus/ConsumedTabKeyTest.java JBR-5833 windows-all
java/awt/Focus/ContainerFocusAutoTransferTest/ContainerFocusAutoTransferTest.java JBR-8556 linux-aarch64 java/awt/Focus/ContainerFocusAutoTransferTest/ContainerFocusAutoTransferTest.java JBR-8556 linux-aarch64
java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5210 windows-all java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5210 windows-all
java/awt/Focus/ModalDialogInFocusEventTest.java JBR-7818 linux-5.18.2-arch1-1 java/awt/Focus/ModalDialogInFocusEventTest.java JBR-7818 linux-all
java/awt/Focus/ModalExcludedWindowClickTest/ModalExcludedWindowClickTest.java JBR-884 windows-x64,linux-all java/awt/Focus/ModalExcludedWindowClickTest/ModalExcludedWindowClickTest.java JBR-884 windows-x64,linux-all
java/awt/Focus/MouseClickRequestFocusRaceTest/MouseClickRequestFocusRaceTest.java 8194753 linux-all,macosx-all java/awt/Focus/MouseClickRequestFocusRaceTest/MouseClickRequestFocusRaceTest.java 8194753 linux-all,macosx-all
java/awt/Focus/NextFocusHelperTest.java JBR-7880 generic-all java/awt/Focus/NextFocusHelperTest.java JBR-7880 generic-all
@@ -215,61 +216,64 @@ java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java 8169096,
java/awt/EventQueue/6980209/bug6980209.java 8198615 macosx-all java/awt/EventQueue/6980209/bug6980209.java 8198615 macosx-all
java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java JBR-8885 macosx-all java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java JBR-8885 macosx-all
java/awt/Frame/SetMinimumSizeTest/SetMinimumSizeTest2.java JBR-5210 windows-all java/awt/Frame/SetMinimumSizeTest/SetMinimumSizeTest2.java JBR-5210 windows-all
java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java JBR-5210,JBR-6126 windows-all,linux-5.18.2-arch1-1,macosx-all java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java JBR-5210,JBR-6126 windows-all,ResizeableResourceHashtable,macosx-all
java/awt/grab/EmbeddedFrameTest1/EmbeddedFrameTest1.java 7080150,JBR-4880,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1 java/awt/grab/EmbeddedFrameTest1/EmbeddedFrameTest1.java 7080150,JBR-4880,8253184 macosx-all,windows-all
java/awt/grab/GrabOnUnfocusableToplevel/GrabOnUnfocusableToplevel.java 8169109,JBR-4880 linux-all,windows-all java/awt/grab/GrabOnUnfocusableToplevel/GrabOnUnfocusableToplevel.java 8169109,JBR-4880 linux-all,windows-all
java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java 8168646 generic-all java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java 8168646 generic-all
java/awt/MenuBar/8007006/bug8007006.java JBR-9213 macosx-26.0
java/awt/MenuShortcut/FunctionKeyShortcut.java JBR-9207 linux-6.15.8-100.fc41.x86_64
java/awt/Mixing/AWT_Mixing/HierarchyBoundsListenerMixingTest.java 8049405,8253184 generic-all java/awt/Mixing/AWT_Mixing/HierarchyBoundsListenerMixingTest.java 8049405,8253184 generic-all
java/awt/Mixing/AWT_Mixing/MixingFrameResizing.java 8049405,8253184 generic-all java/awt/Mixing/AWT_Mixing/MixingFrameResizing.java 8049405,8253184 generic-all
java/awt/Mixing/AWT_Mixing/OpaqueOverlapping.java 8294264 windows-x64 java/awt/Mixing/AWT_Mixing/OpaqueOverlapping.java 8294264 windows-x64
java/awt/Mixing/AWT_Mixing/OpaqueOverlappingChoice.java 8048171 generic-all java/awt/Mixing/AWT_Mixing/OpaqueOverlappingChoice.java 8048171 generic-all
java/awt/Mixing/AWT_Mixing/JMenuBarOverlapping.java 8159451 linux-all,windows-all,macosx-all java/awt/Mixing/AWT_Mixing/JMenuBarOverlapping.java 8159451 linux-all,windows-all,macosx-all
java/awt/Mixing/AWT_Mixing/JSplitPaneOverlapping.java 6986109 generic-all java/awt/Mixing/AWT_Mixing/JSplitPaneOverlapping.java 6986109 generic-all
java/awt/Mixing/AWT_Mixing/JInternalFrameMoveOverlapping.java 6986109,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JInternalFrameMoveOverlapping.java 6986109 windows-all
java/awt/Mixing/AWT_Mixing/MixingPanelsResizing.java 8049405 generic-all java/awt/Mixing/AWT_Mixing/MixingPanelsResizing.java 8049405 generic-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510 macosx-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405 macosx-all
java/awt/Mixing/AWT_Mixing/JPopupMenuOverlapping.java JBR-5210,8049405,JBR-5510 windows-all,macosx-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JPopupMenuOverlapping.java JBR-5210,8049405 windows-all,macosx-all
java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210 windows-all
java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801,JBR-5510,JBR-8311 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801,JBR-8311 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8253184 windows-all
java/awt/Mixing/HWDisappear.java 8253184,JBR-6818 windows-all,linux-all java/awt/Mixing/HWDisappear.java 8253184,JBR-6818 windows-all,linux-all
java/awt/Mixing/MixingInHwPanel.java 8253184 windows-all java/awt/Mixing/MixingInHwPanel.java 8253184 windows-all
java/awt/Mixing/NonOpaqueInternalFrame.java 7124549 macosx-all java/awt/Mixing/NonOpaqueInternalFrame.java 7124549 macosx-all
java/awt/Mixing/ValidBounds.java 8253184,JBR-5845 windows-all,linux-all java/awt/Mixing/ValidBounds.java 8253184,JBR-5845 windows-all,linux-all
java/awt/Mixing/Validating.java JBR-5908 linux-all java/awt/Mixing/Validating.java JBR-5908 linux-all
java/awt/Focus/ActivateFocusTest.java JBR-7888 linux-6.15.8-100.fc41.x86_64
java/awt/Focus/ActivateOnProperAppContextTest.java 8136516 macosx-all java/awt/Focus/ActivateOnProperAppContextTest.java 8136516 macosx-all
java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java 8252772,JBR-5799 linux-all,windows-all java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java 8252772,JBR-5799 linux-all,windows-all
java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java 6829264 generic-all java/awt/Focus/ActualFocusedWindowTest/ActualFocusedWindowRetaining.java 6829264 generic-all
java/awt/Focus/ShowFrameCheckForegroundTest/ShowFrameCheckForegroundTest.java JBR-5210,JBR-6506 windows-all,linux-all java/awt/Focus/ShowFrameCheckForegroundTest/ShowFrameCheckForegroundTest.java JBR-5210,JBR-6506 windows-all,linux-all
java/awt/datatransfer/DragImage/MultiResolutionDragImageTest.java 8080982 generic-all java/awt/datatransfer/DragImage/MultiResolutionDragImageTest.java 8080982 generic-all
java/awt/datatransfer/SystemFlavorMap/AddFlavorTest.java 8079268 linux-all java/awt/datatransfer/SystemFlavorMap/AddFlavorTest.java 8079268 linux-all
java/awt/datatransfer/SystemSelection/SystemSelectionSwingTest.java JBR-6393 linux-5.18.2-arch1-1 java/awt/datatransfer/SystemSelection/SystemSelectionSwingTest.java JBR-6393 ResizeableResourceHashtable
java/awt/datatransfer/UnicodeTransferTest/UnicodeTransferTest.java 8300704 linux-all java/awt/datatransfer/UnicodeTransferTest/UnicodeTransferTest.java 8300704 linux-all
java/awt/LightweightComponent/LightweightDragTest.java JBR-6557 windows-all java/awt/LightweightComponent/LightweightDragTest.java JBR-6557 windows-all
java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050,JBR-8313 windows-all,macosx-all,linux-all java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050,JBR-8313 windows-all,macosx-all,linux-all
@@ -285,7 +289,7 @@ java/awt/FullScreen/NoResizeEventOnDMChangeTest/NoResizeEventOnDMChangeTest.java
java/awt/FullScreen/UninitializedDisplayModeChangeTest/UninitializedDisplayModeChangeTest.java 7188711,8273617,JBR-4880,8253184 macosx-all,linux-all,windows-all java/awt/FullScreen/UninitializedDisplayModeChangeTest/UninitializedDisplayModeChangeTest.java 7188711,8273617,JBR-4880,8253184 macosx-all,linux-all,windows-all
java/awt/Focus/8013611/JDK8013611.java 8175366 windows-all,macosx-all java/awt/Focus/8013611/JDK8013611.java 8175366 windows-all,macosx-all
java/awt/Focus/6401036/InputVerifierTest2.java JBR-7537 linux-all java/awt/Focus/6401036/InputVerifierTest2.java JBR-7537 linux-all
java/awt/Focus/6981400/Test1.java 8029675,JBR-5510 windows-all,macosx-all,linux-5.18.2-arch1-1 java/awt/Focus/6981400/Test1.java 8029675 windows-all,macosx-all
java/awt/Focus/6981400/Test3.java 8173264 generic-all java/awt/Focus/6981400/Test3.java 8173264 generic-all
java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729 windows-all,linux-all java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729 windows-all,linux-all
java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-5210,8298247 windows-all,linux-all java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-5210,8298247 windows-all,linux-all
@@ -313,7 +317,6 @@ java/awt/Frame/FramesGC/FramesGC.java 8079069,JBR-6057 macosx-all,windows-all,li
java/awt/Frame/FrameVisible/FrameContentAppearanceTest.java JBR-5838 macosx-all java/awt/Frame/FrameVisible/FrameContentAppearanceTest.java JBR-5838 macosx-all
java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java 8253184 windows-all java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java 8253184 windows-all
java/awt/ScrollPane/ScrollPaneWindowsTest.java JBR-6944 windows-all java/awt/ScrollPane/ScrollPaneWindowsTest.java JBR-6944 windows-all
java/awt/Toolkit/DesktopProperties/rfe4758438.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Toolkit/Headless/HeadlessToolkit.java JBR-6550 macosx-all java/awt/Toolkit/Headless/HeadlessToolkit.java JBR-6550 macosx-all
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5765 macosx-all java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5765 macosx-all
java/awt/Toolkit/RealSync/Test.java 6849383,8072110 linux-all,windows-all java/awt/Toolkit/RealSync/Test.java 6849383,8072110 linux-all,windows-all
@@ -338,18 +341,18 @@ java/awt/TrayIcon/TrayIconPopup/TrayIconPopupClickTest.java 8150540,JBR-3107 win
java/awt/TrayIcon/TrayIconPopup/TrayIconPopupTest.java 8150540,JBR-3107 windows-all,linux-all java/awt/TrayIcon/TrayIconPopup/TrayIconPopupTest.java 8150540,JBR-3107 windows-all,linux-all
java/awt/Window/8027025/Test8027025.java 8253184 windows-all java/awt/Window/8027025/Test8027025.java 8253184 windows-all
java/awt/Window/8159168/SetShapeTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Window/8159168/SetShapeTest.java 8253184 windows-all
java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.java JBR-6540 macosx-all java/awt/Window/HandleWindowDestroyTest/HandleWindowDestroyTest.java JBR-6540 macosx-all
java/awt/Window/SetWindowLocationByPlatformTest/SetWindowLocationByPlatformTest.java 8253184,JBR-5728 windows-all,linux-all java/awt/Window/SetWindowLocationByPlatformTest/SetWindowLocationByPlatformTest.java 8253184,JBR-5728 windows-all,linux-all
java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184 windows-all
java/awt/Window/ShapedAndTranslucentWindows/SetShapeAndClick.java 8197936,8253184 macosx-all,windows-all java/awt/Window/ShapedAndTranslucentWindows/SetShapeAndClick.java 8197936,8253184 macosx-all,windows-all
java/awt/Window/ShapedAndTranslucentWindows/SetShapeDynamicallyAndClick.java 8013450,8253184 macosx-all,windows-all java/awt/Window/ShapedAndTranslucentWindows/SetShapeDynamicallyAndClick.java 8013450,8253184 macosx-all,windows-all
java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucentWindowClick.java 8013450,8253184 macosx-all,windows-all java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucentWindowClick.java 8013450,8253184 macosx-all,windows-all
java/awt/Window/ShapedAndTranslucentWindows/TranslucentChoice.java 8253184 windows-all java/awt/Window/ShapedAndTranslucentWindows/TranslucentChoice.java 8253184 windows-all
java/awt/Window/ShapedAndTranslucentWindows/TranslucentWindowClick.java 8253184 windows-all java/awt/Window/ShapedAndTranslucentWindows/TranslucentWindowClick.java 8253184 windows-all
java/awt/Window/setLocRelativeTo/SetLocationRelativeToTest.java 8253184 windows-all java/awt/Window/setLocRelativeTo/SetLocationRelativeToTest.java 8253184 windows-all
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-5510,JBR-7312 linux-5.18.2-arch1-1,macosx-all java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-7312,JBR-9192 macosx-all,linux-6.15.8-100.fc41.x86_64
java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510,JBR-6463 windows-all,linux-all java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-6463 windows-all,linux-all
java/awt/Window/ShapedAndTranslucentWindows/FocusAWTTest.java 8222328 windows-all,linux-all,macosx-all java/awt/Window/ShapedAndTranslucentWindows/FocusAWTTest.java 8222328 windows-all,linux-all,macosx-all
java/awt/Window/ShapedAndTranslucentWindows/Shaped.java 8222328 windows-all,linux-all,macosx-all java/awt/Window/ShapedAndTranslucentWindows/Shaped.java 8222328 windows-all,linux-all,macosx-all
java/awt/Window/ShapedAndTranslucentWindows/ShapedByAPI.java 8222328 windows-all,linux-all,macosx-all java/awt/Window/ShapedAndTranslucentWindows/ShapedByAPI.java 8222328 windows-all,linux-all,macosx-all
@@ -370,27 +373,26 @@ java/awt/font/TextLayout/TextLayoutBounds.java 8169188 generic-all
java/awt/image/BufferedImage/ICMColorDataTest/ICMColorDataTest.java 8233028 generic-all java/awt/image/BufferedImage/ICMColorDataTest/ICMColorDataTest.java 8233028 generic-all
java/awt/image/DrawImage/IncorrectAlphaSurface2SW.java 8056077 linux-all java/awt/image/DrawImage/IncorrectAlphaSurface2SW.java 8056077 linux-all
java/awt/image/multiresolution/Corrupted2XImageTest.java 8264053 macosx-all java/awt/image/multiresolution/Corrupted2XImageTest.java 8264053 macosx-all
java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-5510,JBR-6833 windows-all,linux-5.18.2-arch1-1,macosx-all java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-6833 windows-all,macosx-all
java/awt/image/multiresolution/MultiresolutionIconTest.java 8252812 windows-all,linux-all java/awt/image/multiresolution/MultiresolutionIconTest.java 8252812 windows-all,linux-all
java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java 8253184 windows-all
java/awt/print/Headless/HeadlessPrinterJob.java 8196088 windows-all java/awt/print/Headless/HeadlessPrinterJob.java 8196088 windows-all
sun/awt/datatransfer/SuplementaryCharactersTransferTest.java 8011371 generic-all sun/awt/datatransfer/SuplementaryCharactersTransferTest.java 8011371 generic-all
sun/awt/font/TestArabicHebrew.java JBR-8826 linux-5.18.2-arch1-1 sun/awt/font/TestArabicHebrew.java JBR-8826,JBR-9210 linux-6.15.8-100.fc41.x86_64
sun/awt/font/TestDevTransform.java 8347618,JBR-9122 linux-all,windows-all sun/awt/font/TestDevTransform.java 8347618,JBR-9122 linux-all,windows-all
sun/awt/shell/ShellFolderMemoryLeak.java 8197794 windows-all sun/awt/shell/ShellFolderMemoryLeak.java 8197794 windows-all
sun/awt/windows/TestPen.java JBR-8718 linux-5.18.2-arch1-1
sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java 8301177 generic-all sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.java 8301177 generic-all
sun/java2d/DirectX/OpaqueImageToSurfaceBlitTest/OpaqueImageToSurfaceBlitTest.java JBR-5393 windows-aarch64 sun/java2d/DirectX/OpaqueImageToSurfaceBlitTest/OpaqueImageToSurfaceBlitTest.java JBR-5393 windows-aarch64
sun/java2d/DirectX/OverriddenInsetsTest/OverriddenInsetsTest.java 8196102 generic-all sun/java2d/DirectX/OverriddenInsetsTest/OverriddenInsetsTest.java 8196102 generic-all
sun/java2d/DirectX/RenderingToCachedGraphicsTest/RenderingToCachedGraphicsTest.java 8196180,8252812 windows-all,macosx-all,linux-all sun/java2d/DirectX/RenderingToCachedGraphicsTest/RenderingToCachedGraphicsTest.java 8196180,8252812 windows-all,macosx-all,linux-all
sun/java2d/Disposer/TestDisposerLeak.java JBR-6650 windows-all sun/java2d/Disposer/TestDisposerLeak.java JBR-6650 windows-all
sun/java2d/GdiRendering/GdiBlitOffscreenTest.java JBR-8718 linux-5.18.2-arch1-1
sun/java2d/SunGraphics2D/EmptyClipRenderingTest.java 8144029 macosx-all,linux-all,windows-all sun/java2d/SunGraphics2D/EmptyClipRenderingTest.java 8144029 macosx-all,linux-all,windows-all
sun/java2d/SunGraphics2D/DrawImageBilinear.java 8297175 linux-all sun/java2d/SunGraphics2D/DrawImageBilinear.java 8297175 linux-all
sun/java2d/loops/XORClearRect.java JBR-8718 linux-5.18.2-arch1-1
java/awt/Graphics2D/CopyAreaOOB.java JBR-5354 macosx-all,windows-all,linux-5.18.2-arch1-1 java/awt/Graphics/NativeWin32Clear.java JBR-8689 linux-aarch64
java/awt/Graphics2D/DrawString/DisposerTest.java JBR-5010,JBR-5510 linux-aarch64,linux-5.18.2-arch1-1 java/awt/Graphics/XORPaint.java#id1 JBR-8642 macosx-aarch64
java/awt/Graphics2D/CopyAreaOOB.java JBR-5354,JBR-9206 macosx-all,windows-all,linux-6.15.8-100.fc41.x86_64
java/awt/Graphics2D/DrawString/DisposerTest.java JBR-5010 linux-aarch64
java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8266283 generic-all java/awt/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8266283 generic-all
sun/java2d/SunGraphics2D/PolyVertTest.java 6986565 generic-all sun/java2d/SunGraphics2D/PolyVertTest.java 6986565 generic-all
sun/java2d/SunGraphics2D/SimplePrimQuality.java 6992007 generic-all sun/java2d/SunGraphics2D/SimplePrimQuality.java 6992007 generic-all
@@ -415,14 +417,12 @@ java/awt/Choice/ChoiceLocationTest/ChoiceLocationTest.java JBR-5799 windows-all
java/awt/Choice/ChoiceFocusLostTest.java JBR-5799 windows-x64 java/awt/Choice/ChoiceFocusLostTest.java JBR-5799 windows-x64
java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java 6849371,6849371,JBR-5210 macosx-all,linux-all,windows-all java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java 6849371,6849371,JBR-5210 macosx-all,linux-all,windows-all
java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857 macosx-all java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857 macosx-all
java/awt/Choice/ChoiceGeneratesItemEvents.java JBR-5510,JBR-6284 linux-5.18.2-arch1-1,linux-all java/awt/Choice/ChoiceGeneratesItemEvents.java JBR-6284 linux-all
java/awt/Choice/InsertRemoveTest.java JBR-8494 linux-5.15.0-1084-aws java/awt/Choice/InsertRemoveTest.java JBR-8494 linux-5.15.0-1084-aws
java/awt/Choice/NonFocusablePopupMenuTest.java JBR-7785 linux-5.18.2-arch1-1
java/awt/ColorClass/AlphaColorTest.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Component/ComponentLeakTest/ComponentLeakTest.java JBR-7911 windows-all java/awt/Component/ComponentLeakTest/ComponentLeakTest.java JBR-7911 windows-all
java/awt/Component/F10TopToplevel/F10TopToplevel.java JBR-5687 linux-all java/awt/Component/F10TopToplevel/F10TopToplevel.java JBR-5687 linux-all
java/awt/Component/GetScreenLocTest/GetScreenLocTest.java 4753654 generic-all java/awt/Component/GetScreenLocTest/GetScreenLocTest.java 4753654 generic-all
java/awt/Component/RepaintTest.java JBR-5510,JBR-6872 linux-5.18.2-arch1-1,macosx-all java/awt/Component/RepaintTest.java JBR-6872 macosx-all
java/awt/Component/SetComponentsBounds/SetComponentsBounds.java JBR-4275 linux-all java/awt/Component/SetComponentsBounds/SetComponentsBounds.java JBR-4275 linux-all
java/awt/Component/SetEnabledPerformance/SetEnabledPerformance.java 8165863 macosx-all java/awt/Component/SetEnabledPerformance/SetEnabledPerformance.java 8165863 macosx-all
java/awt/Clipboard/HTMLTransferTest/HTMLTransferTest.java 8017454 macosx-all java/awt/Clipboard/HTMLTransferTest/HTMLTransferTest.java 8017454 macosx-all
@@ -431,7 +431,6 @@ java/awt/Frame/MiscUndecorated/ActiveSwingWindowTest.java JBR-5210 windows-all
java/awt/Frame/MiscUndecorated/FrameCloseTest.java JBR-5210 windows-all java/awt/Frame/MiscUndecorated/FrameCloseTest.java JBR-5210 windows-all
java/awt/Frame/MiscUndecorated/RepaintTest.java 8266244,JBR-5786 macosx-aarch64,generic-all java/awt/Frame/MiscUndecorated/RepaintTest.java 8266244,JBR-5786 macosx-aarch64,generic-all
java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java 8253184 windows-all java/awt/Robot/HiDPIMouseClick/HiDPIRobotMouseClick.java 8253184 windows-all
java/awt/Robot/NonEmptyErrorStream.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Robot/RobotExtraButton/RobotExtraButton.java JBR-6554 linux-all java/awt/Robot/RobotExtraButton/RobotExtraButton.java JBR-6554 linux-all
java/awt/Modal/FileDialog/FileDialogAppModal1Test.java 7186009,8253184 macosx-all,windows-all java/awt/Modal/FileDialog/FileDialogAppModal1Test.java 7186009,8253184 macosx-all,windows-all
java/awt/Modal/FileDialog/FileDialogAppModal2Test.java 7186009,8253184 macosx-all,windows-all java/awt/Modal/FileDialog/FileDialogAppModal2Test.java 7186009,8253184 macosx-all,windows-all
@@ -524,7 +523,7 @@ java/awt/Modal/ModalBlockingTests/UnblockedDialogModelessTest.java 8198665,82531
java/awt/Modal/ModalBlockingTests/UnblockedDialogNonModalTest.java 8198665,8253184 macosx-all,windows-all java/awt/Modal/ModalBlockingTests/UnblockedDialogNonModalTest.java 8198665,8253184 macosx-all,windows-all
java/awt/Modal/ModalBlockingTests/UnblockedDialogSetModalTest.java 8198665,8253184 macosx-all,windows-all java/awt/Modal/ModalBlockingTests/UnblockedDialogSetModalTest.java 8198665,8253184 macosx-all,windows-all
java/awt/Modal/ModalBlockingTests/UnblockedDialogToolkitModalTest.java 8198665,8253184 macosx-all,windows-all java/awt/Modal/ModalBlockingTests/UnblockedDialogToolkitModalTest.java 8198665,8253184 macosx-all,windows-all
java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java 8066259,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1 java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java 8066259,8253184 macosx-all,windows-all
java/awt/Modal/ModalExclusionTests/ApplicationExcludeFrameFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all java/awt/Modal/ModalExclusionTests/ApplicationExcludeFrameFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all
java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogFileTest.java 8047179,8253184 linux-all,macosx-all,windows-all
java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPageSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all java/awt/Modal/ModalExclusionTests/ApplicationExcludeDialogPageSetupTest.java 8196431,8253184 linux-all,macosx-all,windows-all
@@ -579,12 +578,12 @@ java/awt/Modal/ModalInternalFrameTest/ModalInternalFrameTest.java 8253184,JBR-63
java/awt/Modal/MultipleDialogs/MultipleDialogs1Test.java 8198665,8253184 macosx-all,windows-all java/awt/Modal/MultipleDialogs/MultipleDialogs1Test.java 8198665,8253184 macosx-all,windows-all
java/awt/Modal/MultipleDialogs/MultipleDialogs2Test.java 8198665,8253184 macosx-all,windows-all java/awt/Modal/MultipleDialogs/MultipleDialogs2Test.java 8198665,8253184 macosx-all,windows-all
java/awt/Modal/MultipleDialogs/MultipleDialogs3Test.java 8198665,8253184,JBR-8318 macosx-all,windows-all,linux-all java/awt/Modal/MultipleDialogs/MultipleDialogs3Test.java 8198665,8253184,JBR-8318 macosx-all,windows-all,linux-all
java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java 8198665,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1 java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java 8198665,8253184 macosx-all,windows-all
java/awt/Modal/MultipleDialogs/MultipleDialogs5Test.java 8198665,8253184 macosx-all,windows-all java/awt/Modal/MultipleDialogs/MultipleDialogs5Test.java 8198665,8253184 macosx-all,windows-all
java/awt/Mouse/EnterExitEvents/DragWindowOutOfFrameTest.java 8177326,8253184,JBR-6305 macosx-all,windows-all,linux-all java/awt/Mouse/EnterExitEvents/DragWindowOutOfFrameTest.java 8177326,8253184,JBR-6305 macosx-all,windows-all,linux-all
java/awt/Mouse/EnterExitEvents/DragWindowTest.java 8253184,8298823 windows-all,macosx-all java/awt/Mouse/EnterExitEvents/DragWindowTest.java 8253184,8298823 windows-all,macosx-all
java/awt/Mouse/EnterExitEvents/ModalDialogEnterExitEventsTest.java 8253184,JBR-5811 windows-all,linux-all java/awt/Mouse/EnterExitEvents/ModalDialogEnterExitEventsTest.java 8253184,JBR-5811 windows-all,linux-all
java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java 8005021,8253184 macosx-all,windows-all java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java 8005021,8253184,JBR-9208 macosx-all,windows-all,linux-6.15.8-100.fc41.x86_64
java/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java 8051455 macosx-all java/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java 8051455 macosx-all
java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java 8253184,JBR-5709 windows-all,linux-all java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java 8253184,JBR-5709 windows-all,linux-all
java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java 8253184,JBR-6752 windows-all,linux-all java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java 8253184,JBR-6752 windows-all,linux-all
@@ -613,8 +612,8 @@ java/awt/Modal/ToFront/FrameToFrontModal2Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontModal3Test.java 8253184 windows-all java/awt/Modal/ToFront/FrameToFrontModal3Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontModal4Test.java 8253184 windows-all java/awt/Modal/ToFront/FrameToFrontModal4Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontModal5Test.java 8253184 windows-all java/awt/Modal/ToFront/FrameToFrontModal5Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontModeless1Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Modal/ToFront/FrameToFrontModeless1Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontNonModalTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Modal/ToFront/FrameToFrontNonModalTest.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontTKModal1Test.java 8253184 windows-all java/awt/Modal/ToFront/FrameToFrontTKModal1Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontTKModal2Test.java 8253184 windows-all java/awt/Modal/ToFront/FrameToFrontTKModal2Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontTKModal3Test.java 8253184 windows-all java/awt/Modal/ToFront/FrameToFrontTKModal3Test.java 8253184 windows-all
@@ -663,24 +662,24 @@ java/awt/Modal/OnTop/OnTopAppModal3Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopAppModal4Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopAppModal4Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopAppModal5Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopAppModal5Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopAppModal6Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopAppModal6Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopDocModal1Test.java 8253184,JBR-5510,JBR-7778 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopDocModal1Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal2Test.java 8253184,JBR-5510,JBR-7778 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopDocModal2Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal3Test.java 8253184,JBR-5510,JBR-7778 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopDocModal3Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal4Test.java 8253184,JBR-5510,JBR-7778 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopDocModal4Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal5Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Modal/OnTop/OnTopDocModal5Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopDocModal6Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Modal/OnTop/OnTopDocModal6Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopModal1Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopModal1Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopModal2Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopModal2Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopModal3Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopModal3Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopModal4Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopModal4Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopModal5Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopModal5Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopModal6Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopModal6Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopModeless1Test.java 8253184,JBR-5510,JBR-7778,8342800 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopModeless1Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless2Test.java 8253184,JBR-5510,JBR-7778,8342800 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopModeless2Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless3Test.java 8253184,JBR-5510,JBR-7778,8342800 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopModeless3Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless4Test.java 8253184,JBR-5510,JBR-7778,8342800 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopModeless4Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless5Test.java 8253184,JBR-5510,JBR-7778,8342800 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopModeless5Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless6Test.java 8253184,JBR-5510,JBR-7778,8342800 windows-all,linux-5.18.2-arch1-1,linux-all java/awt/Modal/OnTop/OnTopModeless6Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopTKModal1Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopTKModal1Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopTKModal2Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopTKModal2Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopTKModal3Test.java 8253184 windows-all java/awt/Modal/OnTop/OnTopTKModal3Test.java 8253184 windows-all
@@ -720,8 +719,9 @@ java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersInKeyEvent.java 8157147 linu
java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184,JBR-7076 windows-all,linux-all java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184,JBR-7076 windows-all,linux-all
java/awt/xembed/server/RunTestXEmbed.java 7034201 linux-all java/awt/xembed/server/RunTestXEmbed.java 7034201 linux-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java 8164473 linux-all java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java 8164473 linux-all
java/awt/Frame/DecoratedFrameInsets/DecoratedFrameInsetsTest.java JBR-5205 linux-5.4.0-1103-aws java/awt/Frame/DecoratedFrameInsets/DecoratedFrameInsetsTest.java JBR-5205,JBR-9204 linux-5.4.0-1103-aws,linux-6.15.8-100.fc41.x86_64
java/awt/Frame/DisposeParentGC/DisposeParentGC.java 8079786 macosx-all java/awt/Frame/DisposeParentGC/DisposeParentGC.java 8079786 macosx-all
java/awt/Frame/DynamicLayout/DynamicLayout.java JBR-9205 linux-6.15.8-100.fc41.x86_64
java/awt/GraphicsDevice/DisplayModes/CycleDMImage.java 7099223,8274106 macosx-all,linux-all,windows-all java/awt/GraphicsDevice/DisplayModes/CycleDMImage.java 7099223,8274106 macosx-all,linux-all,windows-all
java/awt/GraphicsDevice/DisplayModes/ExtraAllocationTest.java JBR-6384 macosx-all java/awt/GraphicsDevice/DisplayModes/ExtraAllocationTest.java JBR-6384 macosx-all
@@ -744,8 +744,8 @@ java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.
java/awt/Paint/bug8024864.java JBR-6544 generic-all java/awt/Paint/bug8024864.java JBR-6544 generic-all
java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java 8253184,JBR-6844 windows-all,linux-all java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java 8253184,JBR-6844 windows-all,linux-all
java/awt/Paint/ListRepaint.java JBR-5060 linux-all java/awt/Paint/ListRepaint.java JBR-5060 linux-all
java/awt/Paint/PaintNativeOnUpdate.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Paint/PaintNativeOnUpdate.java 8253184 windows-all
java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-7035 windows-all,macosx-all java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-7035,JBR-9251 windows-all,macosx-all,linux-6.15.8-100.fc41.x86_64
java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.java 8253184 windows-all java/awt/GridBagLayout/GridBagLayoutIpadXYTest/GridBagLayoutIpadXYTest.java 8253184 windows-all
java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java 8238720,8324782 windows-all,macosx-all java/awt/GridLayout/ChangeGridSize/ChangeGridSize.java 8238720,8324782 windows-all,macosx-all
java/awt/GridLayout/ComponentPreferredSize/ComponentPreferredSize.java 8238720,8324782 windows-all,macosx-all java/awt/GridLayout/ComponentPreferredSize/ComponentPreferredSize.java 8238720,8324782 windows-all,macosx-all
@@ -761,11 +761,10 @@ java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java JB
java/awt/Robot/Delay/InterruptOfDelay.java 8265986 macosx-all java/awt/Robot/Delay/InterruptOfDelay.java 8265986 macosx-all
java/awt/MenuBar/MenuBarSetFont/MenuBarSetFont.java JBR-6660 windows-all java/awt/MenuBar/MenuBarSetFont/MenuBarSetFont.java JBR-6660 windows-all
java/awt/MenuBar/TestNoScreenMenuBar.java 8265987 macosx-all java/awt/MenuBar/TestNoScreenMenuBar.java 8265987 macosx-all
java/awt/Robot/ScreenCaptureRobotTest.java#id1 JBR-8720 linux-5.18.2-arch1-1
java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java JBR-5210 windows-all
java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243,JBR-5510,JBR-6632 macosx-all,linux-all java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243,JBR-6632 macosx-all,linux-all
java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java JBR-5225 windows-all java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java JBR-5225,JBR-9350 windows-all,macosx-all
java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java JBR-5082 linux-all java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java JBR-5082 linux-all
java/awt/Window/GetScreenLocation/GetScreenLocationTest.java 8225787,8253184 linux-all,windows-all java/awt/Window/GetScreenLocation/GetScreenLocationTest.java 8225787,8253184 linux-all,windows-all
java/awt/dnd/DragSourceMotionListenerTest.java 8225131 windows-all java/awt/dnd/DragSourceMotionListenerTest.java 8225131 windows-all
@@ -875,14 +874,17 @@ javax/net/ssl/SSLSocket/Tls13PacketSize.java 8354235 windows-all
java/nio/channels/AsynchronousSocketChannel/StressLoopback.java JBR-8817 windows-aarch64 java/nio/channels/AsynchronousSocketChannel/StressLoopback.java JBR-8817 windows-aarch64
java/nio/channels/DatagramChannel/AdaptorMulticasting.java 8144003,JBR-8455,JBR-8456,8308807 macosx-all,aix-ppc64 java/nio/channels/DatagramChannel/AdaptorMulticasting.java 8144003,JBR-8455,JBR-8456,8308807,JBR-9219 macosx-all,aix-ppc64,linux-6.15.8-100.fc41.x86_64
java/nio/channels/DatagramChannel/BasicMulticastTests.java 8144003 macosx-all java/nio/channels/DatagramChannel/BasicMulticastTests.java 8144003 macosx-all
java/nio/channels/DatagramChannel/Loopback.java JBR-9219 linux-6.15.8-100.fc41.x86_64
java/nio/channels/DatagramChannel/ManySourcesAndTargets.java 8264385 macosx-aarch64 java/nio/channels/DatagramChannel/ManySourcesAndTargets.java 8264385 macosx-aarch64
java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java 8144003 macosx-all java/nio/channels/DatagramChannel/MulticastSendReceiveTests.java 8144003,JBR-9218 macosx-all,linux-6.15.8-100.fc41.x86_64
java/nio/channels/DatagramChannel/Promiscuous.java 8144003 macosx-all java/nio/channels/DatagramChannel/Promiscuous.java 8144003,JBR-9218 macosx-all,linux-6.15.8-100.fc41.x86_64
java/nio/channels/DatagramChannel/PromiscuousIPv6.java JBR-8828 macosx-x64 java/nio/channels/DatagramChannel/PromiscuousIPv6.java JBR-8828,JBR-9218 macosx-x64,linux-6.15.8-100.fc41.x86_64
java/nio/channels/DatagramChannel/Unref.java 8233437 generic-all java/nio/channels/DatagramChannel/Unref.java 8233437 generic-all
java/nio/channels/FileChannel/LargeGatheringWrite.java JBR-9316 linux-6.15.8-100.fc41.x86_64
java/nio/channels/Selector/Wakeup.java 6963118 windows-all java/nio/channels/Selector/Wakeup.java 6963118 windows-all
java/nio/file/Files/Misc.java JBR-8969 windows-all java/nio/file/Files/Misc.java JBR-8969 windows-all
@@ -1002,13 +1004,13 @@ javax/accessibility/SlowPanelIteration/SlowPanelIteration.java JBR-870 windows-a
javax/swing/plaf/aqua/CustomComboBoxFocusTest.java JBR-6488 macosx-all javax/swing/plaf/aqua/CustomComboBoxFocusTest.java JBR-6488 macosx-all
javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java 8194945 linux-all,macosx-all javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java 8194945 linux-all,macosx-all
javax/swing/plaf/basic/BasicDirectoryModel/LoaderThreadCount.java 8333880 windows-all javax/swing/plaf/basic/BasicDirectoryModel/LoaderThreadCount.java 8333880 windows-all
javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,windows-all
javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184,JBR-6727 windows-all,linux-all javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184,JBR-6727 windows-all,linux-all
javax/swing/plaf/basic/BasicTableHeaderUI/6394566/bug6394566.java JBR-5846 windows-all javax/swing/plaf/basic/BasicTableHeaderUI/6394566/bug6394566.java JBR-5846 windows-all
javax/swing/plaf/basic/BasicTextUI/8001470/bug8001470.java 8233177 linux-all,windows-all javax/swing/plaf/basic/BasicTextUI/8001470/bug8001470.java 8233177 linux-all,windows-all
javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java 8253184 linux-all,windows-all javax/swing/plaf/basic/BasicTreeUI/8023474/bug8023474.java 8253184 linux-all,windows-all
javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184 windows-all
javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-5510,JBR-8300 windows-all,linux-5.18.2-arch1-1,macosx-all javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-8300 windows-all,macosx-all
javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-6464 windows-all,linux-all,windows-all javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-6464 windows-all,linux-all,windows-all
javax/swing/plaf/nimbus/TestNimbusOverride.java 8253184,JBR-5829 windows-all,linux-all javax/swing/plaf/nimbus/TestNimbusOverride.java 8253184,JBR-5829 windows-all,linux-all
javax/swing/plaf/windows/6921687/bug6921687.java 8253184 windows-all javax/swing/plaf/windows/6921687/bug6921687.java 8253184 windows-all
@@ -1017,10 +1019,10 @@ javax/swing/plaf/windows/WindowsRootPaneUI/WrongAltProcessing/WrongAltProcessing
javax/swing/Box/TestBoxFiller.java JBR-5210 windows-all javax/swing/Box/TestBoxFiller.java JBR-5210 windows-all
javax/swing/DataTransfer/bug4655513.java JBR-8849 windows-all javax/swing/DataTransfer/bug4655513.java JBR-8849 windows-all
javax/swing/DefaultButtonModel/DefaultButtonModelCrashTest.java JBR-5210,JBR-5799 windows-all javax/swing/DefaultButtonModel/DefaultButtonModelCrashTest.java JBR-5210,JBR-5799 windows-all
javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-5210 windows-all javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-5210,JBR-9211 windows-all,macosx-26.0
javax/swing/JButton/4368790/bug4368790.java JBR-5210 windows-all javax/swing/JButton/4368790/bug4368790.java JBR-5210 windows-all
javax/swing/JButton/4659800/SpaceKeyActivatesButton.java JBR-4949 linux-all,windows-all javax/swing/JButton/4659800/SpaceKeyActivatesButton.java JBR-4949 linux-all,windows-all
javax/swing/JButton/8151303/PressedIconTest.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/JButton/8151303/PressedIconTest.java JBR-5210 windows-all
javax/swing/JButton/bug4323121.java JBR-8924 windows-all javax/swing/JButton/bug4323121.java JBR-8924 windows-all
javax/swing/JButton/bug4490179.java JBR-8925 windows-all javax/swing/JButton/bug4490179.java JBR-8925 windows-all
javax/swing/JButton/PressedButtonRightClickTest.java JBR-5210 windows-all javax/swing/JButton/PressedButtonRightClickTest.java JBR-5210 windows-all
@@ -1031,7 +1033,7 @@ javax/swing/JComboBox/4199622/bug4199622.java JBR-6751 winows-x64
javax/swing/JComboBox/4231298/JComboBoxPrototypeDisplayValueTest.java JBR-6777 linux-all javax/swing/JComboBox/4231298/JComboBoxPrototypeDisplayValueTest.java JBR-6777 linux-all
javax/swing/JComboBox/4743225/bug4743225.java JBR-5210 windows-all javax/swing/JComboBox/4743225/bug4743225.java JBR-5210 windows-all
javax/swing/JComboBox/6236162/bug6236162.java JBR-5210 windows-all javax/swing/JComboBox/6236162/bug6236162.java JBR-5210 windows-all
javax/swing/JComboBox/6406264/bug6406264.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/JComboBox/6406264/bug6406264.java JBR-5210 windows-all
javax/swing/JComboBox/6607130/bug6607130.java JBR-5799 windows-x64 javax/swing/JComboBox/6607130/bug6607130.java JBR-5799 windows-x64
javax/swing/JComboBox/bug4890345.java JBR-5799 windows-all javax/swing/JComboBox/bug4890345.java JBR-5799 windows-all
javax/swing/JComboBox/bug4924758.java JBR-5846 windows-all javax/swing/JComboBox/bug4924758.java JBR-5846 windows-all
@@ -1039,9 +1041,9 @@ javax/swing/JComboBox/bug5029504.java JBR-5799 windows-all
javax/swing/JComboBox/ConsumedKeyTest/ConsumedKeyTest.java JBR-5210 windows-all javax/swing/JComboBox/ConsumedKeyTest/ConsumedKeyTest.java JBR-5210 windows-all
javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-8270 linux-all javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-8270 linux-all
javax/swing/JComponent/6683775/bug6683775.java 8172337 generic-all javax/swing/JComponent/6683775/bug6683775.java 8172337 generic-all
javax/swing/JDialog/Transparency/TransparencyTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/JDialog/Transparency/TransparencyTest.java 8253184 windows-all
javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-4949 linux-all,windows-all javax/swing/JLabel/4138746/JLabelMnemonicsTest.java JBR-4949 linux-all,windows-all
javax/swing/JLabel/6596966/bug6596966.java 8197552 windows-all javax/swing/JLabel/6596966/bug6596966.java 8197552,JBR-9195 windows-all,linux-6.15.8-100.fc41.x86_64
javax/swing/JLabel/7004134/bug7004134.java JBR-5437 linux-all javax/swing/JLabel/7004134/bug7004134.java JBR-5437 linux-all
javax/swing/JLabel/bug4822331.java JBR-7422 windows-10.0 javax/swing/JLabel/bug4822331.java JBR-7422 windows-10.0
javax/swing/JList/4618767/JListSelectedElementTest.java JBR-4955 windows-all javax/swing/JList/4618767/JListSelectedElementTest.java JBR-4955 windows-all
@@ -1058,14 +1060,15 @@ javax/swing/JMenuBar/4750590/bug4750590.java JBR-6094 windows-all
javax/swing/JMenuItem/4171437/bug4171437.java JBR-6112 windows-all javax/swing/JMenuItem/4171437/bug4171437.java JBR-6112 windows-all
javax/swing/JMenuItem/4654927/bug4654927.java JBR-164,JBR-4337 windows-all,linux-all javax/swing/JMenuItem/4654927/bug4654927.java JBR-164,JBR-4337 windows-all,linux-all
javax/swing/JMenuItem/6209975/bug6209975.java 8253184 windows-all javax/swing/JMenuItem/6209975/bug6209975.java 8253184 windows-all
javax/swing/JMenuItem/8158566/CloseOnMouseClickPropertyTest.java JBR-5510,JBR-5545,JBR-6511 windows-all,linux-all,macosx-all javax/swing/JMenuItem/8158566/CloseOnMouseClickPropertyTest.java JBR-5545,JBR-6511 windows-all,linux-all,macosx-all
javax/swing/JMenuItem/bug4839464.java JBR-5911 windows-all javax/swing/JMenuItem/bug4839464.java JBR-5911 windows-all
javax/swing/JMenuItem/6249972/bug6249972.java 8197552 windows-all javax/swing/JMenuItem/6249972/bug6249972.java 8197552 windows-all
javax/swing/JOptionPane/7138665/bug7138665.java JBR-5799 windows-all javax/swing/JOptionPane/7138665/bug7138665.java JBR-5799 windows-all
javax/swing/JOptionPane/8081019/bug8081019.java JBR-5767 windows-all javax/swing/JOptionPane/8081019/bug8081019.java JBR-5767,JBR-9350 windows-all,macosx-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-5510,JBR-8665 linux-5.18.2-arch1-1,linux-6.8.0-1017-raspi javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-8665 linux-6.8.0-1017-raspi
javax/swing/JProgressBar/8015748/JProgressBarOrientationRobotTest.java JBR-8571 linux-all javax/swing/JProgressBar/8015748/JProgressBarOrientationRobotTest.java JBR-8571 linux-all
javax/swing/JProgressBar/8161664/ProgressBarMemoryLeakTest.java JBR-8926 macosx-x64 javax/swing/JProgressBar/8161664/ProgressBarMemoryLeakTest.java JBR-8926 macosx-x64
javax/swing/JProgressBar/TestJProgressBarHighlightColor.java JBR-9199 linux-6.15.8-100.fc41.x86_64
javax/swing/JPopupMenu/4634626/bug4634626.java 8253184 windows-all javax/swing/JPopupMenu/4634626/bug4634626.java 8253184 windows-all
javax/swing/JPopupMenu/4760494/bug4760494.java 8253184 windows-all javax/swing/JPopupMenu/4760494/bug4760494.java 8253184 windows-all
javax/swing/JPopupMenu/4870644/bug4870644.java 8194130 macosx-all,linux-all javax/swing/JPopupMenu/4870644/bug4870644.java 8194130 macosx-all,linux-all
@@ -1083,17 +1086,21 @@ javax/swing/JPopupMenu/8075063/ContextMenuScrollTest.java JBR-6717 linux-all
javax/swing/JPopupMenu/8173739/TestPopupMenu.java JBR-6959 linux-aarch64 javax/swing/JPopupMenu/8173739/TestPopupMenu.java JBR-6959 linux-aarch64
javax/swing/JPopupMenu/SetInvokerJPopupMenuTest.java JBR-6021 linux-all javax/swing/JPopupMenu/SetInvokerJPopupMenuTest.java JBR-6021 linux-all
javax/swing/JRadioButton/8033699/bug8033699.java 8197552 windows-all javax/swing/JRadioButton/8033699/bug8033699.java 8197552 windows-all
javax/swing/JRadioButton/8075609/bug8075609.java 8197552,8266085,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/JRadioButton/8075609/bug8075609.java 8197552,8266085 windows-all
javax/swing/JRadioButton/ButtonGroupFocus/ButtonGroupFocusTest.java 8197552,8266085 windows-all javax/swing/JRadioButton/ButtonGroupFocus/ButtonGroupFocusTest.java 8197552,8266085 windows-all
javax/swing/JRadioButton/FocusTraversal/FocusTraversal.java 8266085 windows-all javax/swing/JRadioButton/FocusTraversal/FocusTraversal.java 8266085 windows-all
javax/swing/JTree/TestTreeBackgroundColor.java JBR-5510,JBR-8748 linux-5.18.2-arch1-1,linux-all javax/swing/JTree/TestTreeBackgroundColor.java JBR-8748 linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java 8233582,JBR-6481 linux-all,windows-all,macosx-all javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java 8233582,JBR-6481 linux-all,windows-all,macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8233582,JBR-6360 linux-all,windows-all,macosx-all javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8233582,JBR-6360 linux-all,windows-all,macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8253184,JBR-5510,JBR-7404 windows-all,linux-5.18.2-arch1-1,macosx-all javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8253184,JBR-7404 windows-all,macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128,8253184,JBR-5510,JBR-6515 macosx-all,windows-all,linux-5.18.2-arch1-1,linux-all javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128,8253184,JBR-6515 macosx-all,windows-all,linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450,8253184 macosx-all,windows-all javax/swing/JWindow/ShapedAndTranslucentWindows/SetShapeAndClickSwing.java 8013450,8253184 macosx-all,windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627,8253184 macosx-all,windows-all javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627,8253184 macosx-all,windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentPerPixelTranslucentGradient.java JBR-8327 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentWindowClickSwing.java 8253184 windows-all javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentWindowClickSwing.java 8253184 windows-all
javax/swing/LookAndFeel/8145547/DemandGTK2.sh JBR-9202 linux-6.15.8-100.fc41.x86_64
javax/swing/LookAndFeel/8145547/DemandGTK3.sh JBR-9202 linux-6.15.8-100.fc41.x86_64
# The next test below is an intermittent failure # The next test below is an intermittent failure
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131 linux-all javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131 linux-all
javax/swing/JTree/4330357/bug4330357.java 8253184,JBR-6466 windows-all,linux-all javax/swing/JTree/4330357/bug4330357.java 8253184,JBR-6466 windows-all,linux-all
@@ -1101,7 +1108,7 @@ javax/swing/JTree/4633594/JTreeFocusTest.java 7105441,JBR-5210 macosx-all,window
javax/swing/JTree/4908142/bug4908142.java 8197552,JBR-151 windows-all javax/swing/JTree/4908142/bug4908142.java 8197552,JBR-151 windows-all
javax/swing/AbstractButton/bug6298940.java JBR-8307 windows-all javax/swing/AbstractButton/bug6298940.java JBR-8307 windows-all
javax/swing/AbstractButton/6711682/bug6711682.java 8060765 windows-all,macosx-all,linux-5.15.0-39-generic,linux-5.15.0-33-generic,linux-5.19.0-1025-aws,linux-6.5.0-1024-aws javax/swing/AbstractButton/6711682/bug6711682.java 8060765 windows-all,macosx-all,linux-5.15.0-39-generic,linux-5.15.0-33-generic,linux-5.19.0-1025-aws,linux-6.5.0-1024-aws
javax/swing/AbstractDocument/bug4549069.java JBR-8922 windows-x64 javax/swing/AbstractDocument/bug4549069.java JBR-8922 windows-all
javax/swing/Action/8133039/bug8133039.java JBR-5210 windows-all javax/swing/Action/8133039/bug8133039.java JBR-5210 windows-all
javax/swing/ButtonGroup/TestButtonGroupFocusTraversal.java JBR-5210,JBR-8268 windows-all,linux-all javax/swing/ButtonGroup/TestButtonGroupFocusTraversal.java JBR-5210,JBR-8268 windows-all,linux-all
javax/swing/event/RightAltKeyTest.java JBR-5210 windows-all javax/swing/event/RightAltKeyTest.java JBR-5210 windows-all
@@ -1125,24 +1132,23 @@ javax/swing/JFileChooser/8194044/FileSystemRootTest.java JBR-5767 windows-all
javax/swing/JFileChooser/ShellFolderQueries/ShellFolderQueriesSecurityManagerTest.java JBR-5767 windows-all javax/swing/JFileChooser/ShellFolderQueries/ShellFolderQueriesSecurityManagerTest.java JBR-5767 windows-all
javax/swing/JFormattedTextField/bug4863121.java JBR-7424 windows-10.0 javax/swing/JFormattedTextField/bug4863121.java JBR-7424 windows-10.0
javax/swing/JFrame/8016356/bug8016356.java JBR-108 windows-all javax/swing/JFrame/8016356/bug8016356.java JBR-108 windows-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java 8274106,JBR-5510,JBR-6999 macosx-aarch64,linux-5.18.2-arch1-1,windows-x64,macosx-x64 javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java 8274106,JBR-6999 macosx-aarch64,windows-x64,macosx-x64
javax/swing/JFrame/NSTexturedJFrame/NSTexturedJFrame.java JBR-8837 macosx-all javax/swing/JFrame/NSTexturedJFrame/NSTexturedJFrame.java JBR-8837 macosx-all
javax/swing/JScrollPane/HorizontalMouseWheelOnShiftPressed/HorizontalMouseWheelOnShiftPressed.java 8197552 windows-all javax/swing/JScrollPane/HorizontalMouseWheelOnShiftPressed/HorizontalMouseWheelOnShiftPressed.java 8197552 windows-all
javax/swing/JSplitPane/4885629/bug4885629.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JTabbedPane/4361477/bug4361477.java JBR-5932 linux-all javax/swing/JTabbedPane/4361477/bug4361477.java JBR-5932 linux-all
javax/swing/JTabbedPane/8007563/Test8007563.java 8051591 generic-all javax/swing/JTabbedPane/8007563/Test8007563.java 8051591 generic-all
javax/swing/JTabbedPane/4624207/bug4624207.java 8064922,8197552,JBR-6235 macosx-all,windows-all,linux-all 8064922:macosx-all, 8197552:windows-all javax/swing/JTabbedPane/4624207/bug4624207.java 8064922,8197552,JBR-6235 macosx-all,windows-all,linux-all 8064922:macosx-all, 8197552:windows-all
javax/swing/JTabbedPane/TestBackgroundScrollPolicy.java 8253184,JBR-8498 windows-all,linux-5.18.2-arch1-1,macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 javax/swing/JTabbedPane/TestBackgroundScrollPolicy.java 8253184,JBR-8498 windows-all,macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
javax/swing/JTabbedPane/TestJTabbedPaneBackgroundColor.java JBR-8718 linux-5.18.2-arch1-1,macosx-15.4.1 javax/swing/JTabbedPane/TestJTabbedPaneBackgroundColor.java JBR-8493 macosx-15.4.1,macosx-15.6,macosx-15.6.1
javax/swing/JToggleButton/TestSelectedKey.java JBR-5846 windows-all javax/swing/JToggleButton/TestSelectedKey.java JBR-5846 windows-all
javax/swing/JToolBar/4529206/bug4529206.java JBR-5387 linux-all javax/swing/JToolBar/4529206/bug4529206.java JBR-5387 linux-all
javax/swing/JToolTip/6219960/bug6219960.java 8253184 windows-all javax/swing/JToolTip/6219960/bug6219960.java 8253184 windows-all
javax/swing/JToolTip/TestTooltipBackgroundColor.java JBR-9201 linux-6.15.8-100.fc41.x86_64
javax/swing/SwingUtilities/TestBadBreak/TestBadBreak.java 8160720 generic-all javax/swing/SwingUtilities/TestBadBreak/TestBadBreak.java 8160720 generic-all
javax/swing/system/6799345/TestShutdown.java JBR-6881 windows-all javax/swing/system/6799345/TestShutdown.java JBR-6881 windows-all,macosx-all
javax/swing/text/AbstractDocument/8190763/TestCCEOnEditEvent.java JBR-5799 windows-all javax/swing/text/AbstractDocument/8190763/TestCCEOnEditEvent.java JBR-5799 windows-all
javax/swing/text/DefaultCaret/HidingSelection/HidingSelectionTest.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/text/StyledEditorKit/bug4329418.java JBR-7423 windows-10.0 javax/swing/text/StyledEditorKit/bug4329418.java JBR-7423 windows-10.0
javax/swing/text/TableView/TableViewLayoutTest.java 8194936,JBR-4316,JBR-5510 linux-5.18.2-arch1-1,linux-all javax/swing/text/TableView/TableViewLayoutTest.java 8194936,JBR-4316 linux-all
javax/swing/JFileChooser/6798062/bug6798062.java 8146446 windows-all javax/swing/JFileChooser/6798062/bug6798062.java 8146446 windows-all
javax/swing/JComboBox/4515752/DefaultButtonTest.java JBR-5799 windows-all javax/swing/JComboBox/4515752/DefaultButtonTest.java JBR-5799 windows-all
javax/swing/JComboBox/4523758/bug4523758.java 8253184 windows-all javax/swing/JComboBox/4523758/bug4523758.java 8253184 windows-all
@@ -1153,31 +1159,31 @@ javax/swing/JComboBox/8182031/ComboPopupTest.java 8253184 windows-all
javax/swing/JInternalFrame/6288609/TestJInternalFrameDispose.java JBR-788 windows-all,linux-all javax/swing/JInternalFrame/6288609/TestJInternalFrameDispose.java JBR-788 windows-all,linux-all
javax/swing/JInternalFrame/6647340/bug6647340.java 8253184 windows-all javax/swing/JInternalFrame/6647340/bug6647340.java 8253184 windows-all
javax/swing/JInternalFrame/8145060/TestJInternalFrameMinimize.java JBR-788 windows-all,linux-all javax/swing/JInternalFrame/8145060/TestJInternalFrameMinimize.java JBR-788 windows-all,linux-all
javax/swing/JInternalFrame/8145896/TestJInternalFrameMaximize.java JBR-5539 windows-all,,linux-5.18.2-arch1-1 javax/swing/JInternalFrame/8145896/TestJInternalFrameMaximize.java JBR-5539 windows-all
javax/swing/JInternalFrame/Test6325652.java JBR-6111 windows-all javax/swing/JInternalFrame/JInternalFrameTest.java JBR-9193 linux-6.15.8-100.fc41.x86_64
javax/swing/JInternalFrame/Test6325652.java JBR-6111,JBR-9194 windows-all,linux-6.15.8-100.fc41.x86_64
javax/swing/JInternalFrame/Test6505027.java JBR-5954 linux-all,macosx-all javax/swing/JInternalFrame/Test6505027.java JBR-5954 linux-all,macosx-all
javax/swing/JInternalFrame/Test6802868.java 8253184 windows-all javax/swing/JInternalFrame/Test6802868.java 8253184 windows-all
javax/swing/ProgressMonitor/ProgressMonitorEscapeKeyPress.java JBR-5210 windows-all javax/swing/ProgressMonitor/ProgressMonitorEscapeKeyPress.java JBR-5210 windows-all
javax/swing/dnd/8139050/NativeErrorsInTableDnD.java 8202765,JBR-5210 macosx-all,linux-all,windows-all javax/swing/dnd/8139050/NativeErrorsInTableDnD.java 8202765,JBR-5210 macosx-all,linux-all,windows-all
javax/swing/JEditorPane/6917744/bug6917744.java 8213124 macosx-all javax/swing/JEditorPane/6917744/bug6917744.java 8213124 macosx-all
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510,JBR-6283 windows-all,linux-5.18.2-arch1-1,macosx-all javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-6283 windows-all,macosx-all
javax/swing/JRadioButton/4314194/bug4314194.java 8298153 linux-all javax/swing/JRadioButton/4314194/bug4314194.java 8298153 linux-all
javax/swing/JRootPane/4670486/bug4670486.java 8197552 windows-all javax/swing/JRootPane/4670486/bug4670486.java 8197552 windows-all
javax/swing/JRootPane/DefaultButtonTest.java JBR-5739 windows-all,linux-all javax/swing/JRootPane/DefaultButtonTest.java JBR-5739 windows-all,linux-all
javax/swing/text/html/HTMLDocument/HTMLTextDecorationNone.java JBR-8312 generic-all javax/swing/text/html/HTMLDocument/HTMLTextDecorationNone.java JBR-8312 generic-all
javax/swing/text/html/HTMLEditorKit/5043626/bug5043626.java JBR-5210 windows-all javax/swing/text/html/HTMLEditorKit/5043626/bug5043626.java JBR-5210 windows-all
javax/swing/text/html/StyleSheet/bug4476002.java JBR-7498 linux-5.18.2-arch1-1 javax/swing/text/html/StyleSheet/bug4936917.java JBR-899 windows-all
javax/swing/text/html/StyleSheet/bug4936917.java JBR-899,JBR-5510 windows-all,linux-5.18.2-arch1-1
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id0 JBR-5799 windows-all javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id0 JBR-5799 windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id1 JBR-5779 linux-all,macosx-all javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id1 JBR-5779 linux-all,macosx-all
javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184 windows-all
javax/swing/plaf/synth/7158712/bug7158712.java JBR-125,8322653 linux-all,windows-all,macosx-all javax/swing/plaf/synth/7158712/bug7158712.java JBR-125,8322653 linux-all,windows-all,macosx-all
javax/swing/plaf/synth/SynthButtonUI/6276188/bug6276188.java 8253184,JBR-5510,JBR-803 windows-all,linux-all,macosx-all javax/swing/plaf/synth/SynthButtonUI/6276188/bug6276188.java 8253184,JBR-803 windows-all,linux-all,macosx-all
javax/swing/plaf/synth/SynthScrollbarThumbPainter/SynthScrollbarThumbPainterTest.java 8253184 windows-all javax/swing/plaf/synth/SynthScrollbarThumbPainter/SynthScrollbarThumbPainterTest.java 8253184 windows-all
javax/swing/plaf/synth/Test6660049.java JBR-8397 windows-all javax/swing/plaf/synth/Test6660049.java JBR-8397 windows-all
javax/swing/plaf/synth/Test8043627.java JBR-5767 windows-all javax/swing/plaf/synth/Test8043627.java JBR-5767 windows-all
javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 javax/swing/JInternalFrame/5066752/bug5066752.java 8253184 windows-all
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5510,JBR-6546 linux-5.18.2-arch1-1,windows-x64 javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-6546,JBR-9212 windows-x64,macosx-26.0
javax/swing/JInternalFrame/8020708/bug8020708.java JBR-4879,JBR-6512 windows-all,linux-all javax/swing/JInternalFrame/8020708/bug8020708.java JBR-4879,JBR-6512 windows-all,linux-all
javax/swing/JInternalFrame/8069348/bug8069348.java 8253184,JBR-900 windows-all,linux-all javax/swing/JInternalFrame/8069348/bug8069348.java 8253184,JBR-900 windows-all,linux-all
javax/swing/reliability/HangDuringStaticInitialization.java JBR-6958,JBR-8145 windows-aarch64,windows-x64 javax/swing/reliability/HangDuringStaticInitialization.java JBR-6958,JBR-8145 windows-aarch64,windows-x64
@@ -1186,21 +1192,22 @@ javax/swing/ToolTipManager/Test6256140.java 8197552 windows-all
javax/swing/text/DefaultEditorKit/4278839/bug4278839.java CODETOOLS-7901623 windows-all javax/swing/text/DefaultEditorKit/4278839/bug4278839.java CODETOOLS-7901623 windows-all
javax/swing/text/GlyphPainter2/6427244/bug6427244.java JBR-896 windows-all javax/swing/text/GlyphPainter2/6427244/bug6427244.java JBR-896 windows-all
javax/swing/text/JTextComponent/5074573/bug5074573.java CODETOOLS-7901623,JBR-5386 windows-all,linux-all javax/swing/text/JTextComponent/5074573/bug5074573.java CODETOOLS-7901623,JBR-5386 windows-all,linux-all
javax/swing/text/JTextComponent/6361367/bug6361367.java JBR-5210,JBR-6687 windows-all,linux-5.18.2-arch1-1 javax/swing/text/JTextComponent/6361367/bug6361367.java JBR-5210 windows-all
javax/swing/text/View/8014863/bug8014863.java JBR-5541 windows-all,linux-all javax/swing/text/View/8014863/bug8014863.java JBR-5541 windows-all,linux-all
javax/swing/text/View/8156217/FPMethodCalledTest.java JBR-5541 linux-all javax/swing/text/View/8156217/FPMethodCalledTest.java JBR-5541 linux-all
javax/swing/UIDefaults/6795356/TableTest.java JBR-5767 windows-all javax/swing/UIDefaults/6795356/TableTest.java JBR-5767 windows-all
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184,JBR-1656 windows-all,linux-all java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184,JBR-1656 windows-all,linux-all
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184 windows-all
java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1 java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184 windows-all
java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5802 windows-all java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5802 windows-all
java/awt/Robot/MouseLocationOnScreen/MouseLocationOnScreen.java JBR-9209 linux-6.15.8-100.fc41.x86_64
java/awt/Robot/MultiScreenRobotPosition/MultiScreenRobotPosition.java JBR-830 windows-all java/awt/Robot/MultiScreenRobotPosition/MultiScreenRobotPosition.java JBR-830 windows-all
javax/swing/SwingGraphics/TranslateTest.java JBR-7470 linux-all javax/swing/SwingGraphics/TranslateTest.java JBR-7470 linux-all
native_sanity/simplenativelauncher/ProgramTest.java JBR-5287 windows-all native_sanity/simplenativelauncher/ProgramTest.java JBR-5287 windows-all
sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-5510,JBR-6475 windows-all,macosx-all,linux-all sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-6475 windows-all,macosx-all,linux-all
sanity/client/SwingSet/src/ColorChooserDemoTest.java 8278582,8273312,JBR-5510 windows-all,linux-5.18.2-arch1-1 sanity/client/SwingSet/src/ColorChooserDemoTest.java 8278582,8273312 windows-all
sanity/client/SwingSet/src/DialogDemoTest.java 8253184 windows-all sanity/client/SwingSet/src/DialogDemoTest.java 8253184 windows-all
sanity/client/SwingSet/src/FileChooserDemoTest.java JBR-8397 windows-all sanity/client/SwingSet/src/FileChooserDemoTest.java JBR-8397 windows-all
sanity/client/SwingSet/src/FrameDemoTest.java 8253184 windows-all sanity/client/SwingSet/src/FrameDemoTest.java 8253184 windows-all
@@ -1235,6 +1242,7 @@ tools/jlink/plugins/VendorInfoPluginsTest.java JBR-8783 windows-aarch64
tools/jpackage/share/AddLauncherTest.java#id1 JBR-8701 windows-all tools/jpackage/share/AddLauncherTest.java#id1 JBR-8701 windows-all
tools/jpackage/share/IconTest.java JBR-8701 windows-all tools/jpackage/share/IconTest.java JBR-8701 windows-all
tools/jpackage/share/MultiNameTwoPhaseTest.java JBR-8860 linux-all tools/jpackage/share/MultiNameTwoPhaseTest.java JBR-8860 linux-all
tools/jpackage/share/ServiceTest.java JBR-9191 linux-x64
tools/jpackage/windows/Win8301247Test.java JBR-8708 windows-all tools/jpackage/windows/Win8301247Test.java JBR-8708 windows-all
tools/launcher/Arrrghs.java JBR-8466 generic-all tools/launcher/Arrrghs.java JBR-8466 generic-all
tools/launcher/ChangeDataModel.java JBR-8467 generic-all tools/launcher/ChangeDataModel.java JBR-8467 generic-all
@@ -1305,9 +1313,9 @@ jdk/jfr/startupargs/TestStartDuration.java 8214685 windows-
jdk/jfr/jvm/TestDumpOnCrash.java JBR-8780 windows-aarch64 jdk/jfr/jvm/TestDumpOnCrash.java JBR-8780 windows-aarch64
jdk/jfr/jvm/TestWaste.java 8282427 generic-all jdk/jfr/jvm/TestWaste.java 8282427 generic-all
jdk/jfr/api/consumer/recordingstream/TestOnEvent.java 8255404 linux-x64 jdk/jfr/api/consumer/recordingstream/TestOnEvent.java 8255404 linux-x64
jdk/jfr/api/consumer/streaming/TestOutOfProcessMigration.java JBR-8460 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 jdk/jfr/api/consumer/streaming/TestOutOfProcessMigration.java JBR-8460 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
jdk/jfr/api/consumer/streaming/TestJVMCrash.java JBR-8459 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 jdk/jfr/api/consumer/streaming/TestJVMCrash.java JBR-8459 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
jdk/jfr/api/consumer/streaming/TestJVMExit.java JBR-8460 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 jdk/jfr/api/consumer/streaming/TestJVMExit.java JBR-8460 macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
############################################################################ ############################################################################
@@ -1347,6 +1355,7 @@ javax/swing/JFileChooser/6698013/bug6698013.java 8024419 macosx-all
javax/swing/JColorChooser/8065098/bug8065098.java 8065647 macosx-all javax/swing/JColorChooser/8065098/bug8065098.java 8065647 macosx-all
java/awt/Modal/PrintDialogsTest/PrintDialogsTest.java 8068378 generic-all java/awt/Modal/PrintDialogsTest/PrintDialogsTest.java 8068378 generic-all
javax/swing/JTabbedPane/4666224/bug4666224.html 8144124 macosx-all javax/swing/JTabbedPane/4666224/bug4666224.html 8144124 macosx-all
javax/swing/JTextArea/4697612/bug4697612.java JBR-9200 linux-6.15.8-100.fc41.x86_64
javax/swing/JTextArea/8149849/DNDTextToScaledArea.java 8253184 windows-all javax/swing/JTextArea/8149849/DNDTextToScaledArea.java 8253184 windows-all
javax/swing/JTextArea/7049024/bug7049024.java JBR-5836 linux-all javax/swing/JTextArea/7049024/bug7049024.java JBR-5836 linux-all
java/awt/event/MouseEvent/AcceptExtraButton/AcceptExtraButton.java JBR-6353 linux-all,windows-aarch64,macosx-all java/awt/event/MouseEvent/AcceptExtraButton/AcceptExtraButton.java JBR-6353 linux-all,windows-aarch64,macosx-all
@@ -1359,9 +1368,6 @@ java/awt/TrayIcon/DblClickActionEventTest/DblClickActionEventTest.html 8203867 m
java/awt/Frame/FrameStateTest/FrameStateTest.html 8203920 macosx-all,linux-all java/awt/Frame/FrameStateTest/FrameStateTest.html 8203920 macosx-all,linux-all
javax/swing/SwingUtilities/TestTextPosInPrint.java 8227025 windows-all javax/swing/SwingUtilities/TestTextPosInPrint.java 8227025 windows-all
java/awt/print/PrinterJob/ScaledText/ScaledText.java 8231226 macosx-all java/awt/print/PrinterJob/ScaledText/ScaledText.java 8231226 macosx-all
java/awt/font/ComplexEmoji.java JBR-5009 linux-aarch64
java/awt/font/OutlineTextRendererEmoji.java JBR-5009 linux-aarch64
java/awt/font/EmojiVariation.java JBR-5009,JBR-5510 linux-aarch64,linux-5.18.2-arch1-1
java/awt/font/TextLayout/TestSinhalaChar.java JBR-5103 generic-all java/awt/font/TextLayout/TestSinhalaChar.java JBR-5103 generic-all
javax/swing/JTableHeader/6884066/bug6884066.java JBR-113 windows-all,linux-aarch64 javax/swing/JTableHeader/6884066/bug6884066.java JBR-113 windows-all,linux-aarch64
javax/swing/JTableHeader/6889007/bug6889007.java 8253184,JBR-5387 windows-all,linux-all javax/swing/JTableHeader/6889007/bug6889007.java 8253184,JBR-5387 windows-all,linux-all
@@ -1418,7 +1424,12 @@ com/sun/java/accessibility/util/8051626/Bug8051626.java JBR-5767 windows-all
com/sun/java/swing/plaf/windows/Test8173145.java JBR-4197 windows-all com/sun/java/swing/plaf/windows/Test8173145.java JBR-4197 windows-all
com/sun/java/swing/plaf/windows/AltFocusIssueTest.java JBR-4197 windows-all com/sun/java/swing/plaf/windows/AltFocusIssueTest.java JBR-4197 windows-all
jb/java/awt/Graphics2D/TextRender/OGLMetalTextRender.java JBR-4091,JBR-5392 windows-aarch64,macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5 jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java JBR-9196 macosx-26.0
jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java JBR-9196 macosx-26.0
jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java JBR-9196 macosx-26.0
jb/java/awt/CustomTitleBar/MinimizingWindowTest.java JBR-9196 macosx-26.0
jb/java/awt/Graphics2D/TextRender/OGLMetalTextRender.java JBR-4091,JBR-5392 windows-aarch64,macosx-15.3,macosx-15.3.1,macosx-15.3.2,macosx-15.4,macosx-15.5,macosx-15.6,macosx-15.6.1
jb/java/awt/event/MouseEvent/MouseMoveEventFallThroughTest.java JBR-8789 windows-all jb/java/awt/event/MouseEvent/MouseMoveEventFallThroughTest.java JBR-8789 windows-all
jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh JBR-4078 linux-all jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh JBR-4078 linux-all
jb/java/awt/Font/font430.sh JBR-4956 linux-all jb/java/awt/Font/font430.sh JBR-4956 linux-all
@@ -1441,7 +1452,6 @@ java/awt/event/KeyEvent/KeyCharTest/KeyCharTest.java JBR-4880 windows-all
java/awt/Frame/LayoutOnMaximizeTest/LayoutOnMaximizeTest.java JBR-4880 windows-all java/awt/Frame/LayoutOnMaximizeTest/LayoutOnMaximizeTest.java JBR-4880 windows-all
java/awt/Frame/MiscUndecorated/UndecoratedInitiallyIconified.java JBR-4880 windows-all java/awt/Frame/MiscUndecorated/UndecoratedInitiallyIconified.java JBR-4880 windows-all
java/awt/FullScreen/SetFSWindow/FSFrame.java 8253184 windows-all java/awt/FullScreen/SetFSWindow/FSFrame.java 8253184 windows-all
java/awt/FullScreen/SetFullScreenTest.java JBR-8214 linux-5.18.2-arch1-1
java/awt/grab/MenuDragEvents/MenuDragEvents.java JBR-4880 windows-all java/awt/grab/MenuDragEvents/MenuDragEvents.java JBR-4880 windows-all
java/awt/image/mlib/MlibOpsTest.java JBR-5225 windows-all,windows-aarch64 java/awt/image/mlib/MlibOpsTest.java JBR-5225 windows-all,windows-aarch64
java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-all java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-all
@@ -1454,7 +1464,7 @@ javax/swing/JSpinner/8223788/JSpinnerButtonFocusTest.java JBR-5210 windows-all
javax/swing/JSpinner/JSpinnerFocusTest.java JBR-5288 windows-all javax/swing/JSpinner/JSpinnerFocusTest.java JBR-5288 windows-all
javax/swing/JSpinner/SpinnerTest.java JBR-4880 windows-all javax/swing/JSpinner/SpinnerTest.java JBR-4880 windows-all
javax/swing/JSpinner/TestJSpinnerFocusLost.java JBR-5210 windows-all javax/swing/JSpinner/TestJSpinnerFocusLost.java JBR-5210 windows-all
javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-5510,JBR-8665 linux-5.18.2-arch1-1,linux-6.8.0-1017-raspi javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-8665 linux-6.8.0-1017-raspi
javax/swing/JTable/7068740/bug7068740.java 8197552,JBR-6680 windows-all,linux-all javax/swing/JTable/7068740/bug7068740.java 8197552,JBR-6680 windows-all,linux-all
javax/swing/JTable/7124218/SelectEditTableCell.java JBR-6679 linux-all,windows-all javax/swing/JTable/7124218/SelectEditTableCell.java JBR-6679 linux-all,windows-all
javax/swing/JTable/8236907/LastVisibleRow.java JBR-6066 generic-all javax/swing/JTable/8236907/LastVisibleRow.java JBR-6066 generic-all
@@ -1463,14 +1473,9 @@ javax/swing/JTable/JTableOrientationNavTest/JTableOrientationNavTest.java JBR-68
javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-6465 windows-all,linux-aarch64 javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-6465 windows-all,linux-aarch64
javax/swing/text/FlowView/LayoutTest.java JBR-4880 windows-all javax/swing/text/FlowView/LayoutTest.java JBR-4880 windows-all
javax/swing/text/html/7189299/bug7189299.java JBR-4880 windows-all javax/swing/text/html/7189299/bug7189299.java JBR-4880 windows-all
jb/java/awt/wayland/RobotGetOOBPixelsTest.java JBR-8029 linux-5.18.2-arch1-1
jb/java/awt/wayland/RobotGetPixelTest.java JBR-8029 linux-5.18.2-arch1-1
jb/java/awt/wayland/RobotGetPixelsTest.java JBR-8029 linux-5.18.2-arch1-1
jb/java/jcef/HandleJSQueryTest3314.sh JBR-4866 linux-all jb/java/jcef/HandleJSQueryTest3314.sh JBR-4866 linux-all
jb/java/jcef/HwFacadeWindowNoFrontTest.java jb/java/jcef/HwFacadeWindowNoFrontTest.java
jb/java/io/IoOverNio/FileTest.java JBR-8866 linux-5.18.2-arch1-1
jb/sun/awt/macos/InputMethodTest/ChineseCapsLockTest.java JBR-7242 macosx-all jb/sun/awt/macos/InputMethodTest/ChineseCapsLockTest.java JBR-7242 macosx-all
jb/sun/awt/macos/InputMethodTest/JapaneseReconvertTest.java JBR-7172,JBR-7243 macosx-all jb/sun/awt/macos/InputMethodTest/JapaneseReconvertTest.java JBR-7172,JBR-7243 macosx-all
jb/sun/awt/macos/KeyPressAndHoldTest.java JBR-4901 macosx-all jb/sun/awt/macos/KeyPressAndHoldTest.java JBR-4901 macosx-all
@@ -1525,59 +1530,34 @@ javax/sound/sampled/Lines/SDLwrite.java JBR-4455 linux-aarch64
javax/sound/sampled/spi/MixerProvider/ExpectedNPEOnNull.java JBR-4455 linux-aarch64 javax/sound/sampled/spi/MixerProvider/ExpectedNPEOnNull.java JBR-4455 linux-aarch64
javax/sound/sampled/Mixers/BogusMixers.java JBR-4455 linux-aarch64 javax/sound/sampled/Mixers/BogusMixers.java JBR-4455 linux-aarch64
java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java JBR-5510,8310487 linux-5.18.2-arch1-1,linux-all java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java 8310487 linux-all
java/awt/Choice/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5510,JBR-5905 linux-5.18.2-arch1-1,linux-all java/awt/Choice/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5905 linux-all
java/awt/Choice/SelectItem/SelectCurrentItemTest.java JBR-8788 windows-all
java/awt/Choice/SelectNewItemTest/SelectNewItemTest.java 8315733,8322653,8324782 macosx-all java/awt/Choice/SelectNewItemTest/SelectNewItemTest.java 8315733,8322653,8324782 macosx-all
java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-5510 linux-5.18.2-arch1-1 java/awt/Mixing/AWT_Mixing/JGlassPaneInternalFrameOverlapping.java 8049405 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JGlassPaneInternalFrameOverlapping.java 8049405,JBR-5510 windows-all,linux-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JInternalFrameOverlapping.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Mixing/LWComboBox.java JBR-7595 linux-all java/awt/Mixing/LWComboBox.java JBR-7595 linux-all
java/awt/Mixing/LWPopupMenu.java JBR-824 generic-all java/awt/Mixing/LWPopupMenu.java JBR-824 generic-all
java/awt/Mixing/OpaqueTest.java JBR-5707 linux-all java/awt/Mixing/OpaqueTest.java JBR-5707 linux-all
java/awt/Mixing/OverlappingButtons.java JBR-5707 linux-all java/awt/Mixing/OverlappingButtons.java JBR-5707 linux-all
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-4280 linux-all,macosx-all java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-4280 linux-all,macosx-all
javax/swing/JComponent/7154030/bug7154030.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JRadioButton/8041561/bug8041561.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/Popup/TaskbarPositionTest.java 8310689 windows-all,macosx-all javax/swing/Popup/TaskbarPositionTest.java 8310689 windows-all,macosx-all
javax/swing/PopupFactory/6276087/NonOpaquePopupMenuTest.java 8298124,JBR-5949 macosx-all,linux-all,windows-all javax/swing/PopupFactory/6276087/NonOpaquePopupMenuTest.java 8298124,JBR-5949 macosx-all,linux-all,windows-all
javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-5510 linux-5.18.2-arch1-1 javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5951 windows-all
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5510,JBR-5951 linux-5.18.2-arch1-1,windows-all sanity/client/SwingSet/src/EditorPaneDemoTest.java 8212240,JBR-6285,8253184 macosx-all,linux-all,windows-all
sanity/client/SwingSet/src/EditorPaneDemoTest.java 8212240,JBR-5510,JBR-6285,8253184 macosx-all,linux-all,windows-all sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 macosx-all,windows-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1
sun/java2d/GdiRendering/InsetClipping.java 7124403,JBR-6513 windows-all,macosx-all,linux-all sun/java2d/GdiRendering/InsetClipping.java 7124403,JBR-6513 windows-all,macosx-all,linux-all
java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.java JBR-5510 linux-5.18.2-arch1-1 javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-6160 linux-5.4.0-1103-aws
java/awt/Insets/DialogInsets.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Menu/OpensWithNoGrab/OpensWithNoGrab.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-5510,JBR-6160 linux-5.18.2-arch1-1,linux-5.4.0-1103-aws
javax/swing/JMenu/JMenuSelectedColorTest.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-6684 generic-all javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-6684 generic-all
javax/swing/JSpinner/4788637/bug4788637.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/LookAndFeel/8145547/DemandGTK2.sh JBR-5510 linux-5.18.2-arch1-1
javax/swing/LookAndFeel/8145547/DemandGTK3.sh JBR-5510 linux-5.18.2-arch1-1
jb/java/awt/Focus/BrokenTraversalAWT.java JBR-5799 windows-all jb/java/awt/Focus/BrokenTraversalAWT.java JBR-5799 windows-all
jb/java/awt/Focus/ComplexFocusSequence.java JBR-6728 linux-all,windows-x64 jb/java/awt/Focus/ComplexFocusSequence.java JBR-6728 linux-all,windows-x64
jb/java/awt/Focus/ContextMenuAfterPopup.java JBR-5799 windows-all jb/java/awt/Focus/ContextMenuAfterPopup.java JBR-5799 windows-all
jb/java/awt/Focus/FileDialogClosing.java JBR-8309 macosx-x64,windows-all jb/java/awt/Focus/FileDialogClosing.java JBR-8309,JBR-9197 macosx-x64,windows-all
jb/java/awt/Focus/FocusTraversalOrderTest.java JBR-6060 generic-all jb/java/awt/Focus/FocusTraversalOrderTest.java JBR-6060 generic-all
jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-5799 windows-all jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-5799 windows-all
jb/java/awt/Focus/TitleBarClickTest.java JBR-6394 linux-5.18.2-arch1-1,windows-all jb/java/awt/Focus/TitleBarClickTest.java JBR-6394 windows-all
com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java JBR-6749 linux-x64 com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java JBR-6749 linux-x64
java/awt/Choice/ChoiceStaysOpenedOnTAB.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Graphics/NativeWin32Clear.java JBR-8689 linux-5.18.2-arch1-1
java/awt/Graphics/XORPaint.java#id2 JBR-5510 linux-5.18.2-arch1-1
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureGtkTest.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JMenu/TestDisabledMenuForegroundColor.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JProgressBar/TestJProgressBarHighlightColor.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JSlider/TestJSliderRendering.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JTextPane/TestJTextPaneBackgroundColor.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JToolTip/TestTooltipBackgroundColor.java JBR-5510 linux-5.18.2-arch1-1
sun/java2d/ClassCastExceptionForInvalidSurface.java JBR-5510 linux-5.18.2-arch1-1
java/io/File/CheckPermission.java JBR-7700 linux-all,windows-all,macosx-all java/io/File/CheckPermission.java JBR-7700 linux-all,windows-all,macosx-all

View File

@@ -8,7 +8,9 @@ java/awt/dnd/DnDAWTLockTest.java JBR-6442 linux-all
java/awt/dnd/DragOverDropTargetPerformanceTest.java JBR-5799 windows-all java/awt/dnd/DragOverDropTargetPerformanceTest.java JBR-5799 windows-all
java/awt/dnd/DragSourceGCrashTest.java JBR-6442 linux-all java/awt/dnd/DragSourceGCrashTest.java JBR-6442 linux-all
java/awt/dnd/DropActionChangeTest.java JBR-6489,JBR-5799 generic-all java/awt/dnd/DropActionChangeTest.java JBR-6489,JBR-5799 generic-all
java/awt/dnd/DroppingVMHangTest.java JBR-9156 linux-all
java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.java JBR-6442 linux-all java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.java JBR-6442 linux-all
java/awt/dnd/InterJVMLinkTest.java JBR-9255 linux-6.15.8-100.fc41.x86_64
java/awt/dnd/MozillaDnDTest.java JBR-6442 linux-all java/awt/dnd/MozillaDnDTest.java JBR-6442 linux-all
java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-6292 windows-all java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-6292 windows-all
java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java JBR-6292 windows-all java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java JBR-6292 windows-all
@@ -44,10 +46,11 @@ java/awt/GridLayout/ComponentPreferredSize/ComponentPreferredSize.java 8238720,8
java/awt/Graphics/LineClipTest.java JBR-5071 linux-all java/awt/Graphics/LineClipTest.java JBR-5071 linux-all
java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-5071,JBR-5359 linux-all,windows-aarch64 java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-5071,JBR-5359 linux-all,windows-aarch64
java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050,JBR-5071 windows-all,macosx-all,linux-all java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050,JBR-5071 windows-all,macosx-all,linux-all
java/awt/LightweightComponent/MultipleAddNotifyTest/MultipleAddNotifyTest.java JBR-8092,JBR-8873 linux-all,windows-all
java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711,JBR-6234 linux-all,windows-all,macosx-all java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711,JBR-6234 linux-all,windows-all,macosx-all
java/awt/List/TriggerActionEventTest.java JBR-6234 windows-all java/awt/List/TriggerActionEventTest.java JBR-6234 windows-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5359,JBR-5510,JBR-6090 macosx-all,windows-aarch64,linux-5.18.2-arch1-1,windows-all java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5359,JBR-6090 macosx-all,windows-aarch64,windows-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5359,JBR-5510,JBR-6090 windows-aarch64,linux-5.18.2-arch1-1,windows-all java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5359,JBR-6090 windows-aarch64,windows-all
java/awt/Mixing/LWPopupMenu.java JBR-824,JBR-6134 generic-all,windows-x64 java/awt/Mixing/LWPopupMenu.java JBR-824,JBR-6134 generic-all,windows-x64
java/awt/Mixing/MixingOnDialog.java JBR-6134,JBR-6090 windows-x64,windows-all java/awt/Mixing/MixingOnDialog.java JBR-6134,JBR-6090 windows-x64,windows-all
java/awt/Mixing/MixingOnShrinkingHWButton.java JBR-6134 windows-x64 java/awt/Mixing/MixingOnShrinkingHWButton.java JBR-6134 windows-x64
@@ -55,7 +58,7 @@ java/awt/Mixing/OpaqueTest.java JBR-5707,JBR-6090 linux-all,windows-all
java/awt/Mixing/OverlappingButtons.java JBR-5707,JBR-6090 linux-all,windows-all java/awt/Mixing/OverlappingButtons.java JBR-5707,JBR-6090 linux-all,windows-all
java/awt/Mixing/Validating.java JBR-5908,JBR-6090 linux-all,windows-all java/awt/Mixing/Validating.java JBR-5908,JBR-6090 linux-all,windows-all
java/awt/MenuShortcut/ActionCommandTest.java JBR-8822 windows-all java/awt/MenuShortcut/ActionCommandTest.java JBR-8822 windows-all
java/awt/MenuShortcut/FunctionKeyShortcut.java JBR-8732 windows-all java/awt/MenuShortcut/FunctionKeyShortcut.java JBR-8732,JBR-9207 windows-all,linux-6.15.8-100.fc41.x86_64
java/awt/Modal/BlockedMouseInputTest2.java JBR-6090 windows-all java/awt/Modal/BlockedMouseInputTest2.java JBR-6090 windows-all
java/awt/Modal/BlockedMouseInputTest3.java JBR-6134 windows-x64 java/awt/Modal/BlockedMouseInputTest3.java JBR-6134 windows-x64
java/awt/Mouse/MouseEnterExitTest.java JBR-8096 linux-all,windows-all java/awt/Mouse/MouseEnterExitTest.java JBR-8096 linux-all,windows-all
@@ -76,6 +79,7 @@ javax/swing/JSlider/6848475/bug6848475.java JBR-7329,JBR-7472 windows-all
javax/swing/JSplitPane/4885629/bug4885629.java JBR-7270 macosx-all javax/swing/JSplitPane/4885629/bug4885629.java JBR-7270 macosx-all
javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 linux-all javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 linux-all
javax/swing/JTextArea/bug4265784.java JBR-7472 linux-all javax/swing/JTextArea/bug4265784.java JBR-7472 linux-all
javax/swing/SwingUtilities/7146377/bug7146377.java JBR-4679,JBR-9254 windows-all,linux-6.15.8-100.fc41.x86_64
javax/swing/text/DefaultCaret/HidingSelection/HidingSelectionTest.java JBR-8450 linux-all javax/swing/text/DefaultCaret/HidingSelection/HidingSelectionTest.java JBR-8450 linux-all
javax/swing/text/ParagraphView/6364882/bug6364882.java JBR-8324 linux-all javax/swing/text/ParagraphView/6364882/bug6364882.java JBR-8324 linux-all
javax/swing/text/StyledEditorKit/4506788/bug4506788.java JBR-8212 linux-all javax/swing/text/StyledEditorKit/4506788/bug4506788.java JBR-8212 linux-all
@@ -125,7 +129,7 @@ java/awt/Window/MinimumSizeDPIVariation/MinimumSizeDPIVariation.java nobug gener
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java nobug generic-all java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java nobug generic-all
java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java nobug generic-all java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java nobug generic-all
java/awt/Window/WindowSizeDifferentScreens/WindowSizeDifferentScreens.java nobug,JBR-5513 generic-all,linux-all java/awt/Window/WindowSizeDifferentScreens/WindowSizeDifferentScreens.java nobug,JBR-5513 generic-all,linux-all
java/awt/dnd/CustomDragCursorTest.java JBR-8932 windows-x64 java/awt/dnd/CustomDragCursorTest.java 8242805,JBR-8932 macosx-all,windows-x64
java/awt/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.java nobug generic-all java/awt/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.java nobug generic-all
java/awt/dnd/ImageTransferTest/ImageTransferTest.java nobug,JBR-6442 generic-all,linux-all java/awt/dnd/ImageTransferTest/ImageTransferTest.java nobug,JBR-6442 generic-all,linux-all
java/awt/font/MacEmoji.java nobug generic-all java/awt/font/MacEmoji.java nobug generic-all

View File

@@ -10,7 +10,9 @@ java/awt/EventDispatchThread/PreserveDispathThread/PreserveDispatchThread.java J
java/awt/FileDialog/ExceptionAfterSetDirectory.java JBR-9100 linux-all java/awt/FileDialog/ExceptionAfterSetDirectory.java JBR-9100 linux-all
java/awt/font/Rotate/RotateTest3.java JBR-9100 linux-all java/awt/font/Rotate/RotateTest3.java JBR-9100 linux-all
java/awt/FullScreen/SetFSWindow/FSFrame.java JBR-9100 linux-all java/awt/FullScreen/SetFSWindow/FSFrame.java JBR-9100 linux-all
java/awt/Graphics2D/TextPerf.java JBR-9190 linux-all
java/awt/Graphics2D/ScaledTransform/ScaledTransform.java JBR-9100 linux-all java/awt/Graphics2D/ScaledTransform/ScaledTransform.java JBR-9100 linux-all
java/awt/image/DrawImage/IncorrectClipXorModeSW2Surface.java JBR-9216 linux-all
java/awt/Insets/DialogInsets.java JBR-9100 linux-all java/awt/Insets/DialogInsets.java JBR-9100 linux-all
java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java JBR-9100 linux-all java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java JBR-9100 linux-all
java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java JBR-9097 linux-x64 java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java JBR-9097 linux-x64
@@ -20,7 +22,7 @@ java/awt/Toolkit/ToolkitPropertyTest/ToolkitPropertyTest_Disable.java JBR-9100 l
javax/swing/AbstractButton/bug4147740.java JBR-9100 linux-all javax/swing/AbstractButton/bug4147740.java JBR-9100 linux-all
javax/swing/AbstractButton/bug4246045.java JBR-9100 linux-all javax/swing/AbstractButton/bug4246045.java JBR-9100 linux-all
javax/swing/border/Test6981576.java JBR-9100 linux-all javax/swing/border/Test6981576.java JBR-9100 linux-all
javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-7269 linux-all javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-9031 linux-all
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-8266 linux-x64 javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-8266 linux-x64
javax/swing/GroupLayout/8079640/bug8079640.java JBR-9100 linux-all javax/swing/GroupLayout/8079640/bug8079640.java JBR-9100 linux-all
javax/swing/JButton/JButtonPaintNPE/JButtonPaintNPE.java JBR-9100 linux-all javax/swing/JButton/JButtonPaintNPE/JButtonPaintNPE.java JBR-9100 linux-all
@@ -30,6 +32,7 @@ javax/swing/JComboBox/bug4276920.java JBR-9100 linux-all
javax/swing/JComboBox/ShowPopupAfterHidePopupTest/ShowPopupAfterHidePopupTest.java JBR-9100 linux-all javax/swing/JComboBox/ShowPopupAfterHidePopupTest/ShowPopupAfterHidePopupTest.java JBR-9100 linux-all
javax/swing/JComboBox/TestComboBoxHeight.java JBR-9100 linux-all javax/swing/JComboBox/TestComboBoxHeight.java JBR-9100 linux-all
javax/swing/JComponent/4337267/bug4337267.java JBR-9100 linux-all javax/swing/JComponent/4337267/bug4337267.java JBR-9100 linux-all
javax/swing/JComponent/6989617/bug6989617.java JBR-8796 linux-all
javax/swing/JComponent/bug4962718.java JBR-9100 linux-all javax/swing/JComponent/bug4962718.java JBR-9100 linux-all
javax/swing/JComponent/bug4979794.java JBR-9100 linux-all javax/swing/JComponent/bug4979794.java JBR-9100 linux-all
javax/swing/JEditorPane/4492274/bug4492274.java JBR-9100 linux-all javax/swing/JEditorPane/4492274/bug4492274.java JBR-9100 linux-all
@@ -38,6 +41,7 @@ javax/swing/JFileChooser/6489130/bug6489130.java JBR-9100 linux-all
javax/swing/JFileChooser/DeserializedJFileChooser/DeserializedJFileChooserTest.java JBR-9100 linux-all javax/swing/JFileChooser/DeserializedJFileChooser/DeserializedJFileChooserTest.java JBR-9100 linux-all
javax/swing/JFileChooser/FileSizeCheck.java JBR-9100 linux-all javax/swing/JFileChooser/FileSizeCheck.java JBR-9100 linux-all
javax/swing/JFileChooser/FileViewNPETest.java JBR-9100 linux-all javax/swing/JFileChooser/FileViewNPETest.java JBR-9100 linux-all
javax/swing/JFormattedTextField/bug4741926.java JBR-9321 linux-6.14.9-arch1-1
javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-9100 linux-all javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-9100 linux-all
javax/swing/JFrame/AlwaysOnTop/AlwaysOnTopImeTest.java JBR-9100 linux-all javax/swing/JFrame/AlwaysOnTop/AlwaysOnTopImeTest.java JBR-9100 linux-all
javax/swing/JFrame/HangNonVolatileBuffer/HangNonVolatileBuffer.java JBR-9100 linux-all javax/swing/JFrame/HangNonVolatileBuffer/HangNonVolatileBuffer.java JBR-9100 linux-all
@@ -47,7 +51,7 @@ javax/swing/JLayer/6824395/bug6824395.java JBR-9100 linux-all
javax/swing/JLayer/8041982/bug8041982.java JBR-9100 linux-all javax/swing/JLayer/8041982/bug8041982.java JBR-9100 linux-all
javax/swing/JMenu/8178430/LabelDotTest.java JBR-9100 linux-all javax/swing/JMenu/8178430/LabelDotTest.java JBR-9100 linux-all
javax/swing/JPanel/bug4907772.java JBR-9100 linux-all javax/swing/JPanel/bug4907772.java JBR-9100 linux-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-9100 linux-all javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-9100,JBR-9277 linux-all,linux-6.14.9-arch1-1
javax/swing/JProgressBar/8161664/ProgressBarMemoryLeakTest.java JBR-9100 linux-all javax/swing/JProgressBar/8161664/ProgressBarMemoryLeakTest.java JBR-9100 linux-all
javax/swing/JProgressBar/TestJProgressBarHighlightColor.java JBR-9100 linux-all javax/swing/JProgressBar/TestJProgressBarHighlightColor.java JBR-9100 linux-all
javax/swing/JScrollPane/bug8044371.java JBR-9100 linux-all javax/swing/JScrollPane/bug8044371.java JBR-9100 linux-all
@@ -56,7 +60,7 @@ javax/swing/JSlider/TestJSliderRendering.java JBR-9100 linux-all
javax/swing/JSpinner/8008657/bug8008657.java JBR-9100 linux-all javax/swing/JSpinner/8008657/bug8008657.java JBR-9100 linux-all
javax/swing/JSpinner/bug4656590.java JBR-9100 linux-all javax/swing/JSpinner/bug4656590.java JBR-9100 linux-all
javax/swing/JSpinner/bug4680204.java JBR-9100 linux-all javax/swing/JSpinner/bug4680204.java JBR-9100 linux-all
javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-9100 linux-all javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-9100,JBR-9277 linux-all,linux-6.14.9-arch1-1
javax/swing/JSplitPane/4816114/bug4816114.java JBR-9100 linux-all javax/swing/JSplitPane/4816114/bug4816114.java JBR-9100 linux-all
javax/swing/JSplitPane/JSplitPaneTestNegDivSize.java JBR-9100 linux-all javax/swing/JSplitPane/JSplitPaneTestNegDivSize.java JBR-9100 linux-all
javax/swing/JTabbedPane/7170310/bug7170310.java JBR-9100 linux-all javax/swing/JTabbedPane/7170310/bug7170310.java JBR-9100 linux-all
@@ -77,6 +81,7 @@ javax/swing/JTextPane/JTextPaneDocumentWrapping.java JBR-9100 linux-all
javax/swing/JTextPane/TestJTextPaneBackgroundColor.java JBR-9100 linux-all javax/swing/JTextPane/TestJTextPaneBackgroundColor.java JBR-9100 linux-all
javax/swing/JTree/8041705/DefaultTreeCellRendererBorderTest.java JBR-9100 linux-all javax/swing/JTree/8041705/DefaultTreeCellRendererBorderTest.java JBR-9100 linux-all
javax/swing/JViewport/7107099/bug7107099.java JBR-9100 linux-all javax/swing/JViewport/7107099/bug7107099.java JBR-9100 linux-all
javax/swing/InputVerifier/VerifyTarget/VerifyTargetTest.java JBR-9320 linux-6.14.9-arch1-1
javax/swing/LookAndFeel/8145547/DemandGTK.java JBR-9100 linux-all javax/swing/LookAndFeel/8145547/DemandGTK.java JBR-9100 linux-all
javax/swing/LookAndFeel/8145547/DemandGTK3.sh JBR-9100 linux-all javax/swing/LookAndFeel/8145547/DemandGTK3.sh JBR-9100 linux-all
javax/swing/plaf/basic/6866751/bug6866751.java JBR-9100 linux-all javax/swing/plaf/basic/6866751/bug6866751.java JBR-9100 linux-all

View File

@@ -1,3 +1,8 @@
java/awt/Graphics2D/TextPerf.java JBR-9190 linux-all
java/awt/image/DrawImage/IncorrectClipXorModeSW2Surface.java JBR-9216 linux-all
javax/swing/JFileChooser/6520101/bug6520101.java JBR-8434 linux-all
javax/swing/JMenu/bug4342646.java JBR-8727 linux-all
javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 linux-all javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 linux-all
javax/swing/text/ParagraphView/6364882/bug6364882.java JBR-8324 linux-all javax/swing/text/ParagraphView/6364882/bug6364882.java JBR-8324 linux-all

View File

@@ -1,21 +1,25 @@
java/awt/event/KeyEvent/FunctionKeyTest.java JBR-7773 linux-all
java/awt/EventDispatchThread/PreserveDispathThread/PreserveDispatchThread.java JBR-9237 linux-all
java/awt/Graphics2D/ScaledTransform/ScaledTransform.java JBR-9237 linux-all
java/awt/Graphics2D/TextPerf.java JBR-9190 linux-all
java/awt/FullScreen/SetFullScreenTest.java JBR-8400 linux-x64
java/awt/image/DrawImage/IncorrectUnmanagedImageSourceOffset.java JBR-9023 linux-all java/awt/image/DrawImage/IncorrectUnmanagedImageSourceOffset.java JBR-9023 linux-all
java/awt/image/DrawImage/UnmanagedDrawImagePerformance.java JBR-9023 linux-all java/awt/image/DrawImage/UnmanagedDrawImagePerformance.java JBR-9023 linux-all
java/awt/font/ComplexEmoji.java JBR-5009,JBR-8399 linux-aarch64,linux-x64 java/awt/MenuShortcut/FunctionKeyShortcut.java JBR-7932,JBR-9207 linux-all,linux-6.15.8-100.fc41.x86_64
java/awt/FullScreen/SetFullScreenTest.java JBR-8214,JBR-8400 linux-5.18.2-arch1-1,linux-x64
java/awt/MenuShortcut/FunctionKeyShortcut.java JBR-7932 linux-all
java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java JBR-8295 linux-x64 java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java JBR-8295 linux-x64
java/awt/event/KeyEvent/FunctionKeyTest.java JBR-7773 linux-all
javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-7269 linux-all javax/swing/GraphicsConfigNotifier/StalePreferredSize.java JBR-7269 linux-all
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-8266 linux-x64 javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-8266 linux-x64
javax/swing/InputVerifier/VerifyTarget/VerifyTargetTest.java JBR-7520 linux-all javax/swing/InputVerifier/VerifyTarget/VerifyTargetTest.java JBR-7520,JBR-9320 linux-6.8.0-1036-aws,linux-6.14.9-arch1-1
javax/swing/JComponent/6989617/bug6989617.java JBR-8796 linux-all javax/swing/JComponent/6989617/bug6989617.java JBR-8796 linux-all
javax/swing/JDesktopPane/TestDesktopManagerNPE.java JBR-8449 linux-x64 javax/swing/JDesktopPane/TestDesktopManagerNPE.java JBR-8449 linux-x64
javax/swing/JEditorPane/JEditorPaneFontFallback.java JBR-8305 linux-all javax/swing/JEditorPane/JEditorPaneFontFallback.java JBR-8305 linux-all
javax/swing/JFileChooser/6520101/bug6520101.java JBR-7140 linux-all javax/swing/JFileChooser/6520101/bug6520101.java JBR-7140 linux-all
javax/swing/JFormattedTextField/bug4741926.java JBR-7530 linux-all javax/swing/JFormattedTextField/bug4741926.java JBR-7530,JBR-9321 linux-all,linux-6.14.9-arch1-1
javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-9276 linux-6.14.9-arch1-1
javax/swing/JOptionPane/8081019/bug8081019.java JBR-8275 linux-all javax/swing/JOptionPane/8081019/bug8081019.java JBR-8275 linux-all
javax/swing/JRadioButton/bug4823809.java JBR-7931 linux-all javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-9277 linux-6.14.9-arch1-1
javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-9277 linux-6.14.9-arch1-1
javax/swing/LookAndFeel/8145547/DemandGTK2.sh JBR-8918 linux-all javax/swing/LookAndFeel/8145547/DemandGTK2.sh JBR-8918 linux-all
javax/swing/text/html/CSS/bug8234913.java JBR-8306 linux-all javax/swing/text/html/CSS/bug8234913.java JBR-8306 linux-all

View File

@@ -1,3 +1,10 @@
java/awt/event/KeyEvent/FunctionKeyTest.java JBR-7773 linux-all
java/awt/EventDispatchThread/PreserveDispathThread/PreserveDispatchThread.java JBR-9237 linux-all
java/awt/Graphics2D/ScaledTransform/ScaledTransform.java JBR-9237 linux-all
java/awt/Graphics2D/TextPerf.java JBR-9190 linux-all
javax/swing/JFileChooser/6520101/bug6520101.java JBR-7140 linux-all
javax/swing/JMenu/bug4342646.java JBR-8727 linux-all
javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 linux-all javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 linux-all
javax/swing/text/ParagraphView/6364882/bug6364882.java JBR-8324 linux-all javax/swing/text/ParagraphView/6364882/bug6364882.java JBR-8324 linux-all