Compare commits

..

26 Commits

Author SHA1 Message Date
Vitaly Provodin
49982aff3c update exclude list on results of 21.0.5_b792.48 test runs 2025-01-20 16:47:29 +04:00
Vitaly Provodin
35aabb6ed3 JBR-8111 add vulkan package & calculate GLIBC expected version in checking dependencies 2025-01-18 13:25:40 +04:00
Vitaly Provodin
43e9aea49e JBR-8051 update devtoolset-10-binutils up to 2.35-5.el7.4 2025-01-18 13:25:40 +04:00
Vitaly Provodin
3960cc1c3f JBR-8071 enable OL7 extended support for docker images 2025-01-18 13:25:39 +04:00
Vitaly Provodin
8fd8c5767d JBR-8072 move JBR docker images to registry.jetbrains.team 2025-01-18 13:25:39 +04:00
Vitaly Provodin
50123f3f9f JBR-7673 Cleanup docker scripts 2025-01-18 13:25:38 +04:00
Vitaly Provodin
146afcfb37 JBR-7511 migrate build platforms to OL7
- modify scripts for building images from Oracle Linux 7
- update jb/build/VerifyDependencies.java to check libraries have no dependency on symbols from glibc version higher than 2.17
2025-01-18 13:25:37 +04:00
Vitaly Provodin
18f0138745 Revert "JBR-7511 migrate build platforms to OL8"
This reverts commit 6826f09811.
2025-01-18 13:25:36 +04:00
Vitaly Provodin
d28bfec70b Revert "JBR-7673 Cleanup docker scripts"
This reverts commit 373b9baf
2025-01-18 13:25:36 +04:00
Vitaly Provodin
3dae769bb2 Revert "JBR-8072 move JBR docker images to registry.jetbrains.team"
This reverts commit 66bd338d23.
2025-01-18 13:25:36 +04:00
Maxim Kartashev
b06e625923 JBR-7457 Provide JBR API method to explicitly call gc() 2025-01-17 18:21:35 +04:00
Nikita Tsarev
980b5a354c JBR-8004: Support the context menu key on macOS 2025-01-15 18:46:26 +01:00
Vitaly Provodin
8183c5b042 update exclude list on results of 21.0.5_b762.40 test runs 2025-01-15 08:32:38 +04:00
Maxim Kartashev
4c2ce96b68 JBR-8123 NPE because FileSystems.getDefault() is null with -Djava.util.zip.use.nio.for.zip.file.access=true 2025-01-14 19:59:57 +04:00
Vitaly Provodin
b715412025 update exclude list on results of 21.0.5_b762.36 test runs 2025-01-14 16:04:06 +04:00
Vitaly Provodin
0cab753fb1 update exclude list on results of 21.0.5_b750.29 test runs 2025-01-10 02:30:34 +04:00
Alan Bateman
de64e51188 8346573: Can't use custom default file system provider with custom system class loader
Reviewed-by: mkartashev, bpb
2025-01-07 17:04:36 +04:00
Vitaly Provodin
03ff99a62b Revert "JBR-8038 8345296: AArch64: VM crashes with SIGILL when prctl is disallowed"
This reverts commit 8b0b738416.
2024-12-26 17:59:52 +04:00
Vitaly Provodin
18c3fd40ee update exclude list on results of 21.0.5_b738.27 test runs 2024-12-26 15:53:02 +04:00
Vitaly Provodin
66bd338d23 JBR-8072 move JBR docker images to registry.jetbrains.team 2024-12-26 13:54:29 +04:00
Aleksey Shipilev
8b0b738416 JBR-8038 8345296: AArch64: VM crashes with SIGILL when prctl is disallowed
Reviewed-by: eastigeevich, phh, aph
2024-12-24 04:18:24 +04:00
Maxim Kartashev
f2a562e0c0 JBR-7988 Wayland: WLPopupLocation test: incorrect size detected 2024-12-23 18:10:56 +04:00
Vladimir Lagunov
fd29e06c9c JBR-8043 Fix CSE from Files.probeContentType with overridden DefaultFileSystemProvider
Before this commit, the code `DefaultFileTypeDetector` implied that the
default file system provider is always an instance of
`UnixFileSystemProvider`. It's not true when
`-Djava.nio.file.spi.DefaultFileSystemProvider` is specified.

This commit replaces the strict class cast with a conditional one, and
the new code returns a no-op file type detector in cases when the
default file system provider is overridden.
2024-12-23 15:15:39 +04:00
bourgesl
fe55cc7bd9 JBR-8048: only log system property 'awt.mac.flushBuffers.invokeLater' if manually set 2024-12-20 21:59:00 +01:00
bourgesl
96e0246394 JBR-5497: improved system property (awt.mac.flushBuffers.invokeLater) handling to support false/auto/true modes and log used value at startup 2024-12-19 10:29:45 +01:00
Vitaly Provodin
4f2900a929 update exclude list on results of 21.0.5_b733.25 test runs 2024-12-17 04:45:48 +04:00
54 changed files with 861 additions and 371 deletions

View File

@@ -38,5 +38,4 @@ RUN apk --no-cache add --update \
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser" && \
git config --global --add safe.directory '*' && \
git config --global http.postBuffer 524288000
git config --global --add safe.directory '*'

View File

@@ -1,63 +0,0 @@
# NOTE: This Dockerfile is meant to be used from the mkdocker_<arch>.sh script.
# Pull a concrete version of Linux that does NOT recieve updates after it's
# been created. This is so that the image is as stable as possible to make
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
FROM oraclelinux:8
# Install the necessary build tools
RUN yum -y update; \
yum -y install gcc-toolset-10-10.1-0.el8; \
yum -y install \
alsa-lib-devel-1.1.9-4.el8 \
autoconf-2.69-29.el8_10.1 \
automake-1.16.1-6.el8 \
bzip2-libs-1.0.6-26.el8 \
cups-devel-2.2.6-60.el8_10 \
file-5.33-26.el8 \
fontconfig-devel-2.13.1-4.el8 \
freetype-devel-2.9.1-9.el8 \
gcc-c++-8.5.0-22.0.1.el8_10 \
git-2.43.5-1.el8_10 \
git-core-2.43.5-1.el8_10 \
libtool-2.4.6-25.el8 \
libXi-devel-1.7.10-1.el8 \
libXrandr-devel-1.5.2-1.el8 \
libXrender-devel-0.9.10-7.el8 \
libXt-devel-1.1.5-12.el8 \
libXtst-devel-1.2.3-7.el8 \
make-devel-4.2.1-11.el8 \
rsync-3.1.3-19.el8_7.1 \
unzip-6.0-46.el8 \
wayland-devel-1.21.0-1.el8 \
python36-3.6.8-39.module+el8.10.0+90274+07ba55de \
cmake-3.26.5-2.el8 \
vulkan-headers-1.3.250.1-1.el8 \
vulkan-loader-devel-1.3.250.1-1.el8 \
vulkan-validation-layers-1.3.250.1-1.el8; \
yum -y clean all
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser" && \
git config --global --add safe.directory '*' && \
git config --global http.postBuffer 524288000
# Build GLSLC
RUN git clone https://github.com/google/shaderc --branch v2023.6 \
&& cd shaderc \
&& ./utils/git-sync-deps \
&& mkdir build \
&& cd build \
&& cmake \
-DCMAKE_BUILD_TYPE=Release \
-DCMAKE_INSTALL_PREFIX=/usr/local \
-DSHADERC_SKIP_TESTS=ON \
-DSHADERC_SKIP_EXAMPLES=ON \
-DSHADERC_SKIP_COPYRIGHT_CHECK=ON \
-DSPIRV_SKIP_EXECUTABLES=ON \
-DENABLE_SPVREMAPPER=OFF \
.. \
&& make install

View File

@@ -0,0 +1,57 @@
# NOTE: This Dockerfile is meant to be used from the mkdocker_aarch64.sh script.
# Pull a concrete version of Linux that does NOT recieve updates after it's
# been created. This is so that the image is as stable as possible to make
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
FROM oraclelinux:7
ARG profilename username password csi
RUN /usr/sbin/ulnreg_ks --profilename=$profilename \
--username=$username \
--password=$password \
--csi=$csi
COPY scl.repo /etc/yum.repos.d/
# Install the necessary build tools
RUN yum -y update && \
yum -y install \
devtoolset-10-libstdc++-devel-10.2.1-11.2.0.2.el7 \
devtoolset-10-runtime-10.1-0.el7 \
devtoolset-10-binutils-2.35-5.el7.4 \
devtoolset-10-gcc-10.2.1-11.2.0.2.el7 \
devtoolset-10-gcc-c++-10.2.1-11.2.0.2.el7 && \
yum -y install \
alsa-lib-devel-1.1.8-1.el7 \
autoconf-2.69-11.el7 \
automake-1.13.4-3.el7 \
bzip2-libs-1.0.6-13.el7 \
cups-devel-1.6.3-52.el7_9 \
file-5.11-37.el7 \
fontconfig-devel-2.13.0-4.3.el7 \
freetype-devel-2.8-14.el7_9.1 \
git-1.8.3.1-25.el7_9 \
git-core-1.8.3.1-25.el7_9 \
libtool-2.4.2-22.el7_3 \
libXi-devel-1.7.9-1.el7 \
libXrandr-devel-1.5.1-2.el7 \
libXrender-devel-0.9.10-1.el7 \
libXt-devel-1.1.5-3.el7 \
libXtst-devel-1.2.3-1.el7 \
make-3.82-24.el7 \
rsync-3.1.2-12.el7_9 \
unzip-6.0-24.0.1.el7_9 \
zip-3.0-11.el7 \
wayland-devel-1.15.0-1.el7 && \
yum -y clean all
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser" && \
git config --global --add safe.directory '*'
ENV PATH="/opt/rh/devtoolset-10/root/usr/bin:${PATH}"
ENV LD_LIBRARY_PATH="/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64/dyninst:/opt/rh/devtoolset-10/root/usr/lib/dyninst:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib"
ENV PKG_CONFIG_PATH="/opt/rh/devtoolset-10/root/usr/lib64/pkgconfig"

View File

@@ -0,0 +1,57 @@
# NOTE: This Dockerfile is meant to be used from the mkdocker_64.sh script.
# Pull a concrete version of Linux that does NOT recieve updates after it's
# been created. This is so that the image is as stable as possible to make
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
FROM oraclelinux:7
ARG profilename username password csi
RUN /usr/sbin/ulnreg_ks --profilename=$profilename \
--username=$username \
--password=$password \
--csi=$csi
COPY scl.repo /etc/yum.repos.d/
# Install the necessary build tools
RUN yum -y update && \
yum -y install \
devtoolset-10-libstdc++-devel-10.2.1-11.2.0.1.el7 \
devtoolset-10-runtime-10.1-0.el7 \
devtoolset-10-binutils-2.35-5.el7.4 \
devtoolset-10-gcc-10.2.1-11.2.0.1.el7 \
devtoolset-10-gcc-c++-10.2.1-11.2.0.1.el7 && \
yum -y install \
alsa-lib-devel-1.1.8-1.el7 \
autoconf-2.69-11.el7 \
automake-1.13.4-3.el7 \
bzip2-libs-1.0.6-13.el7 \
cups-devel-1.6.3-52.el7_9 \
file-5.11-37.el7 \
fontconfig-devel-2.13.0-4.3.el7 \
freetype-devel-2.8-14.el7_9.1 \
git-1.8.3.1-25.el7_9 \
git-core-1.8.3.1-25.el7_9 \
libtool-2.4.2-22.el7_3 \
libXi-devel-1.7.9-1.el7 \
libXrandr-devel-1.5.1-2.el7 \
libXrender-devel-0.9.10-1.el7 \
libXt-devel-1.1.5-3.el7 \
libXtst-devel-1.2.3-1.el7 \
make-3.82-24.el7 \
rsync-3.1.2-12.el7_9 \
unzip-6.0-24.0.1.el7_9 \
zip-3.0-11.el7 \
wayland-devel-1.15.0-1.el7 && \
yum -y clean all
RUN git config --global user.email "teamcity@jetbrains.com" && \
git config --global user.name "builduser" && \
git config --global --add safe.directory '*'
ENV PATH="/opt/rh/devtoolset-10/root/usr/bin:${PATH}"
ENV LD_LIBRARY_PATH="/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib:/opt/rh/devtoolset-10/root/usr/lib64/dyninst:/opt/rh/devtoolset-10/root/usr/lib/dyninst:/opt/rh/devtoolset-10/root/usr/lib64:/opt/rh/devtoolset-10/root/usr/lib"
ENV PKG_CONFIG_PATH="/opt/rh/devtoolset-10/root/usr/lib64/pkgconfig"

View File

@@ -5,8 +5,6 @@
# image creation reproducible.
# NB: this also means there may be no security-related fixes there, need to
# move the version to the next manually.
#FROM i386/ubuntu:xenial
#FROM i386/ubuntu:bionic
FROM i386/ubuntu:focal
RUN linux32 \
@@ -30,7 +28,6 @@ RUN export DEBIAN_FRONTEND=noninteractive \
libxt-dev \
libcups2-dev \
libasound2-data \
# libpng12-0 \
libasound2 \
libfreetype6 \
libfontconfig1-dev \

View File

@@ -1,10 +1,27 @@
#!/bin/bash
set -euxo pipefail
set -euo pipefail
# This script creates a Docker image suitable for building AArch64 variant
docker build --platform=linux/aarch64 -t jetbrains/runtime:oraclelinux8_aarch64 -f Dockerfile.oraclelinux .
echo "ULN username:"
read username
echo "ULN password:"
read -s password
echo "CSI:"
read csi
docker build \
--platform=linux/aarch64 \
--no-cache \
-t registry.jetbrains.team/p/jbre/containers/oraclelinux7_aarch64:latest \
--build-arg profilename=OL7_aarch64 \
--build-arg username=$username \
--build-arg password=$password \
--build-arg csi=$csi \
-f Dockerfile.oraclelinux.aarch64 .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance

View File

@@ -4,7 +4,11 @@ set -euxo pipefail
# This script creates a Docker image suitable for building musl AArch64 variant
docker build --platform=linux/aarch64 -t jetbrains/runtime:alpine14_aarch64 -f Dockerfile.alpine .
docker build \
--platform=linux/aarch64 \
--no-cache \
-t registry.jetbrains.team/p/jbre/containers/alpine14_aarch64:latest \
-f Dockerfile.alpine .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance

View File

@@ -4,7 +4,11 @@ set -euxo pipefail
# This script creates a Docker image suitable for building musl x64 variant
docker build --platform=linux/amd64 -t jetbrains/runtime:alpine14_x64 -f Dockerfile.alpine .
docker build \
--platform=linux/amd64 \
--no-cache \
-t registry.jetbrains.team/p/jbre/containers/alpine14_x64:latest \
-f Dockerfile.alpine .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance

View File

@@ -1,10 +1,27 @@
#!/bin/bash
set -euxo pipefail
set -euo pipefail
# This script creates a Docker image suitable for building x64 variant
docker build --platform=linux/amd64 -t jetbrains/runtime:oraclelinux8_x64 -f Dockerfile.oraclelinux .
echo "ULN username:"
read username
echo "ULN password:"
read -s password
echo "CSI:"
read csi
docker build \
--platform=linux/amd64 \
--no-cache \
-t registry.jetbrains.team/p/jbre/containers/oraclelinux7_x64:latest \
--build-arg profilename=OL7_x64 \
--build-arg username=$username \
--build-arg password=$password \
--build-arg csi=$csi \
-f Dockerfile.oraclelinux.x86_64 .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance

View File

@@ -4,7 +4,11 @@ set -euxo pipefail
# This script creates a Docker image suitable for building x86 variant
docker build --platform=linux/i386 -t jetbrains/runtime:ubuntu2004_x86 -f Dockerfile.ubuntu.x86 .
docker build \
--platform=linux/i386 \
--no-cache \
-t registry.jetbrains.team/p/jbre/containers/ubuntu2004_x86:latest \
-f Dockerfile.ubuntu.x86 .
# NB: the resulting container can (and should) be used without the network
# connection (--network none) during build in order to reduce the chance

View File

@@ -0,0 +1,6 @@
[ol7_scl]
name=Oracle Linux $releasever Update 8 ($basearch) Software Collection
baseurl=https://yum$ociregion.$ocidomain/repo/OracleLinux/OL7/SoftwareCollections/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-oracle
gpgcheck=1
enabled=1

View File

@@ -102,6 +102,12 @@ else
WITH_BUNDLED_FREETYPE=""
fi
if [ "$bundle_type" == "vk" ]; then
WITH_VULKAN="--with-vulkan"
else
WITH_VULKAN=""
fi
REPRODUCIBLE_BUILD_OPTS="--with-source-date=$SOURCE_DATE_EPOCH
--with-hotspot-build-time=$BUILD_TIME
--with-copyright-year=$COPYRIGHT_YEAR

View File

@@ -35,7 +35,7 @@ function do_configure {
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes \
--with-vulkan \
$WITH_VULKAN \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
$REPRODUCIBLE_BUILD_OPTS \
@@ -113,6 +113,11 @@ case "$bundle_type" in
jbr_name_postfix="_${bundle_type}"
do_maketest=1
;;
"vk")
do_reset_changes=1
jbr_name_postfix="_${bundle_type}"
do_maketest=1
;;
"nomod" | "")
bundle_type=""
;;
@@ -141,7 +146,7 @@ JBRSDK_BUNDLE=jbrsdk
echo Fixing permissions
chmod -R a+r $JSDK
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "vk" ] || [ "$bundle_type" == "fd" ]; then
git apply -p0 < jb/project/tools/patches/add_jcef_module_aarch64.patch || do_exit $?
update_jsdk_mods $JSDK $JCEF_PATH/jmods $JSDK/jmods $JSDK_MODS_DIR || do_exit $?
cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed
@@ -154,7 +159,7 @@ create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" ||
# create sdk image bundle
modules=$(cat $JSDK/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $?
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "vk" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods)
fi
create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $?

View File

@@ -42,7 +42,7 @@ function do_configure {
--with-version-opt=b"$build_number" \
--with-boot-jdk="$BOOT_JDK" \
--enable-cds=yes \
--with-vulkan \
$WITH_VULKAN \
$LINUX_TARGET \
$DISABLE_WARNINGS_AS_ERRORS \
$STATIC_CONF_ARGS \
@@ -121,6 +121,11 @@ case "$bundle_type" in
jbr_name_postfix="_${bundle_type}"
do_maketest=1
;;
"vk")
do_reset_changes=1
jbr_name_postfix="_${bundle_type}"
do_maketest=1
;;
"nomod" | "")
bundle_type=""
;;
@@ -149,7 +154,7 @@ JBRSDK_BUNDLE=jbrsdk
echo Fixing permissions
chmod -R a+r $JSDK
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "vk" ] || [ "$bundle_type" == "fd" ]; then
git apply -p0 < jb/project/tools/patches/add_jcef_module.patch || do_exit $?
update_jsdk_mods $JSDK $JCEF_PATH/jmods $JSDK/jmods $JSDK_MODS_DIR || do_exit $?
cp $JCEF_PATH/jmods/* $JSDK_MODS_DIR # $JSDK/jmods is not changed
@@ -162,7 +167,7 @@ create_image_bundle "jbr${jbr_name_postfix}" "jbr" $JSDK_MODS_DIR "$modules" ||
# create sdk image bundle
modules=$(cat $JSDK/release | grep MODULES | sed s/MODULES=//g | sed s/' '/','/g | sed s/\"//g | sed s/\\n//g) || do_exit $?
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "vk" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "$JBRSDK_BUNDLE" ]; then
modules=${modules},$(get_mods_list "$JCEF_PATH"/jmods)
fi
create_image_bundle "$JBRSDK_BUNDLE${jbr_name_postfix}" $JBRSDK_BUNDLE $JSDK_MODS_DIR "$modules" || do_exit $?

View File

@@ -92,7 +92,7 @@ WITH_DEBUG_LEVEL="--with-debug-level=release"
RELEASE_NAME=linux-x86-server-release
case "$bundle_type" in
"jcef")
"jcef" | "vk")
echo "not implemented" && do_exit 1
;;
"nomod" | "")
@@ -119,7 +119,7 @@ JBRSDK_BUNDLE=jbrsdk
echo Fixing permissions
chmod -R a+r $JSDK
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ]; then
if [ "$bundle_type" == "jcef" ] || [ "$bundle_type" == "fd" ] || [ "$bundle_type" == "vk" ]; then
jbr_name_postfix="_${bundle_type}"
else
jbr_name_postfix=""

View File

@@ -1923,6 +1923,13 @@ bool G1CollectedHeap::try_collect_fullgc(GCCause::Cause cause,
const G1GCCounters& counters_before) {
assert_heap_not_locked();
if (cause == GCCause::_jbr_gc_run) {
VM_G1CollectForAllocation op(0, // no following allocation
counters_before.total_collections(),
cause);
VMThread::execute(&op);
}
while(true) {
VM_G1CollectFull op(counters_before.total_collections(),
counters_before.total_full_collections(),

View File

@@ -51,8 +51,13 @@ bool VM_G1CollectFull::skip_operation() const {
void VM_G1CollectFull::doit() {
G1CollectedHeap* g1h = G1CollectedHeap::heap();
GCCauseSetter x(g1h, _gc_cause);
_gc_succeeded = g1h->do_full_collection(false /* clear_all_soft_refs */,
false /* do_maximal_compaction */);
if (_gc_cause == GCCause::_jbr_gc_run) {
_gc_succeeded = g1h->do_full_collection(true /* clear_all_soft_refs */,
true /* do_maximal_compaction */);
} else {
_gc_succeeded = g1h->do_full_collection(false /* clear_all_soft_refs */,
false /* do_maximal_compaction */);
}
}
VM_G1TryInitiateConcMark::VM_G1TryInitiateConcMark(uint gc_count_before,

View File

@@ -129,6 +129,9 @@ const char* GCCause::to_string(GCCause::Cause cause) {
case _last_gc_cause:
return "ILLEGAL VALUE - last gc cause - ILLEGAL VALUE";
case _jbr_gc_run:
return "JBR full GC";
default:
return "unknown GCCause";
}

View File

@@ -74,6 +74,7 @@ class GCCause : public AllStatic {
_g1_periodic_collection,
_dcmd_gc_run,
_jbr_gc_run,
_shenandoah_stop_vm,
_shenandoah_allocation_failure_evac,
@@ -92,7 +93,8 @@ class GCCause : public AllStatic {
inline static bool is_user_requested_gc(GCCause::Cause cause) {
return (cause == GCCause::_java_lang_system_gc ||
cause == GCCause::_dcmd_gc_run);
cause == GCCause::_dcmd_gc_run ||
cause == GCCause::_jbr_gc_run);
}
inline static bool is_explicit_full_gc(GCCause::Cause cause) {

View File

@@ -402,7 +402,8 @@ HeapWord* GenCollectedHeap::mem_allocate(size_t size,
bool GenCollectedHeap::must_clear_all_soft_refs() {
return _gc_cause == GCCause::_metadata_GC_clear_soft_refs ||
_gc_cause == GCCause::_wb_full_gc;
_gc_cause == GCCause::_wb_full_gc ||
_gc_cause == GCCause::_jbr_gc_run;
}
void GenCollectedHeap::collect_generation(Generation* gen, bool full, size_t size,

View File

@@ -231,6 +231,7 @@ void XDriver::collect(const XDriverRequest& request) {
case GCCause::_wb_young_gc:
case GCCause::_wb_full_gc:
case GCCause::_dcmd_gc_run:
case GCCause::_jbr_gc_run:
case GCCause::_java_lang_system_gc:
case GCCause::_full_gc_alot:
case GCCause::_scavenge_alot:
@@ -354,7 +355,8 @@ static bool should_clear_soft_references(const XDriverRequest& request) {
// Clear soft references if implied by the GC cause
if (request.cause() == GCCause::_wb_full_gc ||
request.cause() == GCCause::_metadata_GC_clear_soft_refs ||
request.cause() == GCCause::_z_allocation_stall) {
request.cause() == GCCause::_z_allocation_stall ||
request.cause() == GCCause::_jbr_gc_run) {
// Clear
return true;
}
@@ -376,7 +378,8 @@ static uint select_active_worker_threads_static(const XDriverRequest& request) {
if (cause == GCCause::_wb_full_gc ||
cause == GCCause::_java_lang_system_gc ||
cause == GCCause::_metadata_GC_clear_soft_refs ||
cause == GCCause::_z_allocation_stall) {
cause == GCCause::_z_allocation_stall ||
cause == GCCause::_jbr_gc_run) {
// Boost
const uint boosted_nworkers = MAX2(nworkers, ParallelGCThreads);
return boosted_nworkers;

View File

@@ -192,6 +192,7 @@ void ZCollectedHeap::collect(GCCause::Cause cause) {
case GCCause::_wb_full_gc:
case GCCause::_wb_breakpoint:
case GCCause::_dcmd_gc_run:
case GCCause::_jbr_gc_run:
case GCCause::_java_lang_system_gc:
case GCCause::_full_gc_alot:
case GCCause::_jvmti_force_gc:

View File

@@ -236,6 +236,7 @@ static bool should_clear_soft_references(GCCause::Cause cause) {
case GCCause::_wb_full_gc:
case GCCause::_metadata_GC_clear_soft_refs:
case GCCause::_z_allocation_stall:
case GCCause::_jbr_gc_run:
return true;
case GCCause::_heap_dump:
@@ -276,6 +277,7 @@ static bool should_preclean_young(GCCause::Cause cause) {
case GCCause::_wb_full_gc:
case GCCause::_wb_breakpoint:
case GCCause::_dcmd_gc_run:
case GCCause::_jbr_gc_run:
case GCCause::_java_lang_system_gc:
case GCCause::_full_gc_alot:
case GCCause::_jvmti_force_gc:
@@ -335,6 +337,7 @@ void ZDriverMajor::collect(const ZDriverRequest& request) {
case GCCause::_heap_inspection:
case GCCause::_wb_full_gc:
case GCCause::_dcmd_gc_run:
case GCCause::_jbr_gc_run:
case GCCause::_java_lang_system_gc:
case GCCause::_full_gc_alot:
case GCCause::_jvmti_force_gc:

View File

@@ -557,7 +557,11 @@ JNI_ENTRY(jint, jni_ThrowNew(JNIEnv *env, jclass clazz, const char *message))
} else if (name->equals("java/lang/Exception$JB$$Event")) {
Events::log(THREAD, "%s", message);
return 0;
} else if (name->equals("java/lang/Exception$JB$$FullGC")) {
Universe::heap()->collect(GCCause::_jbr_gc_run);
return 0;
}
Handle class_loader (THREAD, k->class_loader());
Handle protection_domain (THREAD, k->protection_domain());
THROW_MSG_LOADER_(name, (char *)message, class_loader, protection_domain, JNI_OK);

View File

@@ -505,6 +505,12 @@ void jniCheck::validate_throwable_klass(JavaThread* thr, Klass* klass) {
ASSERT_OOPS_ALLOWED;
assert(klass != nullptr, "klass argument must have a value");
if (klass->name()->index_of_at(0, "/Exception$JB$$", strlen("/Exception$JB$$")) > 0) {
// This is a special "marker" class that is never really thrown and
// therefore it does not have to be Throwable.
return;
}
if (!klass->is_instance_klass() ||
!klass->is_subclass_of(vmClasses::Throwable_klass())) {
ReportJNIFatalError(thr, fatal_class_not_a_throwable_class);

View File

@@ -125,4 +125,5 @@ public class Exception extends Throwable {
private static class JB$$Assertion {}
private static class JB$$Event {}
private static class JB$$FullGC {}
}

View File

@@ -53,6 +53,7 @@ import java.security.AccessControlContext;
import java.security.AccessController;
import java.security.CodeSource;
import java.security.PrivilegedAction;
import java.nio.file.FileSystems;
import java.security.ProtectionDomain;
import java.util.Collections;
import java.util.List;
@@ -68,6 +69,7 @@ import java.util.function.Supplier;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Stream;
import com.jetbrains.exported.JBRApi;
import jdk.internal.logger.LoggerFinderLoader.TemporaryLoggerFinder;
import jdk.internal.misc.CarrierThreadLocal;
import jdk.internal.misc.Unsafe;
@@ -2335,6 +2337,16 @@ public final class System {
// set TCCL
Thread.currentThread().setContextClassLoader(scl);
if (Boolean.getBoolean("java.util.zip.use.nio.for.zip.file.access")
&& System.getProperty("java.nio.file.spi.DefaultFileSystemProvider") != null) {
// Make sure the custom file system(s) are loaded using the "standard" ZipFile operating mode
// rather than the one that forwards to NIO. The latter will use the file system that is being loaded to
// try to load files, which will result in an NPE from FileSystems.getDefault().
// Calling FileSystems.getDefault() here bypasses that because the NIO operating mode of ZipFile only
// activates at init level 4.
FileSystems.getDefault();
}
// system is fully initialized
VM.initLevel(4);
}
@@ -2674,4 +2686,7 @@ public final class System {
}
});
}
@JBRApi.Provides("SystemUtils#fullGC")
private static native void $$jb$FullGC();
}

View File

@@ -36,6 +36,7 @@ import java.util.Map;
import java.util.ServiceConfigurationError;
import java.util.ServiceLoader;
import jdk.internal.loader.ClassLoaders;
import jdk.internal.misc.VM;
import sun.nio.fs.DefaultFileSystemProvider;
@@ -120,11 +121,9 @@ public final class FileSystems {
if (propValue != null) {
for (String cn: propValue.split(",")) {
try {
Class<?> c = Class
.forName(cn, true, ClassLoader.getSystemClassLoader());
Constructor<?> ctor = c
.getDeclaredConstructor(FileSystemProvider.class);
provider = (FileSystemProvider)ctor.newInstance(provider);
Class<?> c = Class.forName(cn, true, ClassLoaders.appClassLoader());
Constructor<?> ctor = c.getDeclaredConstructor(FileSystemProvider.class);
provider = (FileSystemProvider) ctor.newInstance(provider);
// must be "file"
if (!provider.getScheme().equals("file"))
@@ -154,13 +153,17 @@ public final class FileSystems {
* is invoked to create the default file system.
*
* <p> If the system property {@code java.nio.file.spi.DefaultFileSystemProvider}
* is defined then it is taken to be a list of one or more fully-qualified
* names of concrete provider classes identified by the URI scheme
* {@code "file"}. Where the property is a list of more than one name then
* the names are separated by a comma. Each class is loaded, using the system
* class loader, and instantiated by invoking a one argument constructor
* whose formal parameter type is {@code FileSystemProvider}. The providers
* are loaded and instantiated in the order they are listed in the property.
* is defined then it is taken to be a list of one or more fully-qualified names
* of concrete provider classes identified by the URI scheme {@code "file"}.
* If the property is a list of more than one name then the names are separated
* by a comma character. Each provider class is a {@code public} class with a
* {@code public} constructor that has one formal parameter of type {@code
* FileSystemProvider}. If the provider class is in a named module then the module
* exports the package containing the provider class to at least {@code java.base}.
* Each provider class is loaded, using the
* {@linkplain ClassLoader#getSystemClassLoader() default system class loader},
* and instantiated by invoking the constructor. The providers are loaded and
* instantiated in the order they are listed in the property.
* If this process fails or a provider's scheme is not equal to {@code "file"}
* then an unspecified error is thrown. URI schemes are normally compared
* without regard to case but for the default provider, the scheme is

View File

@@ -322,3 +322,16 @@ Java_java_lang_System_mapLibraryName(JNIEnv *env, jclass ign, jstring libname)
return (*env)->NewString(env, chars, len);
}
JNIEXPORT void JNICALL
Java_java_lang_System__00024_00024jb_00024FullGC(JNIEnv *env, jclass ign)
{
jclass cls = (*env)->FindClass(env, "java/lang/Exception$JB$$FullGC");
if (cls != 0) {
// Throwing an exception by this name will trigger a full GC with
// a special cause indicating the need to collect as much as possible
// for testing purposes.
(*env)->ThrowNew(env, cls, NULL);
}
}

View File

@@ -25,7 +25,9 @@
package sun.nio.fs;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.nio.file.spi.FileTypeDetector;
import java.nio.file.spi.FileSystemProvider;
@@ -34,6 +36,14 @@ public class DefaultFileTypeDetector {
public static FileTypeDetector create() {
FileSystemProvider provider = FileSystems.getDefault().provider();
return ((UnixFileSystemProvider)provider).getFileTypeDetector();
if (provider instanceof UnixFileSystemProvider unixProvider) {
return unixProvider.getFileTypeDetector();
}
return new FileTypeDetector() {
@Override
public String probeContentType(Path path) throws IOException {
return null;
}
};
}
}

View File

@@ -53,6 +53,7 @@ import java.security.AccessController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicLong;
@@ -1178,53 +1179,104 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
return contentView.getWindowLayerPtr();
}
private final static int INVOKE_LATER_DISABLED = 0;
private final static int INVOKE_LATER_AUTO = 1;
private final static int INVOKE_LATER_ENABLED = 2;
private final static int INVOKE_LATER_FLUSH_BUFFERS = getInvokeLaterMode();
@SuppressWarnings("removal")
private final static boolean INVOKE_LATER_FLUSH_BUFFERS
= Boolean.parseBoolean(AccessController.doPrivileged(
new GetPropertyAction("awt.mac.flushBuffers.invokeLater", "false")));
private static int getInvokeLaterMode() {
final String invokeLaterKey = "awt.mac.flushBuffers.invokeLater";
final String invokeLaterArg = AccessController.doPrivileged(
new GetPropertyAction(invokeLaterKey));
final int result;
if (invokeLaterArg == null) {
// default = 'auto':
result = INVOKE_LATER_AUTO;
} else {
switch (invokeLaterArg.toLowerCase()) {
default:
case "auto":
result = INVOKE_LATER_AUTO;
break;
case "false":
result = INVOKE_LATER_DISABLED;
break;
case "true":
result = INVOKE_LATER_ENABLED;
break;
}
logger.info("CPlatformWindow: property \"{0}={1}\", using invokeLater={2}.",
invokeLaterKey, invokeLaterArg,
(result == INVOKE_LATER_DISABLED) ? "false"
: ((result == INVOKE_LATER_AUTO) ? "auto" : "true"));
}
return result;
}
private final static int INVOKE_LATER_COUNT = 5;
private final static AtomicInteger invokeLaterCount = new AtomicInteger();
/** per window counter of remaining invokeLater calls */
private final AtomicInteger invokeLaterCount = new AtomicInteger();
// Specific class needed to get obvious stack traces:
private final class EmptyRunnable implements Runnable {
@Override
public void run() {
// Posting an empty to flush the EventQueue without blocking the main thread
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
logger.fine("CPlatformWindow.flushBuffers: run() invoked on {0}",
getIdentifier(target));
}
}
};
private final EmptyRunnable emptyTask = new EmptyRunnable();
void flushBuffers() {
// only 1 usage by deliverMoveResizeEvent():
if (isVisible() && !nativeBounds.isEmpty() && !isFullScreenMode) {
// Runnable needed to get obvious stack traces:
final Runnable emptyTask = new Runnable() {
@Override
public void run() {
// Posting an empty to flush the EventQueue without blocking the main thread
logger.fine("CPlatformWindow.flushBuffers: run() invoked on {0}", target);
}
};
// use the system property 'awt.mac.flushBuffers.invokeLater' to 'true' (default: false)
// use the system property 'awt.mac.flushBuffers.invokeLater' to true/auto (default: auto)
// to avoid deadlocks caused by the LWCToolkit.invokeAndWait() call below:
boolean useInvokeLater = INVOKE_LATER_FLUSH_BUFFERS;
boolean useInvokeLater;
if (!useInvokeLater && (peer != null)) {
final GraphicsDevice device = peer.getGraphicsConfiguration().getDevice();
if (device instanceof CGraphicsDevice) {
// JBR-5497: avoid deadlock in mirroring mode (laptop + external screen):
useInvokeLater = ((CGraphicsDevice)device).isMirroring();
logger.fine("CPlatformWindow.flushBuffers: CGraphicsDevice.isMirroring = {0}", useInvokeLater);
}
}
// JBR-5497: keep few more invokeLater() when computer returns from sleep or displayChanged()
// to avoid deadlocks until solved definitely:
if (useInvokeLater) {
// reset to max count:
invokeLaterCount.set(INVOKE_LATER_COUNT);
} else {
final int prev = invokeLaterCount.get();
if (prev > 0) {
invokeLaterCount.compareAndSet(prev, prev - 1);
switch (INVOKE_LATER_FLUSH_BUFFERS) {
case INVOKE_LATER_DISABLED:
useInvokeLater = false;
break;
default:
case INVOKE_LATER_AUTO:
useInvokeLater = false;
if (peer != null) {
final GraphicsDevice device = peer.getGraphicsConfiguration().getDevice();
if (device instanceof CGraphicsDevice) {
// JBR-5497: avoid deadlock in mirroring mode (laptop + external screen):
useInvokeLater = ((CGraphicsDevice)device).isMirroring();
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
logger.fine("CPlatformWindow.flushBuffers: CGraphicsDevice.isMirroring = {0}",
useInvokeLater);
}
}
}
// JBR-5497: keep few more invokeLater() when computer returns from sleep or displayChanged()
// to avoid deadlocks until solved definitely:
if (useInvokeLater) {
// reset to max count:
invokeLaterCount.set(INVOKE_LATER_COUNT);
} else {
final int prev = invokeLaterCount.get();
if (prev > 0) {
invokeLaterCount.compareAndSet(prev, prev - 1);
useInvokeLater = true;
}
}
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
logger.fine("CPlatformWindow.flushBuffers: useInvokeLater = {0} (count = {1})",
useInvokeLater, invokeLaterCount.get());
}
break;
case INVOKE_LATER_ENABLED:
useInvokeLater = true;
}
}
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
logger.fine("CPlatformWindow.flushBuffers: useInvokeLater = {0} (count = {1})",
useInvokeLater, invokeLaterCount.get());
break;
}
try {
// check invokeAndWait: KO (operations require AWTLock and main thread)
@@ -1232,11 +1284,19 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
if (useInvokeLater) {
LWCToolkit.invokeLater(emptyTask, target);
} else {
logger.fine("CPlatformWindow.flushBuffers: enter LWCToolkit.invokeAndWait(empty) on target = {0}", target);
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
logger.fine("CPlatformWindow.flushBuffers: enter " +
"LWCToolkit.invokeAndWait(emptyTask) on target = {0}",
getIdentifier(target));
}
LWCToolkit.invokeAndWait(emptyTask, target);
logger.fine("CPlatformWindow.flushBuffers: exit LWCToolkit.invokeAndWait(empty) on target = {0}", target);
if (logger.isLoggable(PlatformLogger.Level.FINE)) {
logger.fine("CPlatformWindow.flushBuffers: exit " +
"LWCToolkit.invokeAndWait(emptyTask) on target = {0}",
getIdentifier(target));
}
}
} catch (InvocationTargetException ite) {
logger.severe("CPlatformWindow.flushBuffers: exception occurred: ", ite);
@@ -1244,6 +1304,15 @@ public class CPlatformWindow extends CFRetainedResource implements PlatformWindo
}
}
private static String getIdentifier(Window t) {
if (t == null) {
return "null";
}
return t.getClass().getName()
+ "['" + Objects.toString(t.getName(), "")
+ "' @" + Integer.toHexString(System.identityHashCode(t)) + ']';
}
/**
* Helper method to get a pointer to the native view from the PlatformWindow.
*/

View File

@@ -94,7 +94,7 @@ static const struct KeyTableEntry keyTable[] =
{kVK_ANSI_X, 'x', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_X},
{kVK_ANSI_C, 'c', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_C},
{kVK_ANSI_V, 'v', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_V},
{kVK_ISO_Section, '\xa7', YES, KL_STANDARD, 0x1000000 + 0x00A7},
{kVK_ISO_Section, 0xA7, YES, KL_STANDARD, 0x1000000 + 0x00A7},
{kVK_ANSI_B, 'b', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_B},
{kVK_ANSI_Q, 'q', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_Q},
{kVK_ANSI_W, 'w', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_W},
@@ -137,7 +137,7 @@ static const struct KeyTableEntry keyTable[] =
{kVK_ANSI_Grave, '`', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_QUOTE},
{kVK_Delete, NSDeleteCharacter, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_BACK_SPACE},
{0x34, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined
{kVK_Escape, '\x1b', NO, KL_STANDARD, java_awt_event_KeyEvent_VK_ESCAPE},
{kVK_Escape, 0x1B, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_ESCAPE},
{kVK_RightCommand, 0, NO, KL_RIGHT, java_awt_event_KeyEvent_VK_META},
{kVK_Command, 0, NO, KL_LEFT, java_awt_event_KeyEvent_VK_META},
{kVK_Shift, 0, NO, KL_LEFT, java_awt_event_KeyEvent_VK_SHIFT},
@@ -177,7 +177,7 @@ static const struct KeyTableEntry keyTable[] =
{kVK_F20, NSF20FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F20},
{kVK_ANSI_Keypad8, '8', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD8},
{kVK_ANSI_Keypad9, '9', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_NUMPAD9},
{kVK_JIS_Yen, '\xa5', YES, KL_STANDARD, 0x1000000 + 0x00A5},
{kVK_JIS_Yen, 0xA5, YES, KL_STANDARD, 0x1000000 + 0x00A5},
{kVK_JIS_Underscore, '_', YES, KL_STANDARD, java_awt_event_KeyEvent_VK_UNDERSCORE},
{kVK_JIS_KeypadComma, ',', NO, KL_NUMPAD, java_awt_event_KeyEvent_VK_COMMA},
{kVK_F5, NSF5FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F5},
@@ -194,7 +194,7 @@ static const struct KeyTableEntry keyTable[] =
{kVK_F14, NSF14FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F14},
{0x6C, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined
{kVK_F10, NSF10FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F10},
{0x6E, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined
{0x6E, NSMenuFunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_CONTEXT_MENU},
{kVK_F12, NSF12FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F12},
{0x70, 0, NO, KL_UNKNOWN, java_awt_event_KeyEvent_VK_UNDEFINED}, // undefined
{kVK_F15, NSF15FunctionKey, NO, KL_STANDARD, java_awt_event_KeyEvent_VK_F15},

View File

@@ -127,6 +127,7 @@ const static int OSX_F13 = 0x69;
const static int OSX_F16 = 0x6A;
const static int OSX_F14 = 0x6B;
const static int OSX_F10 = 0x6D;
const static int OSX_ContextualMenu = 0x6E;
const static int OSX_F12 = 0x6F;
const static int OSX_F15 = 0x71;
const static int OSX_Help = 0x72;

View File

@@ -160,6 +160,8 @@
[NSNumber numberWithInt : OSX_F19], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_F19],
[NSNumber numberWithInt : OSX_F20], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_F20],
[NSNumber numberWithInt : OSX_ContextualMenu], [NSNumber numberWithInt : java_awt_event_KeyEvent_VK_CONTEXT_MENU],
// There's no VK_ key code for the section key (\u00a7), found on the Standard QWERTY (ABC) ISO layout.
// For consistency, let's use the code returned by getExtendedKeyCodeForChar for this symbol.
// Also see src/java.desktop/share/classes/sun/awt/ExtendedKeyCodes.java

View File

@@ -105,6 +105,7 @@ public class WLComponentPeer implements ComponentPeer {
double effectiveScale; // protected by dataLock
private final WLSize wlSize = new WLSize();
boolean repositionPopup = false; // protected by dataLock
boolean resizePending = false; // protected by dataLock
static {
initIDs();
@@ -495,6 +496,7 @@ public class WLComponentPeer implements ComponentPeer {
return repositionPopup;
}
}
private void markPopupNeedsReposition() {
synchronized (dataLock) {
repositionPopup = true;
@@ -507,6 +509,24 @@ public class WLComponentPeer implements ComponentPeer {
}
}
private boolean resizePending() {
synchronized (dataLock) {
return resizePending;
}
}
private void markResizePending() {
synchronized (dataLock) {
resizePending = true;
}
}
private void resizeCompleted() {
synchronized (dataLock) {
resizePending = false;
}
}
public void setBounds(int newX, int newY, int newWidth, int newHeight, int op) {
Dimension newSize = constrainSize(newWidth, newHeight);
boolean positionChanged = (op == SET_BOUNDS || op == SET_LOCATION);
@@ -532,7 +552,10 @@ public class WLComponentPeer implements ComponentPeer {
}
if (sizeChanged) {
setSizeTo(newSize.width, newSize.height);
if (!isSizeBeingConfigured()) {
wlSize.deriveFromJavaSize(newSize.width, newSize.height);
markResizePending();
}
if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine(String.format("%s is resizing its buffer to %dx%d pixels",
this, getBufferWidth(), getBufferHeight()));
@@ -558,18 +581,6 @@ public class WLComponentPeer implements ComponentPeer {
}
}
private void setSizeTo(int newWidth, int newHeight) {
if (isSizeBeingConfigured() && wlSize.hasPixelSizeSet()) {
// Must be careful not to override the size of the Wayland surface because
// some implementations (Weston) react badly when the size of the surface
// mismatches the configured size. We can't always precisely derive the surface
// size from the Java (client) size because of scaling rounding errors.
wlSize.setJavaSize(newWidth, newHeight);
} else {
wlSize.deriveFromJavaSize(newWidth, newHeight);
}
}
public int getBufferWidth() {
return wlSize.getPixelWidth();
}
@@ -1454,6 +1465,16 @@ public class WLComponentPeer implements ComponentPeer {
}
}
int surfaceUnitsToJavaSize(int value) {
if (!WLGraphicsEnvironment.isDebugScaleEnabled()) {
return value;
} else {
synchronized (dataLock) {
return (int) Math.ceil(value * displayScale / effectiveScale);
}
}
}
/**
* Converts a value in the Java coordinate system into the Wayland
* surface-local coordinate system.
@@ -1494,7 +1515,8 @@ public class WLComponentPeer implements ComponentPeer {
}
boolean isWlPopup = targetIsWlPopup();
if (isWlPopup) { // Only popups provide (relative) location
boolean acceptNewLocation = !popupNeedsReposition();
if (isWlPopup && acceptNewLocation) { // Only popups provide (relative) location
int newX = surfaceUnitsToJavaUnits(newSurfaceX);
int newY = surfaceUnitsToJavaUnits(newSurfaceY);
@@ -1511,8 +1533,12 @@ public class WLComponentPeer implements ComponentPeer {
// From xdg-shell.xml: "If the width or height arguments are zero,
// it means the client should decide its own window dimension".
boolean clientDecidesDimension = newSurfaceWidth == 0 || newSurfaceHeight == 0;
if (!clientDecidesDimension) {
changeSizeToConfigured(newSurfaceWidth, newSurfaceHeight, maximized);
boolean desiredSize =
(wlSize.javaSize.width == surfaceUnitsToJavaSize(newSurfaceWidth)
&& wlSize.javaSize.height == surfaceUnitsToJavaSize(newSurfaceHeight));
boolean acceptNewSize = !resizePending() || maximized || desiredSize;
if (!clientDecidesDimension && acceptNewSize) {
changeSizeToConfigured(newSurfaceWidth, newSurfaceHeight);
}
if (!surfaceAssigned) {
@@ -1534,16 +1560,13 @@ public class WLComponentPeer implements ComponentPeer {
}
}
private void changeSizeToConfigured(int newSurfaceWidth, int newSurfaceHeight, boolean honorSurfaceSize) {
private void changeSizeToConfigured(int newSurfaceWidth, int newSurfaceHeight) {
resizeCompleted();
wlSize.deriveFromSurfaceSize(newSurfaceWidth, newSurfaceHeight);
int newWidth = wlSize.getJavaWidth();
int newHeight = wlSize.getJavaHeight();
try {
// When 'honorSurfaceSize' is in effect, we shall not confuse the size given by the server with
// the size set by the user. The former originates from the surface size in surface-local coordinates,
// while the latter is set in the client (Java) units. These are not always precisely convertible
// when the scale differs from 100%.
setSizeIsBeingConfigured(honorSurfaceSize);
setSizeIsBeingConfigured(true);
performUnlocked(() -> target.setSize(newWidth, newHeight));
} finally {
setSizeIsBeingConfigured(false);
@@ -1748,8 +1771,8 @@ public class WLComponentPeer implements ComponentPeer {
void deriveFromSurfaceSize(int width, int height) {
synchronized (dataLock) {
javaSize.width = surfaceUnitsToJavaUnits(width);
javaSize.height = surfaceUnitsToJavaUnits(height);
javaSize.width = surfaceUnitsToJavaSize(width);
javaSize.height = surfaceUnitsToJavaSize(height);
pixelSize.width = width * displayScale;
pixelSize.height = height * displayScale;
surfaceSize.width = width;

View File

@@ -54,6 +54,7 @@ public enum GCCause {
_g1_humongous_allocation ("G1 Humongous Allocation"),
_dcmd_gc_run ("Diagnostic Command"),
_jbr_gc_run("JBR full GC"),
_z_timer ("Timer"),
_z_warmup ("Warmup"),

View File

@@ -240,7 +240,7 @@ vmTestbase/nsk/jdb/options/listconnectors/listconnectors001/listconnectors001.ja
vmTestbase/nsk/jdi/LaunchingConnector/launch/launch001/TestDescription.java initial_run windows-all
vmTestbase/nsk/jdi/LaunchingConnector/launch/launch003/TestDescription.java initial_run windows-all
vmTestbase/nsk/jdi/LaunchingConnector/launchnosuspend/launchnosuspend001/TestDescription.java initial_run windows-all
vmTestbase/nsk/jdi/MethodExitRequest/addClassFilter_rt/filter_rt001/TestDescription.java JBR-7585 macosx-all
vmTestbase/nsk/jdi/MethodExitRequest/addClassFilter_rt/filter_rt001/TestDescription.java JBR-7585 macosx-all,linux-all
vmTestbase/nsk/jdi/ThreadReference/stop/stop001/TestDescription.java 7034630 generic-all
vmTestbase/nsk/jdi/ReferenceType/instances/instances002/instances002.java initial_run linux-all
vmTestbase/nsk/jdi/Value/type/type002/type002.java JBR-7553 macosx-x64

View File

@@ -0,0 +1,40 @@
/*
* Copyright (c) 2024, 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.nio.file.FileSystem;
import java.nio.file.FileSystems;
/**
* Use by tests in SetDefaultProvider to test startup with a custom default file system
* provider and a custom system class loader.
*/
public class CustomSystemClassLoader extends ClassLoader {
public CustomSystemClassLoader(ClassLoader parent) {
super(parent);
// use default file system
FileSystem fs = FileSystems.getDefault();
var path = fs.getPath("foo");
}
}

View File

@@ -26,7 +26,7 @@
* @bug 4313887 7006126 8142968 8178380 8183320 8210112 8266345 8263940
* @modules jdk.jartool
* @library /test/lib
* @build SetDefaultProvider TestProvider m/* jdk.test.lib.process.ProcessTools
* @build SetDefaultProvider TestProvider m/* jdk.test.lib.process.ProcessTools CustomSystemClassLoader
* @run testng/othervm SetDefaultProvider
* @summary Runs tests with -Djava.nio.file.spi.DefaultFileSystemProvider set on
* the command line to override the default file system provider
@@ -37,6 +37,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.ArrayList;
import java.util.List;
import java.util.spi.ToolProvider;
@@ -180,6 +181,56 @@ public class SetDefaultProvider {
assertEquals(exitValue, 0);
}
/**
* Test file system provider on class path in conjunction with a custom system
* class loader that uses the file system API during its initialization.
*/
public void testCustomSystemClassLoader() throws Exception {
String testClasses = System.getProperty("test.classes");
int exitValue = exec(SET_DEFAULT_FSP,
"-Djava.system.class.loader=CustomSystemClassLoader",
"-cp", ofClasspath(testClasses, classes("m")),
"p.Main");
assertEquals(exitValue, 0);
}
/**
* Returns a class path from the given paths.
*/
private String ofClasspath(String... paths) {
return String.join(File.pathSeparator, paths);
}
/**
* Test the file system provider located in a jar with
* -Djava.util.zip.use.nio.for.zip.file.access=true
* that makes ZipFile use NIO to read the jar.
*/
public void testClassPathWithFileSystemProviderJarAndNioForZipFile() throws Exception {
String testClasses = System.getProperty("test.classes");
Path fspJar = Path.of("testFileSystemProvider.jar");
Files.deleteIfExists(fspJar);
createFileSystemProviderJar(fspJar, Path.of(testClasses));
String jarFile = createModularJar();
String classpath = ofClasspath(fspJar.toString(), jarFile, testClasses);
int exitValue = exec(SET_DEFAULT_FSP, "-Djava.util.zip.use.nio.for.zip.file.access=true",
"-cp", classpath, "p.Main");
assertEquals(exitValue, 0);
}
/**
* Returns the directory containing the classes for the given module.
*/
private static String classes(String mn) {
String mp = System.getProperty("jdk.module.path");
return Arrays.stream(mp.split(File.pathSeparator))
.map(e -> Path.of(e, mn))
.filter(Files::isDirectory)
.findAny()
.map(Path::toString)
.orElseThrow();
}
/**
* Returns the directory containing the classes for module "m".
*/

View File

@@ -30,14 +30,18 @@ import java.io.InputStreamReader;
/**
* @test
* @summary VerifyDependencies checks readability verifies that a Linux shared
* library has no dependency on symbols from glibc version higher than 2.28
* library has no dependency on symbols from glibc version higher than <code>expectedVersion</code>
* @run main VerifyDependencies
* @requires (os.family == "linux")
*/
public class VerifyDependencies {
static final public String EXPECTED_VERSION = "2.28";
static final public String EXPECTED_VERSION_LEGACY = "2.17";
static final public String EXPECTED_VERSION_VULKAN = "2.28";
static String expectedVersion;
public static void verifyLibrary(String libraryPath) throws IOException {
Process process;
BufferedReader reader;
@@ -52,12 +56,12 @@ public class VerifyDependencies {
System.out.println(line);
if (line.contains("GLIBC_")) {
String version = extractVersion(line);
if (compareVersions(version, EXPECTED_VERSION) > 0) {
if (compareVersions(version, expectedVersion) > 0) {
throw new RuntimeException(libraryPath + " has a dependency on glibc version " + version);
}
}
}
System.out.println(libraryPath + " has no dependency on glibc version higher than " + EXPECTED_VERSION);
System.out.println(libraryPath + " has no dependency on glibc version higher than " + expectedVersion);
}
private static String extractVersion(String line) {
@@ -125,6 +129,12 @@ public class VerifyDependencies {
public static void main(String[] args) throws IOException {
String javaHome = System.getProperty("java.home");
String vendorVersion = System.getProperty("java.vendor.version");
expectedVersion = vendorVersion.substring(Math.max(vendorVersion.length() - 3, 0)).compareTo("-vk") == 0
? EXPECTED_VERSION_VULKAN : EXPECTED_VERSION_LEGACY;
System.out.println("supporting glibc version is not less than " + expectedVersion);
findInDirectory(javaHome + "/bin", false);
findInDirectory(javaHome + "/lib", true);
}

View File

@@ -0,0 +1,40 @@
/*
* Copyright (c) 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.
*
* 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.
*/
/**
* @test
* @summary Verifies that Files.probeContentType() does not throw
* when used with a custom FS provider
* @library /test/lib
* @build TestProvider
* @run main/othervm -Djava.nio.file.spi.DefaultFileSystemProvider=TestProvider ProbeContentType
*/
import java.nio.file.Files;
import java.nio.file.Path;
public class ProbeContentType {
public static void main(String[] args) throws Exception {
System.out.println(Files.probeContentType(Path.of(".")));
}
}

View File

@@ -74,47 +74,59 @@ public class WLPopupLocation {
SwingUtilities.invokeAndWait(WLPopupLocation::initPopup);
pause(robot);
int w1 = 150, h1 = 200;
int x1 = 100, y1 = 100;
System.out.printf("Action: locate to (%d, %d), set size (%d, %d)\n", x1, y1, w1, h1);
SwingUtilities.invokeAndWait(() -> {
popup.setVisible(true);
popup.setSize(w1, h1);
popup.setLocation(x1, y1);
});
if (popup.getSize().width != w1 || popup.getSize().height != h1) {
throw new RuntimeException(String.format("Incorrect size (%d, %d), expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
}
if (popup.getBounds().x != x1 || popup.getBounds().y != y1) {
throw new RuntimeException(String.format("Wrong location (via getBounds()): (%d, %d). Expected: (%d, %d)", popup.getBounds().x, popup.getBounds().y, x1, y1));
}
pause(robot);
if (popup.getSize().width != h1 || popup.getSize().height != h1) {
throw new RuntimeException(String.format("Incorrect size (%d, %d) after robot's wait for idle, expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
}
if (popup.getBounds().x != x1 || popup.getBounds().y != y1) {
throw new RuntimeException(String.format("Wrong location (via getBounds()) after robot's wait for idle: (%d, %d). Expected: (%d, %d)", popup.getBounds().x, popup.getBounds().y, x1, y1));
}
try {
int w1 = 150, h1 = 200;
int x1 = 100, y1 = 100;
System.out.printf("Action: locate to (%d, %d), set size (%d, %d)\n", x1, y1, w1, h1);
SwingUtilities.invokeAndWait(() -> {
popup.setVisible(true);
popup.setSize(2, 5);
popup.setSize(89, 17);
popup.setSize(11, 3);
popup.setSize(w1, h1);
popup.setLocation(x1, y1);
});
int toleranceLevel = getTolerance();
int x2 = 200, y2 = 200;
System.out.printf("Action: set popup size to (%d, %d)\n", x2, y2);
SwingUtilities.invokeAndWait(() -> {
popup.setLocation(x2, y2);
});
if (popup.getSize().width != w1 || popup.getSize().height != h1) {
throw new RuntimeException(String.format("Incorrect size (%d, %d), expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
System.out.printf("Real bounds: %s\n", popup.getBounds());
if (isOutsideTolerance(w1, h1, popup.getSize().width, popup.getSize().height, toleranceLevel)) {
throw new RuntimeException(String.format("Incorrect size (%d, %d), expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
}
if (isOutsideTolerance(x1, y1, popup.getBounds().x, popup.getBounds().y, toleranceLevel)) {
throw new RuntimeException(String.format("Wrong location (via getBounds()): (%d, %d). Expected: (%d, %d)", popup.getBounds().x, popup.getBounds().y, x1, y1));
}
pause(robot);
System.out.printf("Real bounds after a pause: %s\n", popup.getBounds());
if (isOutsideTolerance(w1, h1, popup.getSize().width, popup.getSize().height, toleranceLevel)) {
throw new RuntimeException(String.format("Incorrect size (%d, %d) after robot's wait for idle, expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
}
if (isOutsideTolerance(x1, y1, popup.getBounds().x, popup.getBounds().y, toleranceLevel)) {
throw new RuntimeException(String.format("Wrong location (via getBounds()) after robot's wait for idle: (%d, %d). Expected: (%d, %d)", popup.getBounds().x, popup.getBounds().y, x1, y1));
}
int x2 = 200, y2 = 200;
System.out.printf("Action: set popup location to (%d, %d)\n", x2, y2);
SwingUtilities.invokeAndWait(() -> {
popup.setLocation(x2, y2);
});
System.out.printf("Real bounds: %s\n", popup.getBounds());
if (isOutsideTolerance(w1, h1, popup.getSize().width, popup.getSize().height, toleranceLevel)) {
throw new RuntimeException(String.format("Incorrect size (%d, %d), expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
}
if (isOutsideTolerance(x2, y2, popup.getBounds().x, popup.getBounds().y, toleranceLevel)) {
throw new RuntimeException(String.format("Wrong location (via getBounds()): (%d, %d). Expected: (%x, %d)", popup.getBounds().x, popup.getBounds().y, x2, y2));
}
pause(robot);
System.out.printf("Real bounds after a pause: %s\n", popup.getBounds());
if (isOutsideTolerance(w1, h1, popup.getSize().width, popup.getSize().height, toleranceLevel)) {
throw new RuntimeException(String.format("Incorrect size (%d, %d) after robot's wait for idle, expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
}
if (isOutsideTolerance(x2, y2, popup.getBounds().x, popup.getBounds().y, toleranceLevel)) {
throw new RuntimeException(String.format("Wrong location (via getBounds()) after robot's wait for idle: (%d, %d). Expected: (%d, %d)", popup.getBounds().x, popup.getBounds().y, x2, y2));
}
} finally {
SwingUtilities.invokeAndWait(frame::dispose);
}
if (popup.getBounds().x != x2 || popup.getBounds().y != y2) {
throw new RuntimeException(String.format("Wrong location (via getBounds()): (%d, %d). Expected: (%x, %d)", popup.getBounds().x, popup.getBounds().y, x2, y2));
}
pause(robot);
if (popup.getSize().width != w1 || popup.getSize().height != h1) {
throw new RuntimeException(String.format("Incorrect size (%d, %d) after robot's wait for idle, expected (%d, %d)", popup.getSize().width, popup.getSize().height, w1, h1));
}
if (popup.getBounds().x != x2 || popup.getBounds().y != y2) {
throw new RuntimeException(String.format("Wrong location (via getBounds()) after robot's wait for idle: (%d, %d). Expected: (%d, %d)", popup.getBounds().x, popup.getBounds().y, x2, y2));
}
SwingUtilities.invokeAndWait(frame::dispose);
}
private static void pause(Robot robot) {
@@ -122,4 +134,14 @@ public class WLPopupLocation {
robot.delay(500);
}
private static int getTolerance() {
String uiScaleString = System.getProperty("sun.java2d.uiScale");
int tolerance = uiScaleString == null ? 0 : (int) Math.ceil(Double.parseDouble(uiScaleString));
System.out.printf("Scale settings: debug scale: %s, tolerance level: %d\n", uiScaleString, tolerance);
return tolerance;
}
private static boolean isOutsideTolerance(int expectedX, int expectedY, int realX, int realY, int tolerance) {
return Math.abs(realX - expectedX) > tolerance || Math.abs(realY - expectedY) > tolerance;
}
}

View File

@@ -68,13 +68,14 @@ public class WLPopupMinSize {
throw new RuntimeException("Popup minimum size is not 1000x100 but " + popupMinSize);
}
int tolerance = getTolerance();
Dimension popupSize = popup.getSize();
System.out.println("Popup size: " + popupSize);
if (popupSize.width != 1000 || popupSize.height != 1000) {
if (isOutsideTolerance(1000, 1000, popupSize.width, popupSize.height, tolerance)) {
throw new RuntimeException("Popup actual size is not 1000x100 but " + popupSize);
}
} finally {
frame.dispose();
SwingUtilities.invokeAndWait(frame::dispose);
}
}
@@ -95,4 +96,15 @@ public class WLPopupMinSize {
// Setting the minimum size at this point must resize the popup window
popup.setMinimumSize(new Dimension(1000, 1000));
}
private static int getTolerance() {
String uiScaleString = System.getProperty("sun.java2d.uiScale");
int tolerance = uiScaleString == null ? 0 : (int) Math.ceil(Double.parseDouble(uiScaleString));
System.out.printf("Scale settings: debug scale: %s, tolerance level: %d\n", uiScaleString, tolerance);
return tolerance;
}
private static boolean isOutsideTolerance(int expectedX, int expectedY, int realX, int realY, int tolerance) {
return Math.abs(realX - expectedX) > tolerance || Math.abs(realY - expectedY) > tolerance;
}
}

View File

@@ -76,65 +76,65 @@ public class WLPopupMoves {
pause(robot);
double uiScale = getUiScale();
System.out.printf("UI scale: %.2f.\n", uiScale);
int pixelThreshold = uiScale == 1.0 ? 0 : (int) Math.ceil(uiScale);
System.out.printf("Pixel threshold for verifications: %d\n", pixelThreshold);
int tolerance = getTolerance();
int w = 120, h = 200;
System.out.println("Set popup to (50, 50)");
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(50, 50, w, h);
popup.setVisible(true);
});
verifyBounds("Popup position after setting to (50, 50)\n", 50, 50, w, h, pixelThreshold);
pause(robot);
verifyBounds("Popup position (50, 50) after robot's pause\n", 50, 50, w, h, pixelThreshold);
try {
int w = 120, h = 200;
System.out.println("Set popup to (50, 50)");
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(50, 50, w, h);
popup.setVisible(true);
});
verifyBounds("Popup position after setting to (50, 50)\n", 50, 50, w, h, tolerance);
pause(robot);
verifyBounds("Popup position (50, 50) after robot's pause\n", 50, 50, w, h, tolerance);
System.out.println("Set popup to (100, 100)");
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(100, 100, w, h);
});
verifyBounds("Popup position after setting to (100, 100)\n", 100, 100, w, h, pixelThreshold);
pause(robot);
verifyBounds("Popup position (100, 100) after robot's pause\n", 100, 100, w, h, pixelThreshold);
System.out.println("Set popup to (100, 100)");
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(100, 100, w, h);
});
verifyBounds("Popup position after setting to (100, 100)\n", 100, 100, w, h, tolerance);
pause(robot);
verifyBounds("Popup position (100, 100) after robot's pause\n", 100, 100, w, h, tolerance);
int x1 = (int) (toolkit.getScreenSize().width / (2 * uiScale));
int y1 = (int) (toolkit.getScreenSize().height / (2 * uiScale));
System.out.printf("Set popup to (%d, %d)\n", x1, y1);
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x1, y1, w, h);
});
verifyBounds(String.format("Popup position after setting to (%d, %d)\n", x1, y1), x1, y1, w, h, pixelThreshold);
pause(robot);
verifyBounds(String.format("Popup position (%d, %d) after robot's pause\n", x1, y1), x1, y1, w, h, pixelThreshold);
int x2 = (int) (toolkit.getScreenSize().width / uiScale - 10 - w);
int y2 = (int) (toolkit.getScreenSize().height / uiScale - 10 - h);
System.out.printf("Set popup to (%d, %d). (to the bottom right corner) \n", x2, y2);
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x2, y2, w, h);
});
verifyBounds(String.format("Popup position after setting to (%d, %d)\n", x2, y2), x2, y2, w, h, pixelThreshold);
pause(robot);
verifyBounds(String.format("Popup position (%d, %d) after robot's pause\n", x2, y2), x2, y2, w, h, pixelThreshold);
int x1 = (int) (toolkit.getScreenSize().width / (2 * uiScale));
int y1 = (int) (toolkit.getScreenSize().height / (2 * uiScale));
System.out.printf("Set popup to (%d, %d)\n", x1, y1);
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x1, y1, w, h);
});
verifyBounds(String.format("Popup position after setting to (%d, %d)\n", x1, y1), x1, y1, w, h, tolerance);
pause(robot);
verifyBounds(String.format("Popup position (%d, %d) after robot's pause\n", x1, y1), x1, y1, w, h, tolerance);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = device.getDefaultConfiguration();
Insets insets = toolkit.getScreenInsets(gc);
int x3 = (int) (toolkit.getScreenSize().width / uiScale - 10 - insets.right);
int y3 = (int) (toolkit.getScreenSize().height / uiScale - 10 - insets.bottom);
System.out.printf("Set popup to (%d, %d). (to the bottom right corner) \n", x3, y3);
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x2, y2, w, h);
});
int x3Relocated = x3 - w;
int y3Relocated = y3 - h;
verifyBounds(String.format("Popup position after setting to (%d, %d)\n", x3, y3), x3Relocated, y3Relocated, w, h, pixelThreshold);
pause(robot);
verifyBounds(String.format("Popup position (%d, %d) after robot's pause\n", x3, y3), x3Relocated, y3Relocated, w, h, pixelThreshold);
int x2 = (int) (toolkit.getScreenSize().width / uiScale - 10 - w);
int y2 = (int) (toolkit.getScreenSize().height / uiScale - 10 - h);
System.out.printf("Set popup to (%d, %d). (to the bottom right corner) \n", x2, y2);
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x2, y2, w, h);
});
verifyBounds(String.format("Popup position after setting to (%d, %d)\n", x2, y2), x2, y2, w, h, tolerance);
pause(robot);
verifyBounds(String.format("Popup position (%d, %d) after robot's pause\n", x2, y2), x2, y2, w, h, tolerance);
SwingUtilities.invokeAndWait(frame::dispose);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = device.getDefaultConfiguration();
Insets insets = toolkit.getScreenInsets(gc);
int x3 = (int) (toolkit.getScreenSize().width / uiScale - 10 - insets.right);
int y3 = (int) (toolkit.getScreenSize().height / uiScale - 10 - insets.bottom);
System.out.printf("Set popup to (%d, %d). (to the bottom right corner) \n", x3, y3);
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x2, y2, w, h);
});
int x3Relocated = x3 - w;
int y3Relocated = y3 - h;
verifyBounds(String.format("Popup position after setting to (%d, %d)\n", x3, y3), x3Relocated, y3Relocated, w, h, tolerance);
pause(robot);
verifyBounds(String.format("Popup position (%d, %d) after robot's pause\n", x3, y3), x3Relocated, y3Relocated, w, h, tolerance);
} finally {
SwingUtilities.invokeAndWait(frame::dispose);
}
}
private static Double getUiScale() {
@@ -168,4 +168,15 @@ public class WLPopupMoves {
robot.waitForIdle();
robot.delay(500);
}
private static int getTolerance() {
String uiScaleString = System.getProperty("sun.java2d.uiScale");
int tolerance = uiScaleString == null ? 0 : (int) Math.ceil(Double.parseDouble(uiScaleString));
System.out.printf("Scale settings: debug scale: %s, tolerance level: %d\n", uiScaleString, tolerance);
return tolerance;
}
private static boolean isOutsideTolerance(int expectedX, int expectedY, int realX, int realY, int tolerance) {
return Math.abs(realX - expectedX) > tolerance || Math.abs(realY - expectedY) > tolerance;
}
}

View File

@@ -73,15 +73,18 @@ public class WLPopupNoSize {
SwingUtilities.invokeAndWait(WLPopupNoSize::initPopup);
pause(robot);
SwingUtilities.invokeAndWait(() -> popup.setVisible(true));
boolean isVisible1 = popup.isVisible();
pause(robot);
boolean isVisible2 = popup.isVisible();
try {
SwingUtilities.invokeAndWait(() -> popup.setVisible(true));
boolean isVisible1 = popup.isVisible();
pause(robot);
boolean isVisible2 = popup.isVisible();
if (!isVisible1 || !isVisible2) {
throw new RuntimeException("Expected result: popup is visible");
if (!isVisible1 || !isVisible2) {
throw new RuntimeException("Expected result: popup is visible");
}
} finally {
SwingUtilities.invokeAndWait(frame::dispose);
}
SwingUtilities.invokeAndWait(frame::dispose);
}
private static void pause(Robot robot) {

View File

@@ -105,51 +105,45 @@ public class WLPopupResize {
SwingUtilities.invokeAndWait(WLPopupResize::showPopup);
pause(robot);
double uiScale = getUiScale();
System.out.printf("UI scale: %.2f.\n", uiScale);
int pixelThreshold = uiScale == 1.0 ? 0 : (int) Math.ceil(uiScale);
System.out.printf("Pixel threshold for verifications: %d\n", pixelThreshold);
try {
int tolerance = getTolerance();
int x = 10, y = 20, w = 120, h = 80;
System.out.println("Set popup size to (120, 80)");
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x, y, w, h);
});
Rectangle bounds = popup.getBounds();
boolean isCorrectPosition = x - pixelThreshold <= bounds.x && bounds.x <= x + pixelThreshold &&
y - pixelThreshold <= bounds.y && bounds.y <= y + pixelThreshold;
if (!isCorrectPosition) {
throw new RuntimeException("Popup position has unexpectedly changed. Bounds: " + popup.getBounds());
}
if (popup.getBounds().width != w || popup.getBounds().height != h) {
throw new RuntimeException("Popup size wasn't correctly changed. Bounds: " + popup.getBounds());
}
pause(robot);
System.out.println("Next checks after robot's waiting for idle.");
int x = 10, y = 20, w = 120, h = 80;
System.out.println("Set popup size to (120, 80)");
SwingUtilities.invokeAndWait(() -> {
popup.setBounds(x, y, w, h);
});
Rectangle bounds = popup.getBounds();
if (isOutsideTolerance(x, y, bounds.x, bounds.y, tolerance)) {
throw new RuntimeException("Popup position has unexpectedly changed. Bounds: " + popup.getBounds());
}
if (isOutsideTolerance(w, h, bounds.width, bounds.height, tolerance)) {
throw new RuntimeException("Popup size wasn't correctly changed. Bounds: " + popup.getBounds());
}
pause(robot);
System.out.println("Next checks after robot's waiting for idle.");
isCorrectPosition = x - pixelThreshold <= bounds.x && bounds.x <= x + pixelThreshold &&
y - pixelThreshold <= bounds.y && bounds.y <= y + pixelThreshold;
if (!isCorrectPosition) {
throw new RuntimeException("Popup position has unexpectedly changed. Bounds: " + popup.getBounds());
bounds = popup.getBounds();
if (isOutsideTolerance(x, y, bounds.x, bounds.y, tolerance)) {
throw new RuntimeException("Popup position has unexpectedly changed. Bounds: " + popup.getBounds());
}
if (isOutsideTolerance(w, h, bounds.width, bounds.height, tolerance)) {
throw new RuntimeException("Popup size wasn't correctly changed. Bounds: " + popup.getBounds());
}
} finally {
SwingUtilities.invokeAndWait(frame::dispose);
}
if (popup.getBounds().width != w || popup.getBounds().height != h) {
throw new RuntimeException("Popup size wasn't correctly changed. Bounds: " + popup.getBounds());
}
SwingUtilities.invokeAndWait(frame::dispose);
}
private static Double getUiScale() {
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice device = ge.getDefaultScreenDevice();
GraphicsConfiguration gc = device.getDefaultConfiguration();
AffineTransform transform = gc.getDefaultTransform();
double scaleX = transform.getScaleX();
double scaleY = transform.getScaleY();
if (scaleX != scaleY) {
System.out.println("Skip test due to non-uniform display scale");
System.exit(0);
}
return scaleX;
private static int getTolerance() {
String uiScaleString = System.getProperty("sun.java2d.uiScale");
int tolerance = uiScaleString == null ? 0 : (int) Math.ceil(Double.parseDouble(uiScaleString));
System.out.printf("Scale settings: debug scale: %s, tolerance level: %d\n", uiScaleString, tolerance);
return tolerance;
}
private static boolean isOutsideTolerance(int expectedX, int expectedY, int realX, int realY, int tolerance) {
return Math.abs(realX - expectedX) > tolerance || Math.abs(realY - expectedY) > tolerance;
}
private static void pause(Robot robot) {

View File

@@ -73,57 +73,59 @@ public class WLPopupVisibility {
SwingUtilities.invokeAndWait(WLPopupVisibility::initPopup);
pause(robot);
System.out.println("Action: set the popup visible");
SwingUtilities.invokeAndWait(() -> popup.setVisible(true));
boolean isVisible1 = popup.isVisible();
pause(robot);
boolean isVisible2 = popup.isVisible();
try {
System.out.println("Action: set the popup visible");
SwingUtilities.invokeAndWait(() -> popup.setVisible(true));
boolean isVisible1 = popup.isVisible();
pause(robot);
boolean isVisible2 = popup.isVisible();
if (!isVisible1 || !isVisible2) {
throw new RuntimeException("Expected result: popup is visible");
}
if (!isVisible1 || !isVisible2) {
throw new RuntimeException("Expected result: popup is visible");
}
System.out.println("Action: set the popup disabled");
SwingUtilities.invokeAndWait(() -> popup.setEnabled(false));
boolean isEnabled3 = popup.isEnabled();
boolean isVisible3 = popup.isVisible();
pause(robot);
boolean isEnabled4 = popup.isEnabled();
boolean isVisible4 = popup.isVisible();
if (isEnabled3 || isEnabled4) {
throw new RuntimeException("Expected result: popup is disabled");
}
if (!isVisible3 || !isVisible4) {
throw new RuntimeException("Expected result: disabled popup remains visible");
}
System.out.println("Action: set the popup disabled");
SwingUtilities.invokeAndWait(() -> popup.setEnabled(false));
boolean isEnabled3 = popup.isEnabled();
boolean isVisible3 = popup.isVisible();
pause(robot);
boolean isEnabled4 = popup.isEnabled();
boolean isVisible4 = popup.isVisible();
if (isEnabled3 || isEnabled4) {
throw new RuntimeException("Expected result: popup is disabled");
}
if (!isVisible3 || !isVisible4) {
throw new RuntimeException("Expected result: disabled popup remains visible");
}
System.out.println("Action: set the popup invisible");
SwingUtilities.invokeAndWait(() -> popup.setVisible(false));
boolean isVisible5 = popup.isVisible();
pause(robot);
boolean isVisible6 = popup.isVisible();
if (isVisible5 && isVisible6) {
throw new RuntimeException("Expected result: disabled popup remains visible");
}
System.out.println("Action: set the popup invisible");
SwingUtilities.invokeAndWait(() -> popup.setVisible(false));
boolean isVisible5 = popup.isVisible();
pause(robot);
boolean isVisible6 = popup.isVisible();
if (isVisible5 && isVisible6) {
throw new RuntimeException("Expected result: disabled popup remains visible");
}
System.out.println("Action: set popup enabled and visible");
SwingUtilities.invokeAndWait(() -> {
popup.setVisible(true);
popup.setEnabled(true);
});
boolean isEnabled7 = popup.isEnabled();
boolean isVisible7 = popup.isVisible();
pause(robot);
boolean isEnabled8 = popup.isEnabled();
boolean isVisible8 = popup.isVisible();
if (!isEnabled7 || !isEnabled8) {
throw new RuntimeException("Expected result: popup is enabled");
System.out.println("Action: set popup enabled and visible");
SwingUtilities.invokeAndWait(() -> {
popup.setVisible(true);
popup.setEnabled(true);
});
boolean isEnabled7 = popup.isEnabled();
boolean isVisible7 = popup.isVisible();
pause(robot);
boolean isEnabled8 = popup.isEnabled();
boolean isVisible8 = popup.isVisible();
if (!isEnabled7 || !isEnabled8) {
throw new RuntimeException("Expected result: popup is enabled");
}
if (!isVisible7 || !isVisible8) {
throw new RuntimeException("Expected result: popup becoming visible");
}
} finally {
SwingUtilities.invokeAndWait(frame::dispose);
}
if (!isVisible7 || !isVisible8) {
throw new RuntimeException("Expected result: popup becoming visible");
}
SwingUtilities.invokeAndWait(frame::dispose);
}
private static void pause(Robot robot) {

View File

@@ -105,6 +105,9 @@ public class KeyCodesTest extends TestFixture {
verify("", VK_F1, "com.apple.keylayout.ABC", VK_F1);
verify("", VK_F19, "com.apple.keylayout.ABC", VK_F19);
// context menu key on newer Apple keyboards
verify("", VK_CONTEXT_MENU, "com.apple.keylayout.ABC", VK_CONTEXT_MENU);
// Test ANSI/ISO/JIS keyboard weirdness
verify("\u00a7", 0x01000000+0x00A7, "com.apple.keylayout.ABC", VK_SECTION);
verify("\u00b2", 0x01000000+0x00B2, "com.apple.keylayout.French-PC", VK_SECTION);

View File

@@ -55,7 +55,7 @@ java/awt/KeyboardFocusmanager/ConsumeNextMnemonicKeyTypedTest/ConsumeNextMnemoni
java/awt/KeyboardFocusmanager/TypeAhead/ButtonActionKeyTest/ButtonActionKeyTest.java 8257529,JBR-5397,JBR-7780 windows-x64,macosx-all,linux-all
java/awt/KeyboardFocusmanager/TypeAhead/SubMenuShowTest/SubMenuShowTest.java JBR-5397,JBR-4074 macosx-all,windows-all
java/awt/List/ItemEventTest/ItemEventTest.java JBR-5397,JBR-5505 macosx-all,windows-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFAppModalTest.java JBR-5397 macosx-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDWFAppModalTest.java JBR-5397,JBR-8074 macosx-all,windows-x64
java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5397,JBR-5802 macosx-all,windows-all
java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java JBR-6948 windows-x64
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5397 macosx-all
@@ -128,6 +128,7 @@ java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java JBR-6857,JBR-5505 m
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/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
java/awt/datatransfer/DragUnicodeBetweenJVMTest/DragUnicodeBetweenJVMTest.java JBR-5538 windows-x64

View File

@@ -122,6 +122,7 @@ java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-7339 linux-all,windows-
java/awt/Focus/8282640/ScrollPaneFocusBugTest.java JBR-7340 linux-all
java/awt/Focus/ChoiceFocus/ChoiceFocus.java JBR-7341 linux-all
java/awt/KeyboardFocusmanager/TypeAhead/EnqueueWithDialogTest/EnqueueWithDialogTest.java JBR-5210,JBR-7077 windows-all,linux-all
java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-all
java/awt/MenuItem/EnableTest.java NOBUG windows-all timeout
java/awt/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

View File

@@ -20,6 +20,7 @@ java/awt/GraphicsDevice/DisplayModes/CompareToXrandrTest.java JBR-5062 linux-all
java/awt/GraphicsDevice/DisplayModes/UnknownRefrshRateTest.java JBR-6336 macosx-all
java/awt/GraphicsDevice/IncorrectDisplayModeExitFullscreen.java JBR-6336 macosx-all
java/awt/datatransfer/Clipboard/GetContentsInterruptedTest.java JBR-5086 linux-5.15.0-46-generic Ubuntu 20.04
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 8340330,JBR-5442,JBR-5510 macosx-15.0.1,macosx-15.1.1,linux-5.18.2-arch1-1
java/awt/Robot/RobotMoveMultiscreen.java JBR-5442 linux-all
@@ -52,6 +53,7 @@ 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

View File

@@ -47,6 +47,7 @@ javax/swing/JFileChooser/4400728/JFileChooserDefaultDirectoryTest.java initial_r
javax/swing/JFileChooser/FileViewNPETest.java initial_runs generic-all
javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java initial_runs generic-all
javax/swing/JFrame/JFrameBackgroundRefreshTest.java JBR-7471 linux-all
javax/swing/JMenu/4213634/bug4213634.java JBR-8056 linux-aarch64
javax/swing/JMenu/TestDisabledMenuForegroundColor.java initial_runs generic-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java initial_runs generic-all
javax/swing/JRadioButton/bug4823809.java JBR-7788 linux-all

View File

@@ -124,7 +124,7 @@ java/awt/event/MouseEvent/EnterAsGrabbedEvent/EnterAsGrabbedEvent.java JBR-809 w
java/awt/event/MouseEvent/MouseButtonsAndKeyMasksTest/MouseButtonsAndKeyMasksTest.java JBR-6578 windows-all,linux-all
java/awt/event/MouseEvent/MouseButtonsTest/MouseButtonsTest.java JBR-810 windows-all,linux-all
java/awt/event/MouseEvent/MouseClickTest/MouseClickTest.java JBR-52 linux-all
java/awt/event/MouseEvent/MouseEnterExitTest.java JBR-7113 linux-all
java/awt/event/MouseEvent/MouseEnterExitTest.java JBR-7113,JBR-8147 linux-all,windows-aarch64
java/awt/event/MouseEvent/MultipleMouseButtonsTest/MultipleMouseButtonsTest.java 8233568,JBR-810 macosx-all,windows-all,linux-all
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion.java 8204200,JBR-811 windows-all,macosx-all,linux-all
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_1.java 8204200,JBR-811 windows-all,macosx-all,linux-all
@@ -136,6 +136,7 @@ java/awt/event/MouseWheelEvent/WheelModifier/WheelModifier.java JBR-94 windows-x
java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6479 generic-all
java/awt/FileDialog/8003399/bug8003399.java JBR-6930 windows-all
java/awt/FileDialog/8017487/bug8017487.java JBR-8144 windows-all
java/awt/FileDialog/FileDialogIconTest/FileDialogIconTest.java 8160558 windows-all
java/awt/FlowLayout/PreferredLayoutSize.java JBR-6349 linux-all
java/awt/Focus/FocusOwnerFrameOnClick/FocusOwnerFrameOnClick.java 8081489 generic-all
@@ -160,6 +161,7 @@ java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenBig.java JBR-5
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/DragTriggerEventTest.java 8320083,JBR-6548 windows-all,linux-all
java/awt/dnd/DragOverDropTargetPerformanceTest.java JBR-8150 windows-x64
java/awt/dnd/DropActionChangeTest.java JBR-6489 generic-all
java/awt/dnd/DropActionChangedTest.java JBR-6757 windows-all
java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java 8029680 generic-all
@@ -251,6 +253,7 @@ java/awt/datatransfer/SystemSelection/SystemSelectionSwingTest.java JBR-6393 lin
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 windows-all,macosx-all
java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java JBR-8146 windows-x64
java/awt/EventDispatchThread/HandleExceptionOnEDT/HandleExceptionOnEDT.java JBR-6633 linux-all,windows-all
java/awt/EventDispatchThread/LoopRobustness/LoopRobustness.java 8073636,JBR-4211 macosx-all,linux-all
java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java JBR-5225 windows-all
@@ -260,7 +263,7 @@ java/awt/FullScreen/FullscreenWindowProps/FullscreenWindowProps.java JBR-4275,JB
java/awt/FullScreen/NoResizeEventOnDMChangeTest/NoResizeEventOnDMChangeTest.java 7188711,8253184 linux-all,windows-all
java/awt/FullScreen/UninitializedDisplayModeChangeTest/UninitializedDisplayModeChangeTest.java 7188711,8273617,JBR-4880,8253184 macosx-all,linux-all,windows-all
java/awt/Focus/8013611/JDK8013611.java 8175366 windows-all,macosx-all
java/awt/Focus/6401036/InputVerifierTest2.java JBR-7537 linux-aarch64
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/Test3.java 8173264 generic-all
java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729 windows-all,linux-all
@@ -552,7 +555,7 @@ java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java 8253184,JBR-5709 windows-all
java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java 8253184,JBR-6752 windows-all,linux-all
java/awt/Mouse/MouseModifiersUnitTest/ExtraButtonDrag.java 8253184,JBR-6407 windows-all,linux-all
java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersUnitTest_Standard.java 7124407,8302787 macosx-all,windows-all
java/awt/Mouse/RemovedComponentMouseListener/RemovedComponentMouseListener.java 8157170,8253184 macosx-all,windows-all
java/awt/Mouse/RemovedComponentMouseListener/RemovedComponentMouseListener.java 8157170,8253184,JBR-8127 macosx-all,windows-all,linux-5.15.0-1075-aws
java/awt/MouseAdapter/MouseAdapterUnitTest/MouseAdapterUnitTest.java 8253184 windows-all
java/awt/MouseInfo/ComponentMousePositionTest.java 8253184 windows-all
java/awt/MouseInfo/JContainerMousePositionTest.java 8253184 windows-all
@@ -1077,7 +1080,7 @@ 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/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id0 JBR-5799 windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id1 JBR-5779 linux-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/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
@@ -1087,7 +1090,7 @@ javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5510,JBR-6546 linux-5.18.2-arch1-1,windows-x64
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 windows-aarch64
javax/swing/reliability/HangDuringStaticInitialization.java JBR-6958,JBR-8145 windows-aarch64,windows-x64
javax/swing/reliability/TaskUndJFrameProperties.java JBR-6586 windows-x64
javax/swing/ToolTipManager/Test6256140.java 8197552 windows-all
javax/swing/text/DefaultEditorKit/4278839/bug4278839.java CODETOOLS-7901623 windows-all
@@ -1316,7 +1319,7 @@ java/awt/Frame/MiscUndecorated/UndecoratedInitiallyIconified.java JBR-4880 windo
java/awt/FullScreen/SetFSWindow/FSFrame.java 8253184 windows-all
java/awt/grab/MenuDragEvents/MenuDragEvents.java JBR-4880 windows-all
java/awt/image/mlib/MlibOpsTest.java JBR-5225 windows-all,windows-aarch64
java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880 windows-all
java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880,JBR-8090 windows-all,linux-5.18.2-arch1-1
javax/swing/JFileChooser/8002077/bug8002077.java JBR-4880 windows-all
javax/swing/JFileChooser/JFileChooserSetLocationTest.java 8295804 linux-all,macosx-all,windows-all
javax/swing/JSlider/6348946/bug6348946.java 8197552,JBR-5387 windows-all,linux-all

View File

@@ -88,7 +88,13 @@ java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java nobug generic-all
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java nobug generic-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java nobug generic-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java nobug generic-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id0 nobug macosx-all,linux-all,windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id1 nobug macosx-all,linux-all,windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id2 nobug windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id3 nobug windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id4 nobug windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id5 nobug windows-all
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id6 nobug windows-all
jb/java/awt/CustomTitleBar/ActionListenerTest.java nobug generic-all
jb/java/awt/CustomTitleBar/ChangeTitleBarHeightTest.java nobug generic-all
jb/java/awt/CustomTitleBar/CheckFullScreen.java nobug generic-all