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
ifneq ($(VULKAN_ENABLED), true)
# WLToolkit needs Vulkan java classes for initialization
ifneq ($(call isTargetOs, linux), true)
EXCLUDES += sun/java2d/vulkan
endif
EXCLUDE_FILES += $(filter-out $(TOPDIR)/src/java.desktop/share/classes/sun/java2d/vulkan/VKEnv.java, \
$(wildcard $(TOPDIR)/src/java.desktop/*/classes/sun/java2d/vulkan/*.java))
endif
# 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_CFLAGS += $(VULKAN_FLAGS)
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
else
LIBAWT_EXTRA_FILES += $(TOPDIR)/src/$(MODULE)/share/native/common/java2d/vulkan/VKStubs.c
VULKAN_EXCLUDES := vulkan java2d/vulkan
endif
@@ -217,7 +215,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBAWT, \
LIBS_windows := kernel32.lib user32.lib gdi32.lib gdiplus.lib winspool.lib \
imm32.lib ole32.lib uuid.lib shell32.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), \
EXTRA_RCFLAGS := $(LIBAWT_RCFLAGS), \
))
@@ -293,7 +291,7 @@ ifeq ($(call isTargetOs, windows macosx), false)
#
endif
LIBAWT_XAWT_EXCLUDES := medialib debug wl vulkan
LIBAWT_XAWT_EXCLUDES := medialib debug wl $(VULKAN_EXCLUDES)
LIBPIPEWIRE_HEADER_DIRS := \
$(TOPDIR)/src/$(MODULE)/unix/native/libpipewire/include
@@ -422,8 +420,6 @@ ifeq ($(call isTargetOs, windows macosx), false)
$(VULKAN_FLAGS) \
$(CUPS_CFLAGS)
LIBAWT_WLAWT_CXXFLAGS += $(VULKAN_FLAGS)
LIBAWT_WLAWT_LIBS := $(LIBM) -lawt $(WAYLAND_LIBS) $(LIBDL) -ljava -ljvm -lrt
ifeq ($(call isTargetOs, linux), true)
@@ -458,8 +454,6 @@ ifeq ($(call isTargetOs, windows macosx), false)
DISABLED_WARNINGS_CXX_gcc := undef, \
DISABLED_WARNINGS_clang := parentheses format undef \
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) \
$(call SET_SHARED_LIBRARY_ORIGIN) \
-L$(INSTALL_LIBRARIES_HERE), \
@@ -576,14 +570,13 @@ ifeq ($(call isTargetOs, windows macosx), false)
$(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_DEFAULT_HEADER_DIRS) \
common/awt/debug \
common/font \
common/java2d/opengl \
common/java2d/vulkan \
#
LIBAWT_HEADLESS_CFLAGS := $(CUPS_CFLAGS) $(FONTCONFIG_CFLAGS) $(X_CFLAGS) \

View File

@@ -65,7 +65,7 @@ public class IoOverNio {
}
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.
// Checking for Posix attributes first prevents from checking DOS attributes on Linux,
// even though Posix permissions aren't used in this method.
BasicFileAttributes attrs;
try {
attrs = Files.readAttributes(path, PosixFileAttributes.class);
} catch (UnsupportedOperationException ignored) {
attrs = Files.readAttributes(path, DosFileAttributes.class);
} catch (SecurityException ignored) {
BasicFileAttributes attrs = null;
Set<String> supportedFileAttributeViews = path.getFileSystem().supportedFileAttributeViews();
if (supportedFileAttributeViews.contains("posix")) {
try {
attrs = Files.readAttributes(path, PosixFileAttributes.class);
} catch (UnsupportedOperationException | SecurityException ignored) {
// Nothing.
}
}
if (attrs == null && supportedFileAttributeViews.contains("dos")) {
try {
attrs = Files.readAttributes(path, DosFileAttributes.class);
} catch (UnsupportedOperationException | SecurityException ignored) {
// Nothing.
}
}
if (attrs == null) {
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.stream.Stream;
import java.util.stream.StreamSupport;
import com.jetbrains.internal.IoOverNio;
import jdk.internal.access.JavaUtilZipFileAccess;
import jdk.internal.access.JavaUtilJarAccess;
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 {
final Key key;
try {
java.nio.file.FileSystem fs =
USE_NIO_FOR_ZIP_FILE_ACCESS && IoOverNio.isAllowedInThisThread()
? FileSystems.getDefault()
: builtInFS;
key = new Key(file,
Files.readAttributes(builtInFS.getPath(file.getPath()),
Files.readAttributes(fs.getPath(file.getPath()),
BasicFileAttributes.class), zc);
} catch (InvalidPathException 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 {
this.zc = zc;
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;
if (toDelete) {
options = Set.of(StandardOpenOption.READ, StandardOpenOption.DELETE_ON_CLOSE);

View File

@@ -39,7 +39,7 @@ import java.util.concurrent.ConcurrentHashMap;
public final class ExtendedOptions {
// maps InternalOption to ExternalOption
private static final Map<InternalOption<?>, Wrapper<?>> internalToExternal
private static final Map<InternalOption<?>, Wrapper<?>[]> internalToExternal
= new ConcurrentHashMap<>();
/**
@@ -69,7 +69,18 @@ public final class ExtendedOptions {
private void registerInternal(Object option, T 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.
*/
public boolean matches(Object option) {
Wrapper <?> wrapper = internalToExternal.get(this);
if (wrapper == null)
return false;
else
return option == wrapper.option;
Wrapper <?> [] wrappers = internalToExternal.get(this);
if (wrappers != null) {
for (Wrapper<?> wrapper : wrappers) {
if (wrapper.option == option)
return true;
}
}
return false;
}
/**
@@ -118,11 +132,14 @@ public final class ExtendedOptions {
*/
@SuppressWarnings("unchecked")
public T parameter() {
Wrapper<?> wrapper = internalToExternal.get(this);
if (wrapper == null)
return null;
else
return (T) wrapper.parameter();
Wrapper<?> [] wrappers = internalToExternal.get(this);
if (wrappers != null) {
for (Wrapper<?> wrapper : wrappers) {
if (wrapper.option instanceof WatchEvent.Modifier)
return (T) wrapper.parameter();
}
}
return null;
}
}

View File

@@ -33,7 +33,6 @@ import sun.lwawt.macosx.CFLayer;
import sun.util.logging.PlatformLogger;
import java.awt.Component;
import java.awt.GraphicsConfiguration;
import java.awt.Insets;
import java.awt.Window;
@@ -51,12 +50,13 @@ public class MTLLayer extends CFLayer {
private static native void nativeSetOpaque(long layerPtr, boolean opaque);
private int scale = 1;
private final boolean perfCountersEnabled;
public MTLLayer(LWWindowPeer peer) {
super(0, true);
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));
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() {
// Called from the native code when this layer has been presented on screen
Component target = peer.getTarget();
if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.frames");
if (perfCountersEnabled && (peer != null)) {
final Component target = peer.getTarget();
if (target instanceof Window window) {
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
// on screen, but that attempt was not successful. This can happen, for example,
// when those attempts are too frequent.
Component target = peer.getTarget();
if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.framesDropped");
if (perfCountersEnabled && (peer != null)) {
final Component target = peer.getTarget();
if (target instanceof Window window) {
AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.framesDropped");
}
}
}
}

View File

@@ -30,6 +30,11 @@
#include <CoreVideo/CVDisplayLink.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
@property (nonatomic) jobject javaLayer;
@@ -42,8 +47,12 @@
@property (readwrite, assign) int leftInset;
@property (readwrite, atomic) int redrawCount;
@property (readwrite, atomic) NSTimeInterval avgBlitFrameTime;
@property (readwrite, atomic) BOOL perfCountersEnabled;
#if TRACE_DISPLAY_ON
@property (readwrite, atomic) NSTimeInterval avgNextDrawableTime;
@property (readwrite, atomic) CFTimeInterval lastPresentedTime;
#endif
@property (readwrite, atomic) BOOL perfCountersEnabled;
- (id) initWithJavaLayer:(jobject)layer usePerfCounters:(jboolean)perfCountersEnabled;
@@ -62,6 +71,8 @@
- (void) stopRedraw:(MTLContext*)mtlc displayID:(jint)displayID force:(BOOL)force;
- (void) flushBuffer;
- (void) commitCommandBuffer:(MTLContext*)mtlc wait:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay;
- (void) addStatCallback:(int)type value:(double)value;
- (void) countFramePresentedCallback;
- (void) countFrameDroppedCallback;
@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.
*
* 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() \
GET_CLASS(jc_JavaLayer, "sun/java2d/metal/MTLLayer");
#define TRACE_DISPLAY 0
#define TRACE_DISPLAY_CHANGED 0
#define TRACE_DISPLAY TRACE_DISPLAY_ENABLED
const NSTimeInterval DF_BLIT_FRAME_TIME=1.0/120.0;
@@ -156,8 +155,11 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
}
self.presentsWithTransaction = NO;
self.avgBlitFrameTime = DF_BLIT_FRAME_TIME;
self.perfCountersEnabled = perfCountersEnabled ? YES : NO;
#if TRACE_DISPLAY_ON
self.avgNextDrawableTime = 0.0;
self.lastPresentedTime = 0.0;
#endif
self.perfCountersEnabled = perfCountersEnabled ? YES : NO;
_lock = [[NSLock alloc] init];
return self;
}
@@ -224,12 +226,33 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
}
// Acquire CAMetalDrawable without blocking:
const CFTimeInterval beforeDrawableTime = CACurrentMediaTime();
const id<CAMetalDrawable> mtlDrawable = [self nextDrawable];
const CFTimeInterval nextDrawableTime = (TRACE_DISPLAY) ? CACurrentMediaTime() : 0.0;
if (mtlDrawable == nil) {
J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: nextDrawable is null)");
J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: nextDrawable is null");
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:
releaseFence = NO;
@@ -244,37 +267,27 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
destinationOrigin:MTLOriginMake(0, 0, 0)];
[blitEncoder endEncoding];
BOOL usePresentHandler = NO;
NSUInteger drawableId = -1;
if (@available(macOS 10.15.4, *)) {
usePresentHandler = YES;
if (TRACE_DISPLAY) {
drawableId = mtlDrawable.drawableID;
}
[self retain];
[mtlDrawable addPresentedHandler:^(id <MTLDrawable> drawable) {
// note: called anyway even if drawable.present() not called!
// free drawable once processed:
[self freeDrawableCount];
const CFTimeInterval presentedTime = drawable.presentedTime;
if (presentedTime != 0.0) {
if (self.perfCountersEnabled) {
[self countFramePresentedCallback];
}
if (TRACE_DISPLAY) {
const CFTimeInterval now = CACurrentMediaTime();
const CFTimeInterval presentedHandlerLatency = (now - nextDrawableTime);
const CFTimeInterval frameInterval = (self.lastPresentedTime != 0.0) ? (presentedTime - self.lastPresentedTime) : -1.0;
J2dRlsTraceLn4(J2D_TRACE_VERBOSE,
"[%.6lf] MTLLayer_blitTexture_PresentedHandler: drawable(%d) presented"
" - presentedHandlerLatency = %.3lf ms frameInterval = %.3lf ms",
CACurrentMediaTime(), drawable.drawableID,
1000.0 * presentedHandlerLatency, 1000.0 * frameInterval
);
}
#if TRACE_DISPLAY_ON
const CFTimeInterval now = CACurrentMediaTime();
const CFTimeInterval presentedHandlerLatency = (now - nextDrawableTime);
const CFTimeInterval frameInterval = (self.lastPresentedTime != 0.0) ? (presentedTime - self.lastPresentedTime) : -1.0;
J2dRlsTraceLn4(J2D_TRACE_VERBOSE,
"[%.6lf] MTLLayer_blitTexture_PresentedHandler: drawable(%d) presented"
" - presentedHandlerLatency = %.3lf ms frameInterval = %.3lf ms",
CACurrentMediaTime(), drawable.drawableID,
1000.0 * presentedHandlerLatency, 1000.0 * frameInterval
);
self.lastPresentedTime = presentedTime;
#endif
} else {
if (self.perfCountersEnabled) {
[self countFrameDroppedCallback];
@@ -293,7 +306,9 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
}];
}
// Present drawable:
NSUInteger drawableId = -1;
if (TRACE_DISPLAY) {
drawableId = mtlDrawable.drawableID;
J2dRlsTraceLn3(J2D_TRACE_INFO,
"[%.6lf] MTLLayer.blitTexture: layer[%p] present drawable(%d)",
CACurrentMediaTime(), self, drawableId);
@@ -310,14 +325,11 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
[self retain];
[commandBuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) {
if (usePresentHandler == NO) {
// free drawable:
[self freeDrawableCount];
}
if (!isDisplaySyncEnabled()) {
if (@available(macOS 10.15.4, *)) {
// free drawable once processed:
[self freeDrawableCount];
if (@available(macOS 10.15.4, *)) {
if (!isDisplaySyncEnabled()) {
const NSTimeInterval gpuTime = commandBuf.GPUEndTime - commandBuf.GPUStartTime;
const NSTimeInterval a = 0.25;
self.avgBlitFrameTime = gpuTime * a + self.avgBlitFrameTime * (1.0 - a);
}
}
@@ -381,8 +393,17 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
return;
}
const CFTimeInterval beforeMethod = CACurrentMediaTime();
(*env)->CallVoidMethod(env, javaLayerLocalRef, jm_drawInMTLContext);
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);
}
@@ -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 {
// attach the current thread to the JVM if necessary, and get an env
JNIEnv* env = [ThreadUtilities getJNIEnvUncached];

View File

@@ -53,10 +53,14 @@ import java.awt.event.TextEvent;
import java.awt.im.InputContext;
import java.awt.im.InputMethodRequests;
import java.awt.image.BufferStrategy;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.VolatileImage;
import java.awt.image.WritableRaster;
import java.awt.peer.ComponentPeer;
import java.awt.peer.ContainerPeer;
import java.awt.peer.LightweightPeer;
@@ -91,6 +95,7 @@ import javax.accessibility.AccessibleStateSet;
import javax.swing.JComponent;
import javax.swing.JRootPane;
import com.jetbrains.exported.JBRApi;
import sun.awt.AWTAccessor;
import sun.awt.AppContext;
import sun.awt.ComponentFactory;
@@ -103,6 +108,7 @@ import sun.awt.EmbeddedFrame;
import sun.awt.RequestFocusController;
import sun.awt.SubRegionShowable;
import sun.awt.SunToolkit;
import sun.awt.SurfacePixelGrabber;
import sun.awt.dnd.SunDropTargetEvent;
import sun.awt.im.CompositionArea;
import sun.awt.image.VSyncedBSManager;
@@ -10609,4 +10615,79 @@ public abstract class Component implements ImageObserver, MenuContainer,
}
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.
*
* 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.ObjectOutputStream;
import java.io.OptionalDataException;
import java.io.PrintStream;
import java.io.Serial;
import java.io.Serializable;
import java.lang.annotation.Native;
@@ -54,12 +55,15 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.EventListener;
import java.util.LinkedHashMap;
import java.util.Locale;
import java.util.Map;
import java.util.HashMap;
import java.util.Objects;
import java.util.ResourceBundle;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
import java.util.concurrent.atomic.AtomicBoolean;
@@ -70,12 +74,15 @@ import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import com.jetbrains.exported.JBRApi;
import jdk.internal.misc.InnocuousThread;
import sun.awt.AWTAccessor;
import sun.awt.AWTPermissions;
import sun.awt.AppContext;
import sun.awt.DebugSettings;
import sun.awt.SunToolkit;
import sun.awt.util.IdentityArrayList;
import sun.awt.util.ThreadGroupUtils;
import sun.java2d.marlin.stats.StatDouble;
import sun.java2d.pipe.Region;
import sun.security.action.GetPropertyAction;
import sun.util.logging.PlatformLogger;
@@ -1207,45 +1214,51 @@ public class Window extends Container implements Accessible {
}
void doDispose() {
class DisposeAction implements Runnable {
public void run() {
disposing = true;
try {
// Check if this window is the fullscreen window for the
// device. Exit the fullscreen mode prior to disposing
// of the window if that's the case.
GraphicsDevice gd = getGraphicsConfiguration().getDevice();
if (gd.getFullScreenWindow() == Window.this) {
gd.setFullScreenWindow(null);
}
final class DisposeAction implements Runnable {
public void run() {
final Window window = Window.this;
Object[] ownedWindowArray;
synchronized(ownedWindowList) {
ownedWindowArray = new Object[ownedWindowList.size()];
ownedWindowList.copyInto(ownedWindowArray);
}
for (int i = 0; i < ownedWindowArray.length; i++) {
Window child = (Window) (((WeakReference)
(ownedWindowArray[i])).get());
if (child != null) {
child.disposeImpl();
// dump stats if needed:
AWTAccessor.getWindowAccessor().dumpStats(window, true, null);
disposing = true;
try {
// Check if this window is the fullscreen window for the
// device. Exit the fullscreen mode prior to disposing
// of the window if that's the case.
GraphicsDevice gd = getGraphicsConfiguration().getDevice();
if (gd.getFullScreenWindow() == window) {
gd.setFullScreenWindow(null);
}
}
hide();
beforeFirstShow = true;
removeNotify();
synchronized (inputContextLock) {
if (inputContext != null) {
inputContext.dispose();
inputContext = null;
Object[] ownedWindowArray;
synchronized(ownedWindowList) {
ownedWindowArray = new Object[ownedWindowList.size()];
ownedWindowList.copyInto(ownedWindowArray);
}
for (int i = 0; i < ownedWindowArray.length; i++) {
Window child = (Window) (((WeakReference)
(ownedWindowArray[i])).get());
if (child != null) {
child.disposeImpl();
}
}
hide();
beforeFirstShow = true;
removeNotify();
synchronized (inputContextLock) {
if (inputContext != null) {
inputContext.dispose();
inputContext = null;
}
}
clearCurrentFocusCycleRootOnHide();
} finally {
disposing = false;
}
clearCurrentFocusCycleRootOnHide();
} finally {
disposing = false;
}
}
}
boolean fireWindowClosedEvent = isDisplayable();
DisposeAction action = new DisposeAction();
if (EventQueue.isDispatchThread()) {
@@ -4059,6 +4072,7 @@ public class Window extends Container implements Accessible {
private float getHeight() { return height; }
private void setHeight(float height) {
if (height <= 0.0f) throw new IllegalArgumentException("TitleBar height must be positive");
if (this.height == height) return;
this.height = height;
notifyUpdate();
}
@@ -4067,13 +4081,17 @@ public class Window extends Container implements Accessible {
}
private void putProperties(Map<String, ?> m) {
if (properties == null) properties = new HashMap<>();
properties.putAll(m);
notifyUpdate();
boolean needsUpdate = false;
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) {
if (properties == null) properties = new HashMap<>();
properties.put(key, value);
notifyUpdate();
Object old = properties.put(key, value);
if (!Objects.equals(old, value)) notifyUpdate();
}
private float getLeftInset() { return insets[0]; }
private float getRightInset() { return insets[1]; }
@@ -4313,10 +4331,39 @@ public class Window extends Container implements Accessible {
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 {
@SuppressWarnings("removal")
String counters = AccessController.doPrivileged(
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() {
public void updateWindow(Window window) {
@@ -4365,100 +4412,201 @@ public class Window extends Container implements Accessible {
public boolean countersEnabled(Window w) {
// May want to selectively enable or disable counters per window
return counters != null;
return USE_COUNTERS;
}
public void bumpCounter(Window w, String counterName) {
Objects.requireNonNull(w);
Objects.requireNonNull(counterName);
private final static long NANO_IN_SEC = java.util.concurrent.TimeUnit.SECONDS.toNanos(1);
PerfCounter newCounter;
long curTimeNanos = System.nanoTime();
synchronized (w.perfCounters) {
newCounter = w.perfCounters.compute(counterName, (k, v) ->
v == null
? new PerfCounter(curTimeNanos, 1L)
: new PerfCounter(curTimeNanos, v.value + 1));
}
PerfCounter prevCounter;
synchronized (w.perfCountersPrev) {
prevCounter = w.perfCountersPrev.putIfAbsent(counterName, newCounter);
}
if (prevCounter != null) {
long nanosInSecond = java.util.concurrent.TimeUnit.SECONDS.toNanos(1);
long timeDeltaNanos = curTimeNanos - prevCounter.updateTimeNanos;
if (timeDeltaNanos > nanosInSecond) {
long valPerSecond = (long) ((double) (newCounter.value - prevCounter.value)
* 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);
public void incrementCounter(final Window w, final String counterName) {
if (USE_COUNTERS) {
Objects.requireNonNull(w);
Objects.requireNonNull(counterName);
final long curTimeNanos = System.nanoTime();
// use try-catch to avoid throwing runtime exception to native JNI callers!
try {
PerfCounter newCounter, prevCounter;
synchronized (w.perfCounters) {
newCounter = w.perfCounters.compute(counterName, (k, v) ->
v == null
? new PerfCounter(curTimeNanos, 1L)
: new PerfCounter(curTimeNanos, v.value + 1));
}
synchronized (w.perfCountersPrev) {
w.perfCountersPrev.put(counterName, newCounter);
prevCounter = w.perfCountersPrev.putIfAbsent(counterName, newCounter);
}
if (prevCounter != null) {
final long timeDeltaNanos = curTimeNanos - prevCounter.updateTimeNanos;
if (timeDeltaNanos > NANO_IN_SEC) {
final double valPerSecond = (double) (newCounter.value - prevCounter.value)
* NANO_IN_SEC / timeDeltaNanos;
synchronized (w.perfCountersPrev) {
w.perfCountersPrev.put(counterName, newCounter);
}
addStat(w, counterName, valPerSecond);
if (TRACE_COUNTERS) {
dumpCounter(counterName, valPerSecond);
}
}
}
} catch (RuntimeException re) {
perfLog.severe("incrementCounter: failed", re);
}
}
}
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(counterName);
synchronized (w.perfCounters) {
PerfCounter counter = w.perfCounters.get(counterName);
return counter != null ? counter.value : -1L;
}
}
return -1L;
}
public double getCounterPerSecond(final Window w, final String counterName) {
if (USE_COUNTERS) {
Objects.requireNonNull(w);
Objects.requireNonNull(counterName);
PerfCounter newCounter, prevCounter;
synchronized (w.perfCounters) {
newCounter = w.perfCounters.get(counterName);
}
synchronized (w.perfCountersPrev) {
prevCounter = w.perfCountersPrev.get(counterName);
}
if (newCounter != null && prevCounter != null) {
final long timeDeltaNanos = newCounter.updateTimeNanos - prevCounter.updateTimeNanos;
// Note that this time delta will usually be above one second.
if (timeDeltaNanos > 0L) {
return (double) (newCounter.value - prevCounter.value) * NANO_IN_SEC / timeDeltaNanos;
}
}
}
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();
}
}
}
}
}
}
public long getCounter(Window w, String counterName) {
Objects.requireNonNull(w);
Objects.requireNonNull(counterName);
synchronized (w.perfCounters) {
PerfCounter counter = w.perfCounters.get(counterName);
return counter != null ? counter.value : -1L;
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));
}
}
public long getCounterPerSecond(Window w, String counterName) {
Objects.requireNonNull(w);
Objects.requireNonNull(counterName);
PerfCounter newCounter;
PerfCounter prevCounter;
synchronized (w.perfCounters) {
newCounter = w.perfCounters.get(counterName);
private static void doLog(final String msg, final boolean traceEnabled) {
if (traceEnabled) {
getTraceStdStream().println(msg);
}
synchronized (w.perfCountersPrev) {
prevCounter = w.perfCountersPrev.get(counterName);
if (perfLog.isLoggable(PlatformLogger.Level.FINE)) {
perfLog.fine(msg);
}
if (newCounter != null && prevCounter != null) {
long timeDeltaNanos = newCounter.updateTimeNanos - prevCounter.updateTimeNanos;
// Note that this time delta will usually be above one second.
if (timeDeltaNanos > 0) {
long nanosInSecond = java.util.concurrent.TimeUnit.SECONDS.toNanos(1);
long valPerSecond = (long) ((double) (newCounter.value - prevCounter.value)
* nanosInSecond / timeDeltaNanos);
return valPerSecond;
}
}
return -1;
}
}); // 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
// a window doesn't need to be updated in the Z-order.
@Override
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 Map<String, PerfCounter> perfCountersPrev = new HashMap<>(4);
private transient final HashMap<String, PerfCounter> perfCounters = (USE_COUNTERS) ? new HashMap<>(TRACE_CAPACITY) : null;
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

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.
*
* 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.event.*;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.image.VolatileImage;
import java.awt.peer.WindowPeer;
import java.security.AccessControlContext;
@@ -49,7 +47,6 @@ import sun.security.action.GetPropertyAction;
import com.sun.java.swing.SwingUtilities3;
import java.awt.geom.AffineTransform;
import java.util.stream.Collectors;
import sun.java2d.SunGraphics2D;
import sun.java2d.pipe.Region;
@@ -800,7 +797,7 @@ public class RepaintManager
.filter(Objects::nonNull)
.distinct()
.forEach(w -> AWTAccessor.getWindowAccessor()
.bumpCounter(w, "swing.RepaintManager.updateWindows"));
.incrementCounter(w, "swing.RepaintManager.updateWindows"));
if (Toolkit.getDefaultToolkit() instanceof SunToolkit sunToolkit &&
sunToolkit.needUpdateWindow())

View File

@@ -4319,38 +4319,43 @@ public class BasicTreeUI extends TreeUI
updateSize();
}
else if (treeState.isExpanded(parentPath)) {
// Changed nodes are visible
// Find the minimum index, we only need paint from there
// down.
int minIndex = indices[0];
for (int i = indices.length - 1; i > 0; i--) {
minIndex = Math.min(indices[i], minIndex);
boolean isShowing = tree.isShowing();
TreePath minPath = null;
Rectangle minBounds = null;
if (isShowing) {
// Changed nodes are visible
// Find the minimum index, we only need paint from there
// down.
int minIndex = indices[0];
for (int i = indices.length - 1; i > 0; i--) {
minIndex = Math.min(indices[i], minIndex);
}
Object minChild = treeModel.getChild(
parentPath.getLastPathComponent(), minIndex);
minPath = parentPath.pathByAddingChild(minChild);
minBounds = getPathBounds(tree, minPath);
}
Object minChild = treeModel.getChild(
parentPath.getLastPathComponent(), minIndex);
TreePath minPath = parentPath.pathByAddingChild(minChild);
Rectangle minBounds = getPathBounds(tree, minPath);
// Forward to the treestate
treeState.treeNodesChanged(e);
// Mark preferred size as bogus.
updateSize0();
// And repaint
Rectangle newMinBounds = getPathBounds(tree, minPath);
if (minBounds == null || newMinBounds == null) {
return;
}
if (isShowing) {
// And repaint
Rectangle newMinBounds = getPathBounds(tree, minPath);
if (minBounds == null || newMinBounds == null) {
return;
}
if (indices.length == 1 &&
newMinBounds.height == minBounds.height) {
tree.repaint(0, minBounds.y, tree.getWidth(),
minBounds.height);
}
else {
tree.repaint(0, minBounds.y, tree.getWidth(),
tree.getHeight() - minBounds.y);
if (indices.length == 1 &&
newMinBounds.height == minBounds.height) {
tree.repaint(0, minBounds.y, tree.getWidth(),
minBounds.height);
} else {
tree.repaint(0, minBounds.y, tree.getWidth(),
tree.getHeight() - minBounds.y);
}
}
}
else {

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.
*
* 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);
/* JBR Window counters API */
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 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 (c) 2023, JetBrains s.r.o.. 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
@@ -24,31 +23,11 @@
* questions.
*/
// These are stubs in case we were built with Vulkan disabled.
#ifndef VULKAN_ENABLED
#include "jlong_md.h"
#include "jni.h"
/*
* Class: sun_java2d_vulkan_VKEnv
* Method: initPlatform
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL
Java_sun_java2d_vulkan_VKEnv_initPlatform(JNIEnv *env, jclass wlge, jlong nativePtr) {
return JNI_FALSE;
package sun.awt;
import java.awt.image.BufferedImage;
public interface SurfacePixelGrabber {
BufferedImage getClientAreaSnapshot(int x, int y, int width, int height);
}
/*
* 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.
*
* 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.TimerTask;
import java.util.concurrent.ConcurrentLinkedQueue;
import jdk.internal.misc.InnocuousThread;
import jdk.internal.ref.CleanerFactory;
import sun.java2d.marlin.ArrayCacheConst.CacheStats;
import static sun.java2d.marlin.MarlinUtils.logInfo;
@@ -388,21 +390,13 @@ public final class RendererStats implements MarlinConst {
private RendererStatsHolder() {
AccessController.doPrivileged(
(PrivilegedAction<Void>) () -> {
final Thread hook = new Thread(
MarlinUtils.getRootThreadGroup(),
new Runnable() {
@Override
public void run() {
dump();
}
},
"MarlinStatsHook"
);
final Thread hook = InnocuousThread.newSystemThread("MarlinStatsHook", () -> dump());
hook.setDaemon(true);
hook.setContextClassLoader(null);
Runtime.getRuntime().addShutdownHook(hook);
if (USE_DUMP_THREAD) {
final Timer statTimer = new Timer("RendererStats");
final Timer statTimer = new Timer("RendererStats", true);
statTimer.scheduleAtFixedRate(new TimerTask() {
@Override
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 final String name;
public long count = 0L;
public long sum = 0L;
public long min = Integer.MAX_VALUE;
public long max = Integer.MIN_VALUE;
public long count, sum, min, max;
public StatLong(final String name) {
this.name = name;
reset();
}
public void reset() {
count = 0L;
sum = 0L;
min = Integer.MAX_VALUE;
max = Integer.MIN_VALUE;
min = Long.MAX_VALUE;
max = Long.MIN_VALUE;
}
public void add(final int val) {
@@ -78,7 +76,7 @@ public class StatLong {
sb.append(name).append('[').append(count);
sb.append("] sum: ").append(sum).append(" avg: ");
sb.append(trimTo3Digits(((double) sum) / count));
sb.append(" [").append(min).append(" | ").append(max).append("]");
sb.append(" [").append(min).append(" - ").append(max).append("]");
return sb;
}
@@ -89,7 +87,7 @@ public class StatLong {
* @return double value with only 3 decimal digits
*/
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;
private Reference<AccelSurface> validSrcDataRef = new WeakReference<>(null);
private Reference<AccelSurface> validDstDataRef = new WeakReference<>(null);
private Reference<Region> validClipRef = new WeakReference<>(null);
private Reference<Composite> validCompRef = new WeakReference<>(null);
private Reference<Paint> validPaintRef = new WeakReference<>(null);
private Reference<AccelSurface> validSrcDataRef = null;
private Reference<AccelSurface> validDstDataRef = null;
private Reference<Region> validClipRef = null;
private Reference<Composite> validCompRef = null;
private Reference<Paint> validPaintRef = null;
// renamed from isValidatedPaintAColor as part of a work around for 6764257
private boolean isValidatedPaintJustAColor;
private int validatedRGB;
@@ -213,20 +213,18 @@ public abstract class BufferedContext {
updatePaint = true;
isValidatedPaintJustAColor = true;
}
} else if (validPaintRef.get() != paint) {
} else if (stateChanged(validPaintRef, paint)) {
updatePaint = true;
// this should be set when we are switching from paint to color
// in which case this condition will be true
isValidatedPaintJustAColor = false;
}
final AccelSurface validatedSrcData = validSrcDataRef.get();
final AccelSurface validatedDstData = validDstDataRef.get();
if ((currentContext != this) ||
(srcData != validatedSrcData) ||
(dstData != validatedDstData))
final boolean srcChanged = stateChanged(validSrcDataRef, srcData);
final boolean dstChanged = stateChanged(validDstDataRef, dstData);
if ((currentContext != this) || srcChanged || dstChanged)
{
if (dstData != validatedDstData) {
if (dstChanged) {
// the clip is dependent on the destination surface, so we
// need to update it if we have a new destination surface
updateClip = true;
@@ -243,13 +241,13 @@ public abstract class BufferedContext {
setSurfaces(srcData, dstData);
currentContext = this;
validSrcDataRef = new WeakReference<>(srcData);
validDstDataRef = new WeakReference<>(dstData);
validSrcDataRef = wrapState(srcData);
validDstDataRef = wrapState(dstData);
}
// validate clip
final Region validatedClip = validClipRef.get();
if ((clip != validatedClip) || updateClip) {
final Region validatedClip = validClipRef == null ? null : validClipRef.get();
if (stateChanged(validClipRef, clip) || updateClip) {
if (clip != null) {
if (updateClip ||
validatedClip == null ||
@@ -264,13 +262,13 @@ public abstract class BufferedContext {
} else {
resetClip();
}
validClipRef = new WeakReference<>(clip);
validClipRef = wrapState(clip);
}
// validate composite (note that a change in the context flags
// may require us to update the composite state, even if the
// composite has not changed)
if ((comp != validCompRef.get()) || (flags != validatedFlags)) {
if (stateChanged(validCompRef, comp) || (flags != validatedFlags)) {
if (comp != null) {
setComposite(comp, flags);
} else {
@@ -279,7 +277,7 @@ public abstract class BufferedContext {
// the paint state is dependent on the composite state, so make
// sure we update the color below
updatePaint = true;
validCompRef = new WeakReference<>(comp);
validCompRef = wrapState(comp);
validatedFlags = flags;
}
@@ -313,7 +311,7 @@ public abstract class BufferedContext {
} else {
BufferedPaints.resetPaint(rq);
}
validPaintRef = new WeakReference<>(paint);
validPaintRef = wrapState(paint);
}
// mark dstData dirty
@@ -321,6 +319,18 @@ public abstract class BufferedContext {
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,
AccelSurface dstData)
{
@@ -434,11 +444,11 @@ public abstract class BufferedContext {
resetComposite();
resetClip();
BufferedPaints.resetPaint(rq);
validSrcDataRef.clear();
validDstDataRef.clear();
validCompRef.clear();
validClipRef.clear();
validPaintRef.clear();
validSrcDataRef = null;
validDstDataRef = null;
validCompRef = null;
validClipRef = null;
validPaintRef = null;
isValidatedPaintJustAColor = false;
xformInUse = false;
}

View File

@@ -31,12 +31,11 @@ import sun.util.logging.PlatformLogger;
import java.awt.Toolkit;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.util.stream.Collectors;
import java.util.stream.Stream;
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 {
@@ -72,42 +71,57 @@ public final class VKEnv {
public static synchronized void init(long nativePtr) {
if (state > INITIALIZING) return;
long platformData = nativePtr == 0 ? 0 : initPlatform(nativePtr);
int newState = DISABLED;
if (Options.vulkan) {
devices = initNative(platformData);
if (devices != null) {
newState = ENABLED;
if (Options.accelsd) newState |= ACCELSD_BIT;
defaultDevice = devices[Options.deviceNumber >= 0 && Options.deviceNumber < devices.length ?
Options.deviceNumber : 0];
// Check whether the presentation is supported.
for (VKGPU device : devices) {
if (device.hasCap(VKGPU.CAP_PRESENTABLE_BIT) &&
device.getPresentableGraphicsConfigs().findAny().isPresent()) {
newState |= PRESENT_BIT;
break;
try {
long platformData = nativePtr == 0 ? 0 : initPlatform(nativePtr);
devices = initNative(platformData);
if (devices != null) {
newState = ENABLED;
if (Options.accelsd) newState |= ACCELSD_BIT;
defaultDevice = devices[Options.deviceNumber >= 0 && Options.deviceNumber < devices.length ?
Options.deviceNumber : 0];
// Check whether the presentation is supported.
for (VKGPU device : devices) {
if (device.hasCap(VKGPU.CAP_PRESENTABLE_BIT) &&
device.getPresentableGraphicsConfigs().findAny().isPresent()) {
newState |= PRESENT_BIT;
break;
}
}
}
VKBlitLoops.register();
VKMaskFill.register();
VKMaskBlit.register();
VKBlitLoops.register();
VKMaskFill.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;
if (Options.verbose || log.isLoggable(PlatformLogger.Level.FINE)) {
String message;
StringBuilder msg = new StringBuilder("Vulkan rendering enabled: ");
if (isVulkanEnabled()) {
message = "Vulkan rendering enabled: YES" +
"\n presentation enabled: " + (isPresentationEnabled() ? "YES" : "NO") +
"\n accelerated surface data enabled: " + (isSurfaceDataAccelerated() ? "YES" : "NO") +
"\n devices:" + Stream.of(devices).map(d -> (d == defaultDevice ?
"\n *" : "\n ") + d.getName()).collect(Collectors.joining());
msg.append("YES")
.append("\n Presentation enabled: ").append(isPresentationEnabled() ? "YES" : "NO")
.append("\n Accelerated surface data enabled: ").append(isSurfaceDataAccelerated() ? "YES" : "NO")
.append("\n Devices:");
for (int i = 0; i < devices.length; i++) {
VKGPU d = devices[i];
msg.append(d == defaultDevice ? "\n *" : "\n ").append(i).append(": ").append(d.getName());
}
} else {
message = "Vulkan rendering enabled: NO";
msg.append("NO");
}
String message = msg.toString();
if (Options.verbose) {
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());
SurfaceData sd = SurfaceData.getPrimarySurfaceData(image);
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,
VkImage dedicatedImage, VkBuffer dedicatedBuffer) {
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.
VkBool32 dedicated = dedicatedImage != VK_NULL_HANDLE || dedicatedBuffer != VK_NULL_HANDLE;

View File

@@ -24,22 +24,15 @@
* questions.
*/
#include <assert.h>
#include <string.h>
#include "jlong.h"
#include "VKUtil.h"
#include "VKBlitLoops.h"
#include "VKSurfaceData.h"
#include "VKRenderer.h"
#include "GraphicsPrimitiveMgr.h"
#include "Trace.h"
#include "VKImage.h"
#include "VKBuffer.h"
#include "VKImage.h"
#include "VKDevice.h"
#include "VKTexturePool.h"
#include "VKUtil.h"
#include "VKRenderer.h"
#include "VKSurfaceData.h"
#include "VKUtil.h"
#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)
{
if (srcOps == NULL) {
J2dRlsTraceLn(J2D_TRACE_ERROR,
"VKBlitLoops_IsoBlit: srcOps is null")
J2dRlsTraceLn(J2D_TRACE_ERROR, "VKBlitLoops_IsoBlit: srcOps is null");
return;
}
@@ -147,7 +139,7 @@ static void VKBlitLoops_FindStageBufferMemoryType(VKMemoryRequirements* requirem
void VKBlitLoops_Blit(JNIEnv *env,
SurfaceDataOps* src,
jshort srctype, jint hint,
jshort srctype, jint filter,
jint sx1, jint sy1,
jint sx2, jint sy2,
jdouble dx1, jdouble dy1,
@@ -237,13 +229,13 @@ void VKBlitLoops_Blit(JNIEnv *env,
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);
VKRenderer_FlushMemoryOnReset(context->surface->renderPass, buffer.range);
VKRenderer_ExecOnCleanup(context->surface->renderPass, VKBlitLoops_DisposeTexture, imageHandle);
VKRenderer_ExecOnCleanup(context->surface->renderPass, VKBlitLoops_DisposeBuffer, buffer.handle);
VKRenderer_ExecOnCleanup(context->surface->renderPass, VKBlitLoops_DisposeMemory, page);
VKRenderer_FlushMemory(context->surface, buffer.range);
VKRenderer_ExecOnCleanup(context->surface, VKBlitLoops_DisposeTexture, imageHandle);
VKRenderer_ExecOnCleanup(context->surface, VKBlitLoops_DisposeBuffer, buffer.handle);
VKRenderer_ExecOnCleanup(context->surface, VKBlitLoops_DisposeMemory, page);
} else {
J2dRlsTraceLn(J2D_TRACE_ERROR, "VKBlitLoops_Blit: could not get raster info");
}
@@ -258,7 +250,7 @@ void VKBlitLoops_Blit(JNIEnv *env,
*/
void
VKBlitLoops_SurfaceToSwBlit(JNIEnv *env,
VKSDOps* src, SurfaceDataOps* dst, jint dsttype,
VKSDOps* src, SurfaceDataOps* dst,
jint srcx, jint srcy, jint dstx, jint dsty,
jint width, jint height)
{

View File

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

View File

@@ -30,12 +30,9 @@
#include "VKAllocator.h"
#include "VKBuffer.h"
#include "VKDevice.h"
#include "VKRenderer.h"
#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) {
assert(device != NULL && device->allocator != NULL);
for (uint32_t i = 0; i < bufferCount; i++) {
@@ -233,6 +230,11 @@ void VKBuffer_Dispose(VKDevice* device, void* data) {
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_RasterInfo info,
VkPipelineStageFlags stage,
@@ -270,19 +272,10 @@ VKBuffer *VKBuffer_CreateFromRaster(VKDevice *device,
device->vkUnmapMemory(device->handle, buffer->range.memory);
{
VkCommandBuffer cb = VKRenderer_Record(device->renderer);
VkBufferMemoryBarrier barrier;
VKBarrierBatch barrierBatch = {};
VKBuffer_AddBarrier(&barrier, &barrierBatch, buffer,
VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, stage, access);
if (barrierBatch.barrierCount > 0) {
device->vkCmdPipelineBarrier(cb, barrierBatch.srcStages,
barrierBatch.dstStages,
0, 0, NULL,
barrierBatch.barrierCount, &barrier,
0, NULL);
}
VKBuffer_AddBarrier(&barrier, &barrierBatch, buffer, VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, 0, stage, access);
VKRenderer_RecordBarriers(device->renderer, &barrier, &barrierBatch, NULL, NULL);
}
return buffer;
}

View File

@@ -27,11 +27,8 @@
#ifndef VKBuffer_h_Included
#define VKBuffer_h_Included
#include "VKTypes.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)
#include "VKAllocator.h"
#include "VKUtil.h"
struct VKBuffer {
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);
// Init function tables.
VkBool32 missingAPI = JNI_FALSE;
DEVICE_FUNCTION_TABLE(CHECK_PROC_ADDR, missingAPI, vk->vkGetDeviceProcAddr, device->handle, device->)
if (device->caps & CAP_PRESENTABLE_BIT) {

View File

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

View File

@@ -21,6 +21,7 @@
// or visit www.oracle.com if you need additional information or have any
// questions.
#include <assert.h>
#include "VKUtil.h"
#include "VKEnv.h"
#include "VKPipelines.h"
@@ -528,8 +529,6 @@ VKRenderPassContext* VKPipelines_GetRenderPassContext(VKPipelineContext* pipelin
return renderPassContext;
}
// static VKPipelineInfo VKPipelines_
VKPipelineInfo VKPipelines_GetPipelineInfo(VKRenderPassContext* renderPassContext, VKPipelineDescriptor descriptor) {
assert(renderPassContext != NULL);
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,
"VKRenderQueue_flushBuffer: SURFACE_TO_SW_BLIT (%p) (%d %d %d %d) -> (%p) (%d %d)",
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;
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); \
}} 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
* 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.
* 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) = \
(struct PoolEntry_ ## NAME) { .timestamp = 0ULL, .value = (VAR) })
@@ -95,7 +89,7 @@ typedef struct {
} VKCleanupEntry;
/**
* Renderer attached to device.
* Renderer attached to the device.
*/
struct VKRenderer {
VKDevice* device;
@@ -106,7 +100,6 @@ struct VKRenderer {
POOL(VkSemaphore, semaphorePool);
POOL(VKBuffer, vertexBufferPool);
POOL(VKTexelBuffer, maskFillBufferPool);
POOL(VkFramebuffer, framebufferDestructionQueue);
POOL(VKCleanupEntry, cleanupQueue);
ARRAY(VKMemory) bufferMemoryPages;
ARRAY(VkDescriptorPool) descriptorPools;
@@ -151,7 +144,7 @@ typedef struct {
} BufferWriting;
/**
* Rendering-related info attached to surface.
* Rendering-related info attached to the surface.
*/
struct VKRenderPass {
VKRenderPassContext* context;
@@ -316,6 +309,16 @@ void VKRenderer_CreateImageDescriptorSet(VKRenderer* renderer, VkDescriptorPool*
*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) {
VKDevice* device = renderer->device;
VkSemaphore semaphore = VK_NULL_HANDLE;
@@ -331,21 +334,22 @@ static VkSemaphore VKRenderer_AddPendingSemaphore(VKRenderer* renderer) {
return semaphore;
}
/**
* Wait till the GPU execution reached a given timestamp.
*/
static void VKRenderer_Wait(VKRenderer* renderer, uint64_t timestamp) {
if (renderer->readTimestamp >= timestamp) return;
VKDevice* device = renderer->device;
VkSemaphoreWaitInfo semaphoreWaitInfo = {
if (renderer->readTimestamp < timestamp) {
VkSemaphoreWaitInfo semaphoreWaitInfo = {
.sType = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO,
.flags = 0,
.semaphoreCount = 1,
.pSemaphores = &renderer->timelineSemaphore,
.pValues = &timestamp
};
VK_IF_ERROR(device->vkWaitSemaphores(device->handle, &semaphoreWaitInfo, -1)) {
} else {
// On success, update last known timestamp.
renderer->readTimestamp = timestamp;
};
VK_IF_ERROR(renderer->device->vkWaitSemaphores(renderer->device->handle, &semaphoreWaitInfo, -1)) VK_UNHANDLED_ERROR();
else renderer->readTimestamp = timestamp; // On success, update the last known timestamp.
}
VKRenderer_CleanupPendingResources(renderer);
}
void VKRenderer_Sync(VKRenderer* renderer) {
@@ -426,9 +430,6 @@ void VKRenderer_Destroy(VKRenderer* renderer) {
device->vkDestroyBufferView(device->handle, entry->value.view, 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++) {
VKAllocator_Free(device->allocator, renderer->bufferMemoryPages[i]);
}
@@ -453,24 +454,6 @@ void VKRenderer_Destroy(VKRenderer* 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).
* Recorded commands will be sent for execution via VKRenderer_Flush.
@@ -575,38 +558,8 @@ void VKRenderer_Flush(VKRenderer* renderer) {
renderer, submitInfo.commandBufferCount, pendingPresentations);
}
/**
* 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) {
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.
* Get Color RGBA components in a format suitable for the current render pass.
*/
inline RGBA VKRenderer_GetRGBA(VKSDOps* surface, Color color) {
return VKUtil_GetRGBA(color, surface->renderPass->outAlphaType);
@@ -660,6 +613,25 @@ static void VKRenderer_ResetDrawing(VKSDOps* surface) {
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.
*/
@@ -673,7 +645,6 @@ static void VKRenderer_DiscardRenderPass(VKSDOps* surface) {
J2dRlsTraceLn1(J2D_TRACE_VERBOSE, "VKRenderer_DiscardRenderPass(%p)", surface);
}
}
static void VKRenderer_FlushDependentRenderPasses(VKSDOps* surface);
void VKRenderer_DestroyRenderPass(VKSDOps* surface) {
assert(surface != NULL);
@@ -688,7 +659,6 @@ void VKRenderer_DestroyRenderPass(VKSDOps* surface) {
}
if (surface->renderPass == NULL) return;
if (device != NULL && device->renderer != NULL) {
VKRenderer_CleanupPendingResources(device->renderer);
VKRenderer_DiscardRenderPass(surface);
// Release resources.
device->vkDestroyFramebuffer(device->handle, surface->renderPass->framebuffer, NULL);
@@ -744,6 +714,11 @@ static VkBool32 VKRenderer_InitRenderPass(VKSDOps* surface) {
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.
* 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) {
// 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->state.stencilMode = STENCIL_MODE_OFF;
}
@@ -902,24 +878,20 @@ VkBool32 VKRenderer_FlushRenderPass(VKSDOps* surface) {
}
ARRAY_RESIZE(surface->renderPass->usedSurfaces, 0);
// Insert barriers to prepare surface for rendering.
VkImageMemoryBarrier barriers[2];
VKBarrierBatch barrierBatch = {};
VKRenderer_AddImageBarrier(barriers, &barrierBatch, surface->image,
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
VKImage_AddBarrier(barriers, &barrierBatch, surface->image,
VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT,
VK_ACCESS_COLOR_ATTACHMENT_READ_BIT | VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL);
if (surface->stencil != NULL) {
VKRenderer_AddImageBarrier(barriers, &barrierBatch, surface->stencil,
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_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
}
if (barrierBatch.barrierCount > 0) {
device->vkCmdPipelineBarrier(cb, barrierBatch.srcStages, barrierBatch.dstStages,
0, 0, NULL, 0, NULL, barrierBatch.barrierCount, barriers);
VKImage_AddBarrier(barriers, &barrierBatch, surface->stencil,
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_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL);
}
VKRenderer_RecordBarriers(renderer, NULL, NULL, barriers, &barrierBatch);
// If there is a pending clear, record it into render pass.
if (clear) VKRenderer_BeginRenderPass(surface);
@@ -949,24 +921,6 @@ VkBool32 VKRenderer_FlushRenderPass(VKSDOps* surface) {
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) {
assert(surface != NULL);
if (!VKRenderer_FlushRenderPass(surface)) return;
@@ -1015,10 +969,9 @@ void VKRenderer_FlushSurface(VKSDOps* surface) {
.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};
VKRenderer_AddImageBarrier(barriers, &barrierBatch, surface->image, VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
device->vkCmdPipelineBarrier(cb, barrierBatch.srcStages, barrierBatch.dstStages,
0, 0, NULL, 0, NULL, barrierBatch.barrierCount, barriers);
VKImage_AddBarrier(barriers, &barrierBatch, surface->image, VK_PIPELINE_STAGE_TRANSFER_BIT,
VK_ACCESS_TRANSFER_READ_BIT, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL);
VKRenderer_RecordBarriers(renderer, NULL, NULL, barriers, &barrierBatch);
}
// 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.
* 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,
* 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(vertexSize * vertices <= VERTEX_BUFFER_SIZE);
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.
* This function cannot draw more vertices than fits into single vertex buffer at once.
* 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) \
VKRenderer_AllocateVertices((PRIMITIVE_COUNT), (VERTEX_COUNT), sizeof((VERTICES)[0]), (void**) &(VERTICES))
/**
* 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.
* Caller must write data at the returned pointer VKBufferWritingState.data
* and take into account VKBufferWritingState.offset from the beginning of the bound buffer.
* Caller must write data at the returned pointer BufferWritingState.data
* 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.
*/
static BufferWritingState VKRenderer_AllocateMaskFillBytes(uint32_t size) {
@@ -1211,7 +1161,8 @@ static void VKRenderer_ValidateTransform() {
* pixels inside the clip shape are set to "pass".
* 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);
VKSDOps* surface = context->surface;
VKRenderPass* renderPass = surface->renderPass;
@@ -1246,15 +1197,12 @@ static void VKRenderer_SetupStencil(const VKRenderingContext* context) {
renderPass->vertexBufferWriting.bound = VK_FALSE;
// 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;
for (uint32_t drawn = 0;;) {
uint32_t currentDraw = ARRAY_SIZE(context->clipSpanVertices) - drawn;
if (currentDraw > MAX_VERTICES_PER_DRAW) currentDraw = MAX_VERTICES_PER_DRAW;
else if (currentDraw == 0) break;
VK_DRAW(vs, 1, currentDraw);
memcpy(vs, context->clipSpanVertices + drawn, currentDraw * sizeof(VKIntVertex));
drawn += currentDraw;
for (uint32_t primitivesDrawn = 0; primitivesDrawn < primitiveCount;) {
uint32_t currentDraw = VK_DRAW(vs, primitiveCount - primitivesDrawn, 3);
memcpy(vs, context->clipSpanVertices + primitivesDrawn * 3, currentDraw * 3 * sizeof(VKIntVertex));
primitivesDrawn += currentDraw;
}
VKRenderer_FlushDraw(surface);
@@ -1262,12 +1210,12 @@ static void VKRenderer_SetupStencil(const VKRenderingContext* context) {
renderPass->state.shader = NO_SHADER;
}
void VKRenderer_ExecOnCleanup(VKRenderPass* renderPass, VKCleanupHandler hnd, void* data) {
ARRAY_PUSH_BACK(renderPass->cleanupQueue) = (VKCleanupEntry) { hnd, data };
void VKRenderer_ExecOnCleanup(VKSDOps* surface, VKCleanupHandler handler, void* data) {
ARRAY_PUSH_BACK(surface->renderPass->cleanupQueue) = (VKCleanupEntry) { handler, data };
}
void VKRenderer_FlushMemoryOnReset(VKRenderPass* renderPass, VkMappedMemoryRange range) {
ARRAY_PUSH_BACK(renderPass->flushRanges) = range;
void VKRenderer_FlushMemory(VKSDOps* surface, VkMappedMemoryRange range) {
ARRAY_PUSH_BACK(surface->renderPass->flushRanges) = range;
}
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);
if (clipChanged) {
if (ARRAY_SIZE(context.clipSpanVertices) > 0) {
VKRenderer_SetupStencil(&context);
VKRenderer_SetupStencil();
renderPass->state.stencilMode = STENCIL_MODE_ON;
} 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,
jint maskoff, jint maskscan, jint masklen, uint8_t *mask) {
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);
} else {
// Special case, fully opaque mask
*((char *)maskState.data) = 0xFF;
*((char *)maskState.data) = (char)0xFF;
}
VKMaskFillColorVertex* vs;

View File

@@ -27,7 +27,6 @@
#ifndef VKRenderer_h_Included
#define VKRenderer_h_Included
#include "SurfaceData.h"
#include "VKTypes.h"
#include "VKPipelines.h"
@@ -56,32 +55,21 @@ struct VKRenderingContext {
ARRAY(VKIntVertex) clipSpanVertices;
};
typedef void (*VKCleanupHandler)(VKDevice *renderer, void* data);
typedef void (*VKCleanupHandler)(VKDevice* device, void* data);
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);
/**
* Record draw command, if there are any pending vertices in the vertex buffer
*/
void VKRenderer_FlushDraw(VKSDOps* surface);
/**
* Record commands into primary command buffer (outside of a render pass).
* Record commands into the primary command buffer (outside of a render pass).
* Recorded commands will be sent for execution via VKRenderer_Flush.
*/
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.
*/
@@ -94,7 +82,9 @@ void VKRenderer_CreateImageDescriptorSet(VKRenderer* renderer, VkDescriptorPool*
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);
@@ -115,14 +105,14 @@ void VKRenderer_DestroyRenderPass(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).
@@ -137,11 +127,6 @@ void VKRenderer_ConfigureSurface(VKSDOps* surface, VkExtent2D extent, VKDevice*
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.
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) {
// 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);
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,

View File

@@ -73,8 +73,7 @@ void VKTexturePoolLock_unlockImpl(ATexturePoolLockPrivPtr *lock) {
}
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_MEMORY_PROPERTY_HOST_VISIBLE_BIT, VK_ALL_MEMORY_PROPERTIES);
VKAllocator_FindMemoryType(requirements, VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT, VK_ALL_MEMORY_PROPERTIES);
}
/* Texture allocate/free API */

View File

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

View File

@@ -40,35 +40,44 @@ import java.awt.RenderingHints;
import java.awt.geom.Ellipse2D;
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_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 Color ACTIVE_BACKGROUND = new Color(0xebebeb);
private static final Color ACTIVE_BACKGROUND_DARK = new Color(0x222222);
private static final Color INACTIVE_BACKGROUND = new Color(0xfafafa);
private static final Color INACTIVE_BACKGROUND_DARK = new Color(0x2c2c2c);
private static final Color ACTIVE_BACKGROUND = new Color(0xedeeef);
private static final Color ACTIVE_BACKGROUND_DARK = new Color(0x31363b);
private static final Color INACTIVE_BACKGROUND = new Color(0xdcddde);
private static final Color INACTIVE_BACKGROUND_DARK = new Color(0x292d31);
private static final Color ICON_BACKGROUND = ACTIVE_BACKGROUND;
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_DARK = new Color(0x373737);
private static final Color ICON_PRESSED_BACKGROUND = new Color(0xc0c0c0);
private static final Color ICON_PRESSED_BACKGROUND_DARK = new Color(0x565656);
private static final Color ACTIVE_FOREGROUND = Color.darkGray;
private static final Color ACTIVE_FOREGROUND_DARK = new Color(0xf7f7f7);
private static final Color INACTIVE_FOREGROUND = Color.gray;
private static final Color INACTIVE_FOREGROUND_DARK = new Color(0xb5b5b5);
private static final Color ICON_HOVERED_BACKGROUND = new Color(0x232629);
private static final Color ICON_HOVERED_BACKGROUND_DARK = new Color(0xfcfcfc);
private static final Color ICON_HOVERED_FOREGROUND = new Color(0xcacdcf);
private static final Color ICON_HOVERED_FOREGROUND_DARK = new Color(0x43484c);
private static final Color ICON_PRESSED_BACKGROUND = new Color(0xa6a8ab);
private static final Color ICON_PRESSED_BACKGROUND_DARK = new Color(0x6e7175);
private static final Color CLOSE_ICON_PRESSED_BACKGROUND = new Color(0x6d2229);
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_DARK = new Color(0x313131);
private static final Color INACTIVE_BACKGROUND_TOP = new Color(0xfefefe);
private static final Color INACTIVE_BACKGROUND_TOP_DARK = new Color(0x3a3a3a);
private static final Color ACTIVE_BORDER = new Color(0x9e9e9e);
private static final Color ACTIVE_BORDER_DARK = new Color(0x080808);
private static final Color INACTIVE_BORDER = new Color(0xbcbcbc);
private static final Color INACTIVE_BORDER_DARK = new Color(0x121212);
private static final int BORDER_SIZE = 1;
private static final Color ACTIVE_BACKGROUND_TOP = new Color(0xa9abac);
private static final Color ACTIVE_BACKGROUND_TOP_DARK = new Color(0x4c565f);
private static final Color INACTIVE_BACKGROUND_TOP = new Color(0xb7b8b9);
private static final Color INACTIVE_BACKGROUND_TOP_DARK = new Color(0x424952);
private static final Color ACTIVE_BORDER = ACTIVE_BACKGROUND_TOP;
private static final Color ACTIVE_BORDER_DARK = ACTIVE_BACKGROUND_TOP_DARK;
private static final Color INACTIVE_BORDER = INACTIVE_BACKGROUND_TOP;
private static final Color INACTIVE_BORDER_DARK = INACTIVE_BACKGROUND_TOP_DARK;
private static final int SIGNIFICANT_DRAG_DISTANCE = 4;
public DefaultFrameDecoration(WLDecoratedPeer peer, boolean showMinimize, boolean showMaximize) {
@@ -96,64 +105,27 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
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
protected Rectangle getCloseButtonBounds() {
int width = peer.getWidth();
if (width >= HEIGHT) {
return new Rectangle(width - HEIGHT / 2 - BUTTON_CIRCLE_RADIUS,
HEIGHT / 2 - BUTTON_CIRCLE_RADIUS,
BUTTON_CIRCLE_RADIUS * 2,
BUTTON_CIRCLE_RADIUS * 2);
} else {
return null;
}
int x = peer.getWidth() - BUTTON_SIZE - BUTTONS_RIGHT_PADDING - BORDER_SIZE;
int y = (int) Math.floor((HEIGHT - BUTTON_SIZE + 1f) / 2);
return new Rectangle(x, y, BUTTON_SIZE, BUTTON_SIZE);
}
@Override
protected Rectangle getMaximizeButtonBounds() {
if (!hasMaximizeButton()) return null;
int width = peer.getWidth();
if (width >= 2 * HEIGHT) {
return new Rectangle(width - HEIGHT * 3 / 2 - BUTTON_CIRCLE_RADIUS,
HEIGHT / 2 - BUTTON_CIRCLE_RADIUS,
BUTTON_CIRCLE_RADIUS * 2,
BUTTON_CIRCLE_RADIUS * 2);
} else {
return null;
}
int x = peer.getWidth() - BUTTON_SIZE * 2 - BUTTONS_RIGHT_PADDING
- BUTTONS_PADDING - BORDER_SIZE;
int y = (int) Math.floor((HEIGHT - BUTTON_SIZE + 1f) / 2);
return x > 0 ? new Rectangle(x, y, BUTTON_SIZE, BUTTON_SIZE) : null;
}
@Override
protected Rectangle getMinimizeButtonBounds() {
if (!hasMinimizeButton()) return null;
int width = peer.getWidth();
int buttonSpaceWidth = getButtonSpaceWidth();
if (width >= buttonSpaceWidth) {
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;
}
int x = peer.getWidth() - BUTTON_SIZE * 3 - BUTTONS_RIGHT_PADDING
- BUTTONS_PADDING * 2 - BORDER_SIZE;
int y = (int) Math.floor((HEIGHT - BUTTON_SIZE + 1f) / 2);
return x > 0 ? new Rectangle(x, y, BUTTON_SIZE, BUTTON_SIZE) : null;
}
@Override
@@ -170,7 +142,7 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
final int numButtons = 1
+ (hasMaximizeButton() ? 1 : 0)
+ (hasMinimizeButton() ? 1 : 0);
return numButtons * HEIGHT;
return numButtons * BUTTON_SIZE + (numButtons - 1) * BUTTONS_PADDING + BUTTONS_RIGHT_PADDING;
}
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
protected void paintBorder(Graphics2D g2d) {
int width = peer.getWidth();
int height = peer.getHeight();
g2d.setColor(getBorderColor(isActive()));
g2d.setStroke(new BasicStroke(BORDER_SIZE));
g2d.drawRect(0, 0, width - BORDER_SIZE, height - BORDER_SIZE);
g2d.drawRect(0, 0, width, height);
}
@Override
@@ -250,17 +242,11 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
// The title bar
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
var oldStroke = g.getStroke();
g.setColor(getBorderColor(active));
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.drawLine(0, HEIGHT - 1, width, HEIGHT - 1);
} else {
@@ -270,32 +256,35 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
// The top bevel of the title bar
g.setColor(getBackgroundTopColor(active));
g.drawLine(BORDER_SIZE, BORDER_SIZE, width - BORDER_SIZE, BORDER_SIZE);
g.drawLine(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, HEIGHT - BORDER_SIZE);
g.drawLine(BORDER_SIZE, BORDER_SIZE, width, BORDER_SIZE);
g.drawLine(BORDER_SIZE, BORDER_SIZE, BORDER_SIZE, HEIGHT);
// The border
var oldStroke = g.getStroke();
g.setColor(getBorderColor(active));
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);
}
paintTitle(g, title, foregroundColor, width);
Point closeButtonCenter = getCloseButtonCenter();
if (closeButtonCenter != null) {
paintButtonBackground(g, closeButtonCenter, closeButton);
paintCloseButton(g, closeButtonCenter, foregroundColor);
Rectangle closeButtonBounds = getCloseButtonBounds();
if (closeButtonBounds != null) {
paintCloseButtonBackground(g, closeButtonBounds, closeButton);
Color buttonColor = getButtonForeground(closeButton.hovered);
paintCloseButton(g, closeButtonBounds, buttonColor);
}
Point maximizedButtonCenter = getMaximizeButtonCenter();
if (maximizedButtonCenter != null) {
paintButtonBackground(g, maximizedButtonCenter, maximizeButton);
paintMaximizeButton(g, maximizedButtonCenter, foregroundColor);
Rectangle maximizedButtonBounds = getMaximizeButtonBounds();
if (maximizedButtonBounds != null) {
paintButtonBackground(g, maximizedButtonBounds, maximizeButton);
Color buttonColor = getButtonForeground(maximizeButton.hovered);
paintMaximizeButton(g, maximizedButtonBounds, buttonColor);
}
Point minimizedButtonCenter = getMinimizeButtonCenter();
if (minimizedButtonCenter != null) {
paintButtonBackground(g, minimizedButtonCenter, minimizeButton);
paintMinimizeButton(g, minimizedButtonCenter, foregroundColor);
Rectangle minimizedButtonBounds = getMinimizeButtonBounds();
if (minimizedButtonBounds != null) {
paintButtonBackground(g, minimizedButtonBounds, minimizeButton);
Color buttonColor = getButtonForeground(minimizeButton.hovered);
paintMinimizeButton(g, minimizedButtonBounds, buttonColor);
}
g.setClip(null);
}
@@ -304,7 +293,7 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
g.setColor(foregroundColor);
g.setFont(FONT);
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;
String text = SwingUtilities2.clipStringIfNecessary(null, fm, title, availableWidth);
int textWidth = fm.stringWidth(text);
@@ -313,48 +302,60 @@ public class DefaultFrameDecoration extends FullFrameDecorationHelper {
(HEIGHT - fm.getHeight()) / 2 + fm.getAscent());
}
private void paintButtonBackground(Graphics2D g, Point center, ButtonState state) {
if (isActive()) {
private void paintCloseButtonBackground(Graphics2D g, Rectangle bounds, ButtonState state) {
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() :
state.hovered ? getIconHoveredBackground() : getIconBackground());
g.fill(new Ellipse2D.Float(center.x - BUTTON_CIRCLE_RADIUS + .5f,
center.y - BUTTON_CIRCLE_RADIUS + .5f,
2 * BUTTON_CIRCLE_RADIUS, 2 * BUTTON_CIRCLE_RADIUS));
g.fill(new Ellipse2D.Float(bounds.x, bounds.y, bounds.width, bounds.height));
}
}
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);
Point center = centerOf(bounds);
g.drawLine(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,
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);
Point center = centerOf(bounds);
int size = BUTTON_ICON_SIZE + 1;
if (peer.getState() == Frame.MAXIMIZED_BOTH) {
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);
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);
g.drawLine(center.x - size, center.y, center.x, center.y - size);
g.drawLine(center.x, center.y - size, center.x + size, center.y);
g.drawLine(center.x - size, center.y, center.x, center.y + size);
g.drawLine(center.x, center.y + size, center.x + size, center.y);
} else {
g.drawLine(center.x - BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE / 2,
center.x, center.y - BUTTON_ICON_SIZE / 2);
g.drawLine(center.x, center.y - BUTTON_ICON_SIZE / 2,
center.x + BUTTON_ICON_SIZE, center.y + BUTTON_ICON_SIZE / 2);
g.drawLine(center.x - size, (int) (center.y + size / 2f),
center.x, (int) (center.y - size / 2f));
g.drawLine(center.x, (int) (center.y - size / 2f),
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.drawLine(center.x - BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE / 2,
center.x, center.y + BUTTON_ICON_SIZE / 2);
g.drawLine(center.x, center.y + BUTTON_ICON_SIZE / 2,
center.x + BUTTON_ICON_SIZE, center.y - BUTTON_ICON_SIZE / 2);
Point center = centerOf(bounds);
int size = BUTTON_ICON_SIZE + 1;
g.drawLine(center.x - size, (int) (center.y - size / 2f),
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) {
super(peer, showMinimize, showMaximize);
nativePtr = nativeCreateDecoration(showMinimize, showMaximize);
nativePtr = nativeCreateDecoration(showMinimize, showMaximize, isDarkTheme());
assert nativePtr != 0;
int t = nativeGetIntProperty(nativePtr, "gtk-dnd-drag-threshold");
dndThreshold = t > 0 ? t : 4;
@@ -76,8 +76,10 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
@Override
public void paint(Graphics g) {
// Determine buttons' bounds, etc.
nativePrePaint(nativePtr, peer.getWidth());
super.paint(g);
nativePrePaint(nativePtr, peer.getWidth(), peer.getHeight());
if (peer.getWidth() >= titleBarMinWidth && peer.getHeight() >= titleBarHeight) {
super.paint(g);
}
}
@Override
@@ -85,6 +87,9 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
int width = peer.getWidth();
int height = titleBarHeight;
assert width >= titleBarMinWidth;
assert peer.getHeight() >= titleBarHeight;
double scale = ((WLGraphicsConfig) peer.getGraphicsConfiguration()).getEffectiveScale();
g2d.setBackground(new Color(0, true));
g2d.clearRect(0, 0, width, height);
@@ -186,7 +191,7 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
@Override
public void notifyThemeChanged() {
nativeSwitchTheme();
nativeSwitchTheme(isDarkTheme());
}
private int getButtonsState() {
@@ -210,12 +215,12 @@ public class GtkFrameDecoration extends FullFrameDecorationHelper {
private static native void initIDs();
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 nativeSwitchTheme();
private native void nativeSwitchTheme(boolean isDarkTheme);
private native void nativePaintTitleBar(long nativePtr, int[] buffer, int width, int height, double scale,
String title, int buttonsState);
private native int nativeGetIntProperty(long nativePtr, String name);
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();
}
@Override
protected void wlSetVisible(boolean v) {
// TODO: unimplemented
}
public boolean isFocusable() {
return true;
}

View File

@@ -42,4 +42,9 @@ class WLCanvasPeer extends WLComponentPeer implements CanvasPeer {
{
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 popupLog = PlatformLogger.getLogger("sun.awt.wl.popup.WLComponentPeer");
private static final int MINIMUM_WIDTH = 1;
private static final int MINIMUM_HEIGHT = 1;
protected static final int MINIMUM_WIDTH = 1;
protected static final int MINIMUM_HEIGHT = 1;
private final Object stateLock = new Object();
@@ -135,7 +135,12 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
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
// setup parent window for target
}
@@ -344,6 +349,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
}
protected void wlSetVisible(boolean v) {
// TODO: this whole method should be moved to WLWindowPeer
synchronized (getStateLock()) {
if (this.visible == v) return;
@@ -364,7 +370,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
performLocked(() -> {
assert wlSurface == null;
wlSurface = new WLMainSurface(this);
wlSurface = new WLMainSurface((WLWindowPeer) this);
long wlSurfacePtr = wlSurface.getWlSurfacePtr();
if (isWlPopup) {
Window popup = (Window) target;
@@ -397,11 +403,13 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
// from notifyConfigured()
} else {
performLocked(() -> {
nativeHideFrame(nativePtr);
if (wlSurface != null) { // may get a "hide" request even though we were never shown
nativeHideFrame(nativePtr);
shadow.hide();
wlSurface.dispose();
wlSurface = null;
shadow.hide();
wlSurface.dispose();
wlSurface = null;
}
});
}
}
@@ -849,8 +857,10 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
}
public Dimension getMinimumSize() {
int shadowSize = (int) Math.ceil(shadow.getSize() * 4);
return new Dimension(shadowSize, shadowSize);
int shadowSize = shadow != null ? (int) Math.ceil(shadow.getSize() * 4) : 0;
return shadowSize == 0
? new Dimension(MINIMUM_WIDTH, MINIMUM_HEIGHT)
: new Dimension(shadowSize, shadowSize);
}
void showWindowMenu(long serial, int x, int y) {
@@ -1074,7 +1084,7 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
long surface = WLToolkit.getInputState().surfaceForKeyboardInput();
// 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.
if (wlSurface != null && surface != 0 && WLToolkit.componentPeerFromSurface(surface) != null) {
if (wlSurface != null && surface != 0 && WLToolkit.peerFromSurface(surface) != null) {
wlSurface.activateByAnotherSurface(serial, surface);
}
});
@@ -1608,6 +1618,14 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
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
*/
@@ -1738,9 +1756,12 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
private Dimension constrainSize(int width, int height) {
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(
Math.max(Math.min(width, maxBounds.width), MINIMUM_WIDTH),
Math.max(Math.min(height, maxBounds.height), MINIMUM_HEIGHT));
Math.max(Math.min(width, maxBounds.width), minSize.width),
Math.max(Math.min(height, maxBounds.height), minSize.height));
}
private Dimension constrainSize(Dimension bounds) {
@@ -1809,6 +1830,20 @@ public class WLComponentPeer implements ComponentPeer, WLSurfaceSizeListener {
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 final Color activeColor = new Color(0, 0, 0, 0xA0);
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 SurfaceData shadowSurfaceData; // 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 boolean isActive; // protected by AWT lock
public Shadow(int shadowSize) {
public ShadowImpl(int shadowSize) {
this.shadowSize = shadowSize;
shadowWlSize.deriveFromJavaSize(wlSize.getJavaWidth() + shadowSize * 2, wlSize.getJavaHeight() + shadowSize * 2);
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 {
/**
* 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 setSelectionImpl(int protocol, long nativePtr, long dataOfferNativePtr, long serial);
private static native void startDragImpl(long nativePtr, long dataOfferNativePtr,
long originSurfaceNativePtr, long iconNativePtr, long serial);
long originSurfaceNativePtr, long serial);
public boolean isProtocolSupported(int protocol) {
return isProtocolSupportedImpl(nativePtr, protocol);
@@ -98,8 +98,8 @@ public class WLDataDevice {
setSelectionImpl(protocol, nativePtr, (source == null) ? 0 : source.getNativePtr(), serial);
}
public void startDrag(WLDataSource source, long originSurfaceNativePtr, long iconNativePtr, long serial) {
startDragImpl(nativePtr, source.getNativePtr(), originSurfaceNativePtr, iconNativePtr, serial);
public void startDrag(WLDataSource source, long originSurfaceNativePtr, long serial) {
startDragImpl(nativePtr, source.getNativePtr(), originSurfaceNativePtr, serial);
}
public WLClipboard getSystemClipboard() {

View File

@@ -25,7 +25,11 @@
package sun.awt.wl;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.datatransfer.Transferable;
import java.awt.image.BufferedImage;
import java.util.HashSet;
public class WLDataSource {
// 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 setDnDIconImpl(long nativePtr, int width, int height, int offsetX, int offsetY, int[] pixels);
WLDataSource(WLDataDevice dataDevice, int protocol, Transferable data) {
var wlDataTransferer = (WLDataTransferer) WLDataTransferer.getInstance();
@@ -52,9 +58,20 @@ public class WLDataSource {
try {
if (data != null) {
var mimes = new HashSet<String>();
long[] formats = wlDataTransferer.getFormatsForTransferableAsArray(data, wlDataTransferer.getFlavorTable());
for (long format : formats) {
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);
}
}
@@ -79,6 +96,31 @@ public class WLDataSource {
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() {
if (nativePtr != 0) {
destroyImpl(nativePtr);

View File

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

View File

@@ -38,7 +38,7 @@ public class WLDialogPeer extends WLDecoratedPeer implements DialogPeer {
public void setVisible(boolean vis) {
super.setVisible(vis);
}
@Override
public void blockWindows(List<Window> windows) {

View File

@@ -115,10 +115,16 @@ public class WLDragSourceContextPeer extends SunDragSourceContextPeer {
source.setDnDActions(waylandActions);
var dragImage = getDragImage();
if (dragImage != null) {
var dragImageOffset = getDragImageOffset();
source.setDnDIcon(dragImage, dragImageOffset.x, dragImageOffset.y);
}
long eventSerial = WLToolkit.getInputState().pointerButtonSerial();
var wlSurface = getComponentWlSurfacePtr();
dataDevice.startDrag(source, wlSurface, 0, eventSerial);
dataDevice.startDrag(source, wlSurface, eventSerial);
}
@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) {
var peer = WLToolkit.componentPeerFromSurface(surfacePtr);
var peer = WLToolkit.peerFromSurface(surfacePtr);
if (peer == null) {
return;
}

View File

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

View File

@@ -1,5 +1,6 @@
package sun.awt.wl;
import sun.awt.AWTAccessor;
import sun.awt.KeyboardFocusManagerPeerImpl;
import sun.util.logging.PlatformLogger;
@@ -35,10 +36,25 @@ public class WLKeyboardFocusManagerPeer extends KeyboardFocusManagerPeerImpl {
@Override
public void setCurrentFocusOwner(Component comp) {
Window cur = getCurrentFocusedWindow();
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.
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;
public class WLMainSurface extends WLSurface {
private final WLComponentPeer peer;
private final WLWindowPeer peer;
// Graphics devices this top-level component is visible on
private final List<WLGraphicsDevice> devices = new ArrayList<>();
public WLMainSurface(WLComponentPeer peer) {
public WLMainSurface(WLWindowPeer peer) {
this.peer = peer;
}

View File

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

View File

@@ -87,6 +87,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Properties;
import java.util.concurrent.Semaphore;
@@ -139,6 +140,8 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
private static Boolean sunAwtDisableGtkFileDialogs = null;
private static final boolean isKDE;
private static native void initIDs(long displayPtr);
static {
@@ -148,6 +151,11 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
VKEnv.init(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;
}
@@ -335,7 +343,7 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
}
final long surfacePtr = inputState.surfaceForKeyboardInput();
final WLComponentPeer peer = componentPeerFromSurface(surfacePtr);
final WLComponentPeer peer = peerFromSurface(surfacePtr);
if (peer != null) {
if (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 WLComponentPeer peer = componentPeerFromSurface(surfacePtr);
if (peer != null && peer.getTarget() instanceof Window window) {
final WLWindowPeer peer = peerFromSurface(surfacePtr);
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);
final WindowEvent windowEnterEvent = new WindowEvent(window, WindowEvent.WINDOW_GAINED_FOCUS);
WindowEvent windowEnterEvent = new WindowEvent(winToFocus, WindowEvent.WINDOW_GAINED_FOCUS);
postPriorityEvent(windowEnterEvent);
}
inputState = newInputState;
@@ -423,8 +441,9 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
keyboard.onLostFocus();
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) {
((WLToolkit) Toolkit.getDefaultToolkit()).ungrab(window);
final WindowEvent winLostFocusEvent = new WindowEvent(window, WindowEvent.WINDOW_LOST_FOCUS);
WLKeyboardFocusManagerPeer.getInstance().setCurrentFocusedWindow(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.
*/
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)) {
log.fine("registerWLSurface: 0x" + Long.toHexString(wlSurfacePtr) + "->" + componentPeer);
log.fine("registerWLSurface: 0x" + Long.toHexString(wlSurfacePtr) + "->" + peer);
}
synchronized (wlSurfaceToComponentMap) {
wlSurfaceToComponentMap.put(wlSurfacePtr, componentPeer);
synchronized (wlSurfaceToPeerMap) {
wlSurfaceToPeerMap.put(wlSurfacePtr, peer);
}
}
static void unregisterWLSurface(long wlSurfacePtr) {
synchronized (wlSurfaceToComponentMap) {
wlSurfaceToComponentMap.remove(wlSurfacePtr);
synchronized (wlSurfaceToPeerMap) {
wlSurfaceToPeerMap.remove(wlSurfacePtr);
}
inputState = inputState.updatedFromUnregisteredSurface(wlSurfacePtr);
}
static WLComponentPeer componentPeerFromSurface(long wlSurfacePtr) {
synchronized (wlSurfaceToComponentMap) {
return wlSurfaceToComponentMap.get(wlSurfacePtr);
static WLWindowPeer peerFromSurface(long wlSurfacePtr) {
synchronized (wlSurfaceToPeerMap) {
return wlSurfaceToPeerMap.get(wlSurfacePtr);
}
}
@@ -466,15 +485,15 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
* associated with that surface.
* Otherwise, throw UOE.
*/
static WLComponentPeer getSingularWindowPeer() {
synchronized (wlSurfaceToComponentMap) {
if (wlSurfaceToComponentMap.size() > 1) {
static WLWindowPeer getSingularWindowPeer() {
synchronized (wlSurfaceToPeerMap) {
if (wlSurfaceToPeerMap.size() > 1) {
throw new UnsupportedOperationException("More than one native window");
} else if (wlSurfaceToComponentMap.isEmpty()) {
} else if (wlSurfaceToPeerMap.isEmpty()) {
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
public void grab(Window w) {
if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine("Not implemented: WLToolkit.grab()");
// There is no input grab in Wayland for client applications, only
// 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
public void ungrab(Window w) {
if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine("Not implemented: WLToolkit.ungrab()");
Objects.requireNonNull(w);
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();
}
public static boolean isKDE() {
return isKDE;
}
}

View File

@@ -25,7 +25,11 @@
package sun.awt.wl;
import sun.awt.AWTAccessor;
import sun.awt.SurfacePixelGrabber;
import sun.awt.UngrabEvent;
import sun.java2d.SunGraphics2D;
import sun.java2d.vulkan.VKSurfaceData;
import sun.java2d.wl.WLSMSurfaceData;
import javax.swing.JRootPane;
import javax.swing.RootPaneContainer;
@@ -35,17 +39,24 @@ import java.awt.Component;
import java.awt.Dialog;
import java.awt.Font;
import java.awt.Insets;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.SystemColor;
import java.awt.Window;
import java.awt.event.WindowEvent;
import java.awt.geom.Path2D;
import java.awt.image.BufferedImage;
import java.awt.peer.ComponentPeer;
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 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";
@@ -89,6 +100,8 @@ public class WLWindowPeer extends WLComponentPeer implements WindowPeer {
@Override
protected void wlSetVisible(boolean v) {
if (!v) ungrab();
if (v && targetIsWlPopup() && shouldBeFocusedOnShowing()) {
requestWindowFocus();
}
@@ -191,6 +204,7 @@ public class WLWindowPeer extends WLComponentPeer implements WindowPeer {
@Override
public void dispose() {
ungrab();
resetCornerMasks();
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() {
int roundedCornerSize = WLRoundedCornersManager.roundCornerRadiusFor(roundedCornerKind);
// Note: You would normally get a transparency-capable color model when using

View File

@@ -26,19 +26,25 @@
package sun.java2d.wl;
import java.awt.AlphaComposite;
import java.awt.Color;
import java.awt.Component;
import java.awt.Window;
import java.awt.GraphicsConfiguration;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;
import java.awt.image.ColorModel;
import java.awt.image.Raster;
import java.awt.image.SampleModel;
import java.awt.image.WritableRaster;
import java.util.Objects;
import sun.awt.AWTAccessor;
import sun.awt.wl.WLComponentPeer;
import sun.awt.wl.WLGraphicsConfig;
import sun.awt.wl.WLSMGraphicsConfig;
import sun.java2d.SurfaceData;
import sun.java2d.loops.Blit;
import sun.java2d.loops.CompositeType;
import sun.java2d.loops.SurfaceType;
import sun.util.logging.PlatformLogger;
@@ -124,16 +130,20 @@ public class WLSMSurfaceData extends SurfaceData implements WLSurfaceDataExt, WL
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
public Raster getRaster(int x, int y, int w, int h) {
// Can do something like the following:
// 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");
return getSnapshot(x, y, w, h).getRaster().createTranslatedChild(x, y);
}
@Override
@@ -189,7 +199,7 @@ public class WLSMSurfaceData extends SurfaceData implements WLSurfaceDataExt, WL
private void countNewFrame() {
// Called from the native code when this surface data has been sent to the Wayland server
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,
// when those attempts are too frequent.
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 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 GtkSettings* (*gtk_settings_get_default_t)(void);
typedef GtkSettings* (*gtk_widget_get_settings_t)(GtkWidget*);
typedef GtkStateFlags (*gtk_style_context_get_state_t)(GtkStyleContext *context);
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_get_property_t)(GObject*, const gchar*, GValue*);
typedef gboolean (*g_type_check_instance_is_a_t)(void**, GType);
typedef gboolean (*g_main_context_iteration_t)(GMainContext *context, gboolean);
typedef struct GtkFrameDecorationDescr {
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_frame_t p_gtk_render_frame;
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_get_border_t p_gtk_style_context_get_border;
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_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_main_context_iteration_t p_g_main_context_iteration;
static void* gtk_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_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_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_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");
@@ -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_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_main_context_iteration = find_func(env, gtk_handle, "g_main_context_iteration");
// NB: An error had been thrown in case some function was missing
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);
}
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) {
CHECK_NULL_THROW_IE(env,
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
(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));
CHECK_NULL_THROW_OOME_RETURN(env, d, "Failed to allocate GtkFrameDeocration", 0);
p_gdk_threads_enter();
set_theme(is_dark_theme);
d->show_minimize = show_minimize;
d->show_maximize = show_maximize;
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,
jlong ptr, jint width) {
jlong ptr, jint width, jint height) {
assert (ptr != 0);
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, 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};
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();
}
JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeSwitchTheme(JNIEnv *env, jobject obj) {
while ((*p_g_main_context_iteration)(NULL, false));
JNIEXPORT void JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeSwitchTheme(JNIEnv *env, jobject obj, jboolean is_dark_theme) {
p_gdk_threads_enter();
set_theme(is_dark_theme);
p_gdk_threads_leave();
}
JNIEXPORT jint JNICALL Java_sun_awt_wl_GtkFrameDecoration_nativeGetIntProperty

View File

@@ -72,6 +72,9 @@ struct DataSource
struct wl_data_source *wlDataSource;
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
@@ -937,7 +940,7 @@ Java_sun_awt_wl_WLDataDevice_setSelectionImpl(JNIEnv *env,
JNIEXPORT void JNICALL
Java_sun_awt_wl_WLDataDevice_startDragImpl(JNIEnv *env, jclass clazz, jlong dataDeviceNativePtr,
jlong dataSourceNativePtr, jlong wlSurfacePtr,
jlong iconPtr, jlong serial)
jlong serial)
{
struct DataDevice *dataDevice = jlong_to_ptr(dataDeviceNativePtr);
assert(dataDevice != NULL);
@@ -946,7 +949,10 @@ Java_sun_awt_wl_WLDataDevice_startDragImpl(JNIEnv *env, jclass clazz, jlong data
assert(source != NULL);
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
@@ -1045,6 +1051,14 @@ Java_sun_awt_wl_WLDataSource_destroyImpl(JNIEnv *env, jclass clazz, jlong native
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);
}
@@ -1058,6 +1072,65 @@ Java_sun_awt_wl_WLDataSource_setDnDActionsImpl(JNIEnv *env,
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
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);
#endif
int javaModifiers = convertXKBModifiersToJavaModifiers(getXKBModifiers());
struct WLKeyEvent event = {
.serial = serial,
.timestamp = timestamp,
@@ -1169,7 +1171,8 @@ postKeyTypedJavaChar(long serial, long timestamp, uint16_t javaChar) {
.keyLocation = java_awt_event_KeyEvent_KEY_LOCATION_UNKNOWN,
.rawCode = 0,
.extendedKeyCode = 0,
.keyChar = javaChar
.keyChar = javaChar,
.modifiers = javaModifiers,
};
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) {
wl_shm = wl_registry_bind( wl_registry, name, &wl_shm_interface, 1);
} 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) {
wl_subcompositor = wl_registry_bind(wl_registry, name, &wl_subcompositor_interface, 1);
} 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) {
switch (D3DRenderQueue.getFramePresentedStatus()) {
case 1:
AWTAccessor.getWindowAccessor().bumpCounter(window, "java2d.native.framesPresentRequested");
AWTAccessor.getWindowAccessor().incrementCounter(window, "java2d.native.framesPresentRequested");
break;
case 0:
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 "Hashtable.h"
#include "ComCtl32Util.h"
#include "AccessibleCaret.h"
#include "math.h"
#include <Region.h>
@@ -2071,6 +2072,32 @@ LRESULT AwtComponent::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
if (::IsWindow(AwtWindow::GetModalBlocker(GetHWnd()))) {
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/MethodHandlesGeneralTest.java initial_run 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/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
@@ -173,8 +174,14 @@ runtime/cds/appcds/methodHandles/MethodHandlesAsCollectorTest.java initial_run g
runtime/cds/SharedBaseAddress.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/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/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
#############################################################################
@@ -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/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/Multi005/TestDescription.java 8076494,JBR-8927 windows-x64,windows-aarch64

View File

@@ -427,7 +427,9 @@ jdk_editpad = \
jdk/editpad
jbr_all = \
jb
jb \
-jb/java/awt/vulkan \
-jb/java/awt/wayland/vulkan \
jdk_desktop = \
:jdk_desktop_part1 \
@@ -459,9 +461,6 @@ jdk_desktop_part3 = \
java/awt/datatransfer \
java/awt/Window
jbr_all = \
jb
jbr_desktop_part11 = \
:jdk_desktop_part1 \
-:jdk_swing \
@@ -796,6 +795,7 @@ jdk_core_no_security = \
jdk_awt_wayland = \
:jdk_awt \
jb/java/awt/wayland \
-jb/java/awt/wayland/vulkan \
jb/java/awt/Focus/ActivateAfterHide.java \
-com/apple/eawt \
-com/apple/laf \
@@ -1098,12 +1098,7 @@ jdk_awt_wayland = \
jdk_swing_wayland= \
:jdk_swing \
jb/javax/swing/Popup/WLPopupAsParent.java \
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 \
jb/javax/swing/wayland \
-com/sun/java/swing/plaf/gtk/TestBackSpaceAction.java \
-com/sun/java/swing/plaf/gtk/TestFileChooserCtrlASelection.java \
-com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java \
@@ -1374,3 +1369,19 @@ jdk_swing_wayland= \
jdk_desktop_wayland = \
:jdk_awt_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 DARK_THEME_NAME = "Dark";
private static final String UNDEFINED_THEME_NAME = "Undefined";
private static boolean isKDE = false;
private static String currentTheme() {
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;
}
private static void setOsDarkTheme(String val) {
try {
private static void setOsDarkTheme(String val) throws Exception {
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)) {
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'");
@@ -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 color-scheme 'default'");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
private static String currentTheme = null;
public static void main(String[] args) throws Exception {
isKDE = "KDE".equals(System.getenv("XDG_CURRENT_DESKTOP"));
currentTheme = currentTheme();
if (currentTheme.equals(UNDEFINED_THEME_NAME)) {
throw new RuntimeException("Test Failed! Cannot detect current OS theme");

View File

@@ -27,9 +27,12 @@
* @run junit/othervm
* -Djava.nio.file.spi.DefaultFileSystemProvider=testNio.ManglingFileSystemProvider
* -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
*/
import com.sun.nio.file.ExtendedOpenOption;
import org.junit.After;
import org.junit.Assume;
import org.junit.Before;
@@ -42,10 +45,15 @@ import testNio.ManglingFileSystemProvider;
import java.io.EOFException;
import java.io.File;
import java.io.RandomAccessFile;
import java.lang.reflect.Field;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Objects;
import static org.junit.Assert.assertEquals;
@@ -268,4 +276,21 @@ public class RandomAccessFileTest {
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 (c) 2024, JetBrains s.r.o.. All rights reserved.
* 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

View File

@@ -21,30 +21,6 @@
* 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.JLabel;
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/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/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/Scrollbar/ScrollbarMouseWheelTest/ScrollbarMouseWheelTest.java JBR-5397,JBR-7531 macosx-all,windows-x64
java/awt/ScrollPane/ScrollPaneLimitation.java JBR-8579 windows-x64
java/awt/ScrollPane/ScrollPaneRemoveAdd.java JBR-8580 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/TextField/GetTextTest/GetTextTest.java JBR-9253 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/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/SlowPanelIteration/SlowPanelIteration.java JBR-870,JBR-5397 windows-x64,linux-x64,macosx-all
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/6559152/bug6559152.java JBR-5397,JBR-7382 macosx-all,windows-x64
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
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/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/Focus/NewFrameAfterDialogTest.java JBR-7387 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
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/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/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/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/6596966/bug6596966.java 8197552,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/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/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/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
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
sun/java2d/DirectX/OnScreenRenderingResizeTest/OnScreenRenderingResizeTest.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/JComboBoxWithTitledBorderTest.java JBR-5397 macosx-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
# 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/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857,JBR-5505 macosx-all,windows-all
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/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5510,JBR-5905 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-5905 linux-all,windows-x64
java/awt/ColorClass/AlphaColorTest.java JBR-7253 windows-x64
java/awt/Component/NativeInLightShow/NativeInLightShow.java JBR-7715 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/memoryleak/InputContextMemoryLeakTest.java JBR-5505 windows-all
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/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/JGlassPaneMoveOverlapping.java JBR-5510,JBR-5505 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-5505 windows-all
java/awt/Mixing/MixingOnDialog.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

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/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/image/multiresolution/MultiResolutionJOptionPaneIconTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
java/awt/Paint/PaintNativeOnUpdate.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.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/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java JBR-6510 macosx-all
java/awt/Paint/ExposeOnEDT.java JBR-6510 macosx-all
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/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-7146 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/FullWindowContentTest/FullWindowContentTest.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
java/awt/TextArea/TextAreaScrolling/TextAreaScrolling.java JBR-6510 macosx-all
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-8983 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/JButton/8151303/PressedIconTest.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/JComboBox/EditableComboBoxPopupPos.java JBR-6510 macosx-all
javax/swing/JComponent/7154030/bug7154030.java JBR-7713 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/JInternalFrame/DockIconRepaint/DockIconRepaint.java JBR-7146 macosx-12.7.4,macosx-12.7.5,macosx-12.7.6
javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.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/JFileChooser/8021253/bug8021253.java JBR-6510 macosx-all
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/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-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/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentGradient.java JBR-8217 macosx-15.6,macosx-15.6.1
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/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
jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java JBR-6998 macosx-all

View File

@@ -122,22 +122,25 @@ java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-7339 linux-all,windows-
java/awt/Focus/8282640/ScrollPaneFocusBugTest.java JBR-7340 linux-all
java/awt/Focus/ActivateFocusTest.java JBR-7888 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/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/List/PageUPSelectsItemsTest.java JBR-8281 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/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/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
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/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-6485 linux-all
javax/swing/plaf/nimbus/8041642/bug8041642.java JBR-6698 linux-all
javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-6274 windows-all,macosx-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/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/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/TemporaryLostComponentDeadlock.java JBR-5734 windows-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/MenuShortcut/ActionCommandTest.java JBR-8822 windows-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/NonEmptyErrorStream.java JBR-5442,JBR-5510 macosx-15.4,macosx-15.5,linux-5.18.2-arch1-1
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 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/SpuriousMouseEvents/SpuriousMouseEvents.java JBR-6572 linux-all
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/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/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/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,macosx-15.6,macosx-15.6.1
javax/swing/JTextArea/8149849/DNDTextToScaledArea.java JBR-5442 linux-all
javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java JBR-5442 linux-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
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/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.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/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/MultiResolutionJOptionPaneIconTest.java 8253184,JBR-5510 windows-all,linux-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 windows-all,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/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/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801,JBR-5510 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5510 macosx-all,linux-all
java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5510,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/JInternalFrameOverlapping.java JBR-5510 linux-all
java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801,JBR-5510 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,JBR-5510 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,JBR-5510 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,JBR-5510 windows-all,macosx-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,JBR-5510 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,JBR-5510 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,JBR-5510 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,JBR-5510 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,JBR-5510 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,JBR-5510 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,JBR-5510 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,JBR-5510 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,JBR-5510 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-5510,JBR-6284 macosx-all,windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405 macosx-all,linux-all
java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-6134 windows-x64,linux-all
java/awt/Mixing/AWT_Mixing/JInternalFrameMoveOverlapping.java 6986109 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801 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/JProgressBarInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8253184 windows-all,linux-all
java/awt/Modal/ModalDialogOrderingTest/ModalDialogOrderingTest.java 8066259,8253184 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/BlockedMouseInputTest.java nobug 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/MouseInfo/MultiscreenPointerInfo.java nobug linux-all
java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java 8253184 windows-all,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/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/Window/8159168/SetShapeTest.java 8253184,JBR-5510 windows-all,linux-all
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linux-all
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-5510,JBR-7312 linux-all,macosx-all
java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510 windows-all,linux-all
java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184,JBR-5510 windows-all,linux-all
java/awt/Window/8159168/SetShapeTest.java 8253184 windows-all,linux-all
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-7312 linux-all,macosx-all
java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184 windows-all,linux-all
java/awt/Window/ShapedAndTranslucentWindows/SetShape.java 8253184 windows-all,linux-all
java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.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/JComponent/7154030/bug7154030.java JBR-5510 linux-all
javax/swing/JDialog/Transparency/TransparencyTest.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5510 linux-all
javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5510 linux-all
javax/swing/JDialog/Transparency/TransparencyTest.java 8253184 windows-all,linux-all
javax/swing/JFileChooser/4847375/bug4847375.java JBR-8534 windows-x64
javax/swing/JFileChooser/4966171/bug4966171.java JBR-8534 windows-x64
javax/swing/JFileChooser/8010718/bug8010718.java JBR-8534 windows-x64
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/JMenu/JMenuSelectedColorTest.java JBR-5510 linux-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.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/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-6347 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/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/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-5510 linux-all
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-5510,JBR-5951 linux-all,windows-x64
javax/swing/text/html/StyleSheet/bug4936917.java JBR-899,JBR-5510 windows-all,linux-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 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 windows-all,linux-all
javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,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/StyleSheet/bug4936917.java JBR-899 windows-all,linux-all
jb/java/awt/MouseInfo/GetPointerInfoTest.java nobug linux-all
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/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/image/DrawImage/IncorrectManagedImageSourceOffset.java JBR-8240 linux-aarch64
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/multiresolution/MenuMultiresolutionIconTest.java JBR-9135 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/Button/DisabledButtonPress.java JBR-5799 windows-aarch64
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/KeyEvent/CorrectTime/CorrectTime.java JBR-6665 linux-all,windows-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/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-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/FrameMinimizeTest/FrameMinimizeTest.java 8016266 linux-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/Frame/7024749/bug7024749.java JBR-5210 windows-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/HideMaximized/HideMaximized.java JBR-8310 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/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/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/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,macosx-15.6,macosx-15.6.1,macosx-26.0
java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenBig.java JBR-5303 windows-all
java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-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/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java JBR-4880,JBR-6683 windows-all,linux-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/DnDRemoveFocusOwnerCrashTest.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/ContainerFocusAutoTransferTest/ContainerFocusAutoTransferTest.java JBR-8556 linux-aarch64
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/MouseClickRequestFocusRaceTest/MouseClickRequestFocusRaceTest.java 8194753 linux-all,macosx-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/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java JBR-8885 macosx-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/grab/EmbeddedFrameTest1/EmbeddedFrameTest1.java 7080150,JBR-4880,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1
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 macosx-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/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/MixingFrameResizing.java 8049405,8253184 generic-all
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/JMenuBarOverlapping.java 8159451 linux-all,windows-all,macosx-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/JComboBoxOverlapping.java 8049405,JBR-5510 macosx-all,linux-5.18.2-arch1-1
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/JButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
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/JTableOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/ViewportOverlapping.java 8253184,JBR-5510 windows-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 windows-all,macosx-all
java/awt/Mixing/AWT_Mixing/JButtonInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JButtonOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JEditorPaneInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JEditorPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JLabelOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JListInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JListOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JPanelInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JPanelOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JProgressBarOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JScrollBarInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JScrollBarOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JScrollPaneOverlapping.java JBR-5210 windows-all
java/awt/Mixing/AWT_Mixing/JSliderInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JSliderOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JSpinnerInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JSpinnerOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTableInGlassPaneOverlapping.java 8158801,JBR-8311 windows-all,linux-all
java/awt/Mixing/AWT_Mixing/JTableOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextAreaInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextAreaOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JTextFieldOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JToggleButtonInGlassPaneOverlapping.java 8158801 windows-all
java/awt/Mixing/AWT_Mixing/JToggleButtonOverlapping.java 8158801 windows-all
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/MixingInHwPanel.java 8253184 windows-all
java/awt/Mixing/NonOpaqueInternalFrame.java 7124549 macosx-all
java/awt/Mixing/ValidBounds.java 8253184,JBR-5845 windows-all,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/ActualFocusedWindowTest/ActualFocusedWindowBlockingTest.java 8252772,JBR-5799 linux-all,windows-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/datatransfer/DragImage/MultiResolutionDragImageTest.java 8080982 generic-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/LightweightComponent/LightweightDragTest.java JBR-6557 windows-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/Focus/8013611/JDK8013611.java 8175366 windows-all,macosx-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/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729 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/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java 8253184 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/LockingKeyStateTest/LockingKeyStateTest.java JBR-5765 macosx-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/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/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/SetShapeDynamicallyAndClick.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/TranslucentWindowClick.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/MultiWindowAppTest.java 8253184,JBR-5510,JBR-6463 windows-all,linux-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-6463 windows-all,linux-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/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/DrawImage/IncorrectAlphaSurface2SW.java 8056077 linux-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/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
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/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/OpaqueImageToSurfaceBlitTest/OpaqueImageToSurfaceBlitTest.java JBR-5393 windows-aarch64
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/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/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/Graphics2D/DrawString/DisposerTest.java JBR-5010,JBR-5510 linux-aarch64,linux-5.18.2-arch1-1
java/awt/Graphics/NativeWin32Clear.java JBR-8689 linux-aarch64
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
sun/java2d/SunGraphics2D/PolyVertTest.java 6986565 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/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/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/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/F10TopToplevel/F10TopToplevel.java JBR-5687 linux-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/SetEnabledPerformance/SetEnabledPerformance.java 8165863 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/RepaintTest.java 8266244,JBR-5786 macosx-aarch64,generic-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/Modal/FileDialog/FileDialogAppModal1Test.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/UnblockedDialogSetModalTest.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/ApplicationExcludeDialogFileTest.java 8047179,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/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/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/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/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/ExtraMouseClick/ExtraMouseClick.java 8253184,JBR-5709 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/FrameToFrontModal4Test.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/FrameToFrontNonModalTest.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 windows-all
java/awt/Modal/ToFront/FrameToFrontTKModal1Test.java 8253184 windows-all
java/awt/Modal/ToFront/FrameToFrontTKModal2Test.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/OnTopAppModal5Test.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/OnTopDocModal2Test.java 8253184,JBR-5510,JBR-7778 windows-all,linux-5.18.2-arch1-1,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/OnTopDocModal4Test.java 8253184,JBR-5510,JBR-7778 windows-all,linux-5.18.2-arch1-1,linux-all
java/awt/Modal/OnTop/OnTopDocModal5Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Modal/OnTop/OnTopDocModal6Test.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Modal/OnTop/OnTopDocModal1Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal2Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal3Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal4Test.java 8253184,JBR-7778 windows-all,linux-all
java/awt/Modal/OnTop/OnTopDocModal5Test.java 8253184 windows-all
java/awt/Modal/OnTop/OnTopDocModal6Test.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/OnTopModal3Test.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/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/OnTopModeless2Test.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-5510,JBR-7778,8342800 windows-all,linux-5.18.2-arch1-1,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/OnTopModeless5Test.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-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-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless3Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless4Test.java 8253184,JBR-7778,8342800 windows-all,linux-all
java/awt/Modal/OnTop/OnTopModeless5Test.java 8253184,JBR-7778,8342800 windows-all,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/OnTopTKModal2Test.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/xembed/server/RunTestXEmbed.java 7034201 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/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/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/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java 8253184,JBR-6844 windows-all,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/PopupMenu/PopupMenuLocation.java 8238720,JBR-7035 windows-all,macosx-all
java/awt/Paint/PaintNativeOnUpdate.java 8253184 windows-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/GridLayout/ChangeGridSize/ChangeGridSize.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/MenuBar/MenuBarSetFont/MenuBarSetFont.java JBR-6660 windows-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/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243,JBR-5510,JBR-6632 macosx-all,linux-all
java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java JBR-5225 windows-all
java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java JBR-5210 windows-all
java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243,JBR-6632 macosx-all,linux-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/Window/GetScreenLocation/GetScreenLocationTest.java 8225787,8253184 linux-all,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/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/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/MulticastSendReceiveTests.java 8144003 macosx-all
java/nio/channels/DatagramChannel/Promiscuous.java 8144003 macosx-all
java/nio/channels/DatagramChannel/PromiscuousIPv6.java JBR-8828 macosx-x64
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,JBR-9218 macosx-all,linux-6.15.8-100.fc41.x86_64
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/FileChannel/LargeGatheringWrite.java JBR-9316 linux-6.15.8-100.fc41.x86_64
java/nio/channels/Selector/Wakeup.java 6963118 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/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java 8194945 linux-all,macosx-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/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/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/8057791/bug8057791.java 8253184,JBR-5510,JBR-8300 windows-all,linux-5.18.2-arch1-1,macosx-all
javax/swing/plaf/nimbus/8041642/bug8041642.java 8253184 windows-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/TestNimbusOverride.java 8253184,JBR-5829 windows-all,linux-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/DataTransfer/bug4655513.java JBR-8849 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/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/bug4490179.java JBR-8925 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/4743225/bug4743225.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/bug4890345.java JBR-5799 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/TestComboBoxComponentRendering.java JBR-8270 linux-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/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/bug4822331.java JBR-7422 windows-10.0
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/4654927/bug4654927.java JBR-164,JBR-4337 windows-all,linux-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/6249972/bug6249972.java 8197552 windows-all
javax/swing/JOptionPane/7138665/bug7138665.java JBR-5799 windows-all
javax/swing/JOptionPane/8081019/bug8081019.java JBR-5767 windows-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-5510,JBR-8665 linux-5.18.2-arch1-1,linux-6.8.0-1017-raspi
javax/swing/JOptionPane/8081019/bug8081019.java JBR-5767,JBR-9350 windows-all,macosx-all
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/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/4760494/bug4760494.java 8253184 windows-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/SetInvokerJPopupMenuTest.java JBR-6021 linux-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/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/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/PerPixelTranslucentSwing.java 8194128,8253184,JBR-5510,JBR-6515 macosx-all,windows-all,linux-5.18.2-arch1-1,linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentCanvas.java 8253184,JBR-7404 windows-all,macosx-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/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/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
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131 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/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/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/ButtonGroup/TestButtonGroupFocusTraversal.java JBR-5210,JBR-8268 windows-all,linux-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/JFormattedTextField/bug4863121.java JBR-7424 windows-10.0
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/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/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/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/TestJTabbedPaneBackgroundColor.java JBR-8718 linux-5.18.2-arch1-1,macosx-15.4.1
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-8493 macosx-15.4.1,macosx-15.6,macosx-15.6.1
javax/swing/JToggleButton/TestSelectedKey.java JBR-5846 windows-all
javax/swing/JToolBar/4529206/bug4529206.java JBR-5387 linux-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/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/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/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/JComboBox/4515752/DefaultButtonTest.java JBR-5799 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/6647340/bug6647340.java 8253184 windows-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/Test6325652.java JBR-6111 windows-all
javax/swing/JInternalFrame/8145896/TestJInternalFrameMaximize.java JBR-5539 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/Test6802868.java 8253184 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/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/JRootPane/4670486/bug4670486.java 8197552 windows-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/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,JBR-5510 windows-all,linux-5.18.2-arch1-1
javax/swing/text/html/StyleSheet/bug4936917.java JBR-899 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/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/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/Test6660049.java JBR-8397 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/8160248/JInternalFrameDraggingTest.java JBR-5510,JBR-6546 linux-5.18.2-arch1-1,windows-x64
javax/swing/JInternalFrame/5066752/bug5066752.java 8253184 windows-all
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/8069348/bug8069348.java 8253184,JBR-900 windows-all,linux-all
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/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/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/8156217/FPMethodCalledTest.java JBR-5541 linux-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/ScreenCaptureTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Robot/CheckCommonColors/CheckCommonColors.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 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
javax/swing/SwingGraphics/TranslateTest.java JBR-7470 linux-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/ColorChooserDemoTest.java 8278582,8273312,JBR-5510 windows-all,linux-5.18.2-arch1-1
sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-6475 windows-all,macosx-all,linux-all
sanity/client/SwingSet/src/ColorChooserDemoTest.java 8278582,8273312 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/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/IconTest.java JBR-8701 windows-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/launcher/Arrrghs.java JBR-8466 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/TestWaste.java 8282427 generic-all
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/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/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/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,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,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
java/awt/Modal/PrintDialogsTest/PrintDialogsTest.java 8068378 generic-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/7049024/bug7049024.java JBR-5836 linux-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
javax/swing/SwingUtilities/TestTextPosInPrint.java 8227025 windows-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
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
@@ -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/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/TouchScreenEvent/TouchScreenEventsTestLinux.sh JBR-4078 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/MiscUndecorated/UndecoratedInitiallyIconified.java JBR-4880 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/image/mlib/MlibOpsTest.java JBR-5225 windows-all,windows-aarch64
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/SpinnerTest.java JBR-4880 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/7124218/SelectEditTableCell.java JBR-6679 linux-all,windows-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/FlowView/LayoutTest.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/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/JapaneseReconvertTest.java JBR-7172,JBR-7243 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/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/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5510,JBR-5905 linux-5.18.2-arch1-1,linux-all
java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java 8310487 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/Frame/InvisibleOwner/InvisibleOwner.java JBR-5510 linux-5.18.2-arch1-1
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/AWT_Mixing/JGlassPaneInternalFrameOverlapping.java 8049405 windows-all,linux-all
java/awt/Mixing/LWComboBox.java JBR-7595 linux-all
java/awt/Mixing/LWPopupMenu.java JBR-824 generic-all
java/awt/Mixing/OpaqueTest.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
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/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-5510,JBR-5951 linux-5.18.2-arch1-1,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,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5951 windows-all
sanity/client/SwingSet/src/EditorPaneDemoTest.java 8212240,JBR-6285,8253184 macosx-all,linux-all,windows-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 macosx-all,windows-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
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/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-6160 linux-5.4.0-1103-aws
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/ComplexFocusSequence.java JBR-6728 linux-all,windows-x64
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/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
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

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/DragSourceGCrashTest.java JBR-6442 linux-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/InterJVMLinkTest.java JBR-9255 linux-6.15.8-100.fc41.x86_64
java/awt/dnd/MozillaDnDTest.java JBR-6442 linux-all
java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.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/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/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/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/JGlassPaneMoveOverlapping.java JBR-5359,JBR-5510,JBR-6090 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-6090 windows-aarch64,windows-all
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/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/Validating.java JBR-5908,JBR-6090 linux-all,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/BlockedMouseInputTest3.java JBR-6134 windows-x64
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/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-8357 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/ParagraphView/6364882/bug6364882.java JBR-8324 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/TranslucentJAppletTest/TranslucentJAppletTest.java nobug generic-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/ImageTransferTest/ImageTransferTest.java nobug,JBR-6442 generic-all,linux-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/font/Rotate/RotateTest3.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/image/DrawImage/IncorrectClipXorModeSW2Surface.java JBR-9216 linux-all
java/awt/Insets/DialogInsets.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
@@ -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/bug4246045.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/GroupLayout/8079640/bug8079640.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/TestComboBoxHeight.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/bug4979794.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/FileSizeCheck.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/JFrame/AlwaysOnTop/AlwaysOnTopImeTest.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/JMenu/8178430/LabelDotTest.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/TestJProgressBarHighlightColor.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/bug4656590.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/JSplitPaneTestNegDivSize.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/JTree/8041705/DefaultTreeCellRendererBorderTest.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/DemandGTK3.sh 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/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/UnmanagedDrawImagePerformance.java JBR-9023 linux-all
java/awt/font/ComplexEmoji.java JBR-5009,JBR-8399 linux-aarch64,linux-x64
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/MenuShortcut/FunctionKeyShortcut.java JBR-7932,JBR-9207 linux-all,linux-6.15.8-100.fc41.x86_64
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/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/JDesktopPane/TestDesktopManagerNPE.java JBR-8449 linux-x64
javax/swing/JEditorPane/JEditorPaneFontFallback.java JBR-8305 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/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/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/text/ParagraphView/6364882/bug6364882.java JBR-8324 linux-all