mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2025-12-10 19:39:39 +01:00
Compare commits
56 Commits
jb21.0.8-b
...
batrdmi/tr
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44f519d8c4 | ||
|
|
40e32cb0e0 | ||
|
|
0a4a65421e | ||
|
|
a446e58816 | ||
|
|
2818bb0b60 | ||
|
|
12bbc14e5e | ||
|
|
6c7a65b152 | ||
|
|
f361dbfb4e | ||
|
|
e4fbfeb597 | ||
|
|
c4475ae68f | ||
|
|
ad45fe00e9 | ||
|
|
e2c8a4c446 | ||
|
|
3db2ad8e7b | ||
|
|
90bfdab986 | ||
|
|
a89c3903bc | ||
|
|
d26e30ea8c | ||
|
|
bbdf8cc940 | ||
|
|
88f1599bad | ||
|
|
587b4d362c | ||
|
|
547012807e | ||
|
|
2d6f92627d | ||
|
|
e01b9602ac | ||
|
|
33e1d11973 | ||
|
|
0948c6db81 | ||
|
|
7b1aac2ec5 | ||
|
|
7c8f117efe | ||
|
|
0edb47a038 | ||
|
|
b15f66919b | ||
|
|
eafa414c2d | ||
|
|
062216614e | ||
|
|
694fa1425e | ||
|
|
1a59ac659e | ||
|
|
e85625006e | ||
|
|
95e65778dc | ||
|
|
799b5680a5 | ||
|
|
965d821b6c | ||
|
|
abb94f9339 | ||
|
|
aae9727100 | ||
|
|
d509b1a721 | ||
|
|
bac0039683 | ||
|
|
002c55361b | ||
|
|
ec8e3b1323 | ||
|
|
970813c79e | ||
|
|
be4e636f82 | ||
|
|
66bd76e105 | ||
|
|
ab1d262714 | ||
|
|
6f2fa19cde | ||
|
|
ffebc3f087 | ||
|
|
f23e3cd7d0 | ||
|
|
9fee2e4475 | ||
|
|
26f391e23a | ||
|
|
a1dc378601 | ||
|
|
cfb8dadf75 | ||
|
|
c86499ff65 | ||
|
|
ecbb4f620e | ||
|
|
247e9d8dfb |
@@ -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
|
||||
|
||||
@@ -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) \
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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
|
||||
@@ -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() {
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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 = ×tamp
|
||||
};
|
||||
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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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 */
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -42,4 +42,9 @@ class WLCanvasPeer extends WLComponentPeer implements CanvasPeer {
|
||||
{
|
||||
return gc;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void wlSetVisible(boolean v) {
|
||||
// TODO: unimplemented
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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().
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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) {
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -316,7 +316,7 @@ record WLInputState(WLPointerEvent eventWithSurface,
|
||||
*/
|
||||
public WLComponentPeer peerForPointerEvents() {
|
||||
return eventWithSurface != null
|
||||
? WLToolkit.componentPeerFromSurface(eventWithSurface.getSurface())
|
||||
? WLToolkit.peerFromSurface(eventWithSurface.getSurface())
|
||||
: null;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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());
|
||||
});
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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" */
|
||||
@@ -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
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
83
test/jdk/java/awt/ColorClass/WeakColorTest.java
Normal file
83
test/jdk/java/awt/ColorClass/WeakColorTest.java
Normal 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));
|
||||
}
|
||||
}
|
||||
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
65
test/jdk/jb/javax/swing/wayland/WLFrameMinSize.java
Normal file
65
test/jdk/jb/javax/swing/wayland/WLFrameMinSize.java
Normal 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");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
@@ -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;
|
||||
112
test/jdk/jb/javax/swing/wayland/WLUngrab.java
Normal file
112
test/jdk/jb/javax/swing/wayland/WLUngrab.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user