Compare commits

...

19 Commits

Author SHA1 Message Date
Vitaly Provodin
1fdfd1ae28 update exclude list on results of 21.0.1_b331.1 test runs 2024-01-12 10:49:01 +07:00
Vitaly Provodin
48181f30b0 Revert "JBR-6246 add default CDS archives into jbrsdk distributions and remove the step normalizing timestamp"
This reverts commit be6842220b.
2024-01-06 07:31:41 +07:00
Dmitry Batrak
6f0fc2cc8f JBR-2651 jb/java/awt/Focus/PopupIncomingFocusTest.java intermittently fails by java.util.concurrent.TimeoutException
further attempt to stabilize test

(cherry picked from commit 50933cd23e)
(cherry picked from commit 6d2017b6a3fe9161810f2d4a550454da989ead41)
2024-01-05 12:11:47 +02:00
Maxim Kartashev
d8f2bdb21f JBR-6452 Wayland: avoid copying entire surface buffers 2024-01-03 18:28:01 +04:00
Vitaly Provodin
f132a9597f update exclude list on results of 21.0.1_b327 test runs 2024-01-03 11:05:37 +07:00
Vitaly Provodin
4f77d022aa update exclude list on results of 21.0.1_b325.2 test runs 2024-01-03 04:52:48 +07:00
Maxim Kartashev
21062b021e JBR-6452 Wayland: measure and improve surface buffer management
Improved rendering performance by
* reducing memory copy and making it more efficient,
* tying the next frame display to the frame event from Wayland,
  which dramatically reduces load for very quick Swing apps,
* limiting the number of buffers to 2.
2023-12-28 17:13:47 +04:00
Vitaly Provodin
7c4782fcf0 update exclude list on results of 21.0.1_b321.2 test runs 2023-12-28 18:09:30 +07:00
Vitaly Provodin
afa522d0b1 JBR-6454 add synchronization at disposing windows 2023-12-27 20:12:05 +07:00
bourgesl
7084e04b3d fixup! JBR-6377: fixed MTLLayer.redrawCount = 1 to avoid extra redraws with multiple windows
(cherry picked from commit acca2a46cb)
2023-12-23 14:49:52 +01:00
Alexey Ushakov
e95b9136f2 fixup! JBR-5621 Test failures with -Dsun.java2d.metal.displaySync=false 2023-12-23 12:00:34 +01:00
bourgesl
15b700cf3f JBR-6241: RenderPerf 23.12: remove older RenderPerfTest in src
(cherry picked from commit 47750067a1)
2023-12-22 16:16:02 +01:00
bourgesl
5a4f931f73 JBR-6241: RenderPerf 23.11 improvements: support parallel rendering on several frames and screens, refined Robot executor to use rounded duration (to 120Hz) and interval between viewed frames, added new command-line arguments
(cherry picked from commit 93e1f77450)
2023-12-22 16:16:02 +01:00
bourgesl
7698957b81 JBR-6377: fixed MTLLayer.redrawCount = 1 to avoid extra redraws with multiple windows
(cherry picked from commit 82c930da5f)
2023-12-22 16:15:40 +01:00
Dmitrii Morskii
317be56a4c Revert "JBR-6346 update Inter font version"
This reverts commit 0c68438ee5.
2023-12-21 19:35:28 +00:00
Alexey Ushakov
227110f74f JBR-5621 Test failures with -Dsun.java2d.metal.displaySync=false
Created intermediate buffer in the MTLLayer
Implemented frame separation of window updates for AWT and Swing
Remove frame delays as they greatly affect throughput
Fixed test/jdk/sun/java2d/GdiRendering/ClipShapeRendering.java
Resolved crash on multi-GPU systems
2023-12-21 19:32:10 +01:00
Dmitrii Morskii
d8ecbedcc3 JBR-6372 Wayland:
-correctly positioning SplashScreen on multiple monitors;
-correctly correctly handles cases of SplashScreen with gif with transparent parts;
-refactoring;
2023-12-20 16:13:18 +01:00
Alexey Ushakov
469636eebf JBR-6445 Prepare RepaintManager code for displaySync=false
Refactored AWTAccessor code
2023-12-20 11:11:11 +01:00
Maxim Kartashev
998c4c5208 JBR-6340 Popups displayed shifted after moving IDE to another monitor via shortcut with auto-maximize enabled in Mutter
Windows no longer change their "native" size when moved between monitors
with different scale on Linux. Use -Dresize.with.scale=true to revert
that.
2023-12-20 12:57:25 +04:00
57 changed files with 2035 additions and 2160 deletions

View File

@@ -77,7 +77,6 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
cp $IMAGES_DIR/jdk/lib/server/*.jsa "$IMAGES_DIR"/"$__root_dir"/lib/server
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
fi

View File

@@ -77,7 +77,6 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
cp $IMAGES_DIR/jdk/lib/server/*.jsa "$IMAGES_DIR"/"$__root_dir"/lib/server
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
fi

View File

@@ -65,7 +65,6 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' "$IMAGES_DIR"/"$__root_dir"/release > release
mv release "$IMAGES_DIR"/"$__root_dir"/release
cp $IMAGES_DIR/jdk/lib/src.zip "$IMAGES_DIR"/"$__root_dir"/lib
cp $IMAGES_DIR/jdk/lib/server/*.jsa "$IMAGES_DIR"/"$__root_dir"/lib/server
copy_jmods "$__modules" "$__modules_path" "$IMAGES_DIR"/"$__root_dir"/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk "${JBR}_diz"
fi

View File

@@ -72,7 +72,6 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' $JRE_CONTENTS/Home/release > release
mv release $JRE_CONTENTS/Home/release
cp $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk/Contents/Home/lib/src.zip $JRE_CONTENTS/Home/lib
cp $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk/Contents/Home/lib/server/*.jsa $JRE_CONTENTS/Home/lib/server
copy_jmods "$__modules" "$__modules_path" "$JRE_CONTENTS"/Home/jmods
zip_native_debug_symbols $IMAGES_DIR/jdk-bundle/jdk-$JBSDK_VERSION.jdk "${JBR}_diz"
fi
@@ -88,7 +87,7 @@ function create_image_bundle {
echo Creating "$JBR".tar.gz ...
# Normalize timestamp
#find "$tmp"/"$__root_dir" -print0 | xargs -0 touch -c -h -t "$TOUCH_TIME"
find "$tmp"/"$__root_dir" -print0 | xargs -0 touch -c -h -t "$TOUCH_TIME"
(cd "$tmp" &&
find "$__root_dir" -print0 | LC_ALL=C sort -z | \

View File

@@ -75,7 +75,6 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
mv release $__root_dir/release
cp $IMAGES_DIR/jdk/lib/src.zip $__root_dir/lib
cp $IMAGES_DIR/jdk/bin/server/*.jsa $__root_dir/bin/server
for dir in $(ls -d $IMAGES_DIR/jdk/*); do
rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir
done

View File

@@ -66,7 +66,6 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
mv release $__root_dir/release
cp $IMAGES_DIR/jdk/lib/src.zip $__root_dir/lib
cp $IMAGES_DIR/jdk/bin/server/*.jsa $__root_dir/bin/server
for dir in $(ls -d $IMAGES_DIR/jdk/*); do
rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir
done

View File

@@ -62,7 +62,6 @@ function create_image_bundle {
sed 's/JBR/JBRSDK/g' $__root_dir/release > release
mv release $__root_dir/release
cp $IMAGES_DIR/jdk/lib/src.zip $__root_dir/lib
cp $IMAGES_DIR/jdk/bin/server/*.jsa $__root_dir/bin/server
for dir in $(ls -d $IMAGES_DIR/jdk/*); do
rsync -amv --include="*/" --include="*.pdb" --exclude="*" $dir $__root_dir
done

View File

@@ -1,74 +0,0 @@
#
# Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# - Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# - Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# - Neither the name of Oracle nor the names of its
# contributors may be used to endorse or promote products derived
# from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
SOURCEPATH=src
CLASSES=build
DIST=dist
RESOURCES=resources
RENDERPERF_CLASSES = $(CLASSES)/renderperf/RenderPerfTest.class
RENDERPERF_SOURCES = $(SOURCEPATH)/renderperf/RenderPerfTest.java
RENDERPERF_RESOURCES = $(CLASSES)/renderperf/images/duke.png
all: mkdirs $(DIST)/RenderPerfTest.jar
run: mkdirs $(DIST)/RenderPerfTest.jar
java -jar $(DIST)/RenderPerfTest.jar
$(DIST)/RenderPerfTest.jar: \
$(RENDERPERF_CLASSES) $(RENDERPERF_RESOURCES) \
$(CLASSES)/renderperf.manifest
jar cvmf $(CLASSES)/renderperf.manifest $(DIST)/RenderPerfTest.jar -C $(CLASSES) .
$(CLASSES)/renderperf/images/%: $(RESOURCES)/images/%
cp -r $< $@
$(CLASSES)/renderperf.manifest:
echo "Main-Class: renderperf.RenderPerfTest" > $@
$(DIST):
mkdir $(DIST)
$(CLASSES):
mkdir $(CLASSES)
mkdir -p $(CLASSES)/renderperf/images
mkdirs: $(DIST) $(CLASSES)
$(RENDERPERF_CLASSES): $(RENDERPERF_SOURCES)
javac -g:none -d $(CLASSES) -sourcepath $(SOURCEPATH) $<
clean:
rm -rf $(CLASSES)
rm -rf $(DIST)

View File

@@ -1,34 +0,0 @@
-----------------------------------------------------------------------
Introduction
-----------------------------------------------------------------------
RenderPerfTest is a set of on-screen rendering microbenchmarks to
analyze the performance of Java2D graphical primitives rendering
-----------------------------------------------------------------------
How To Compile
-----------------------------------------------------------------------
#> cd RenderPerfTest
The benchmark can be compiled by using either ant:
#> ant
or gnumake (assuming there's 'javac' in the path):
#> gnumake
The jar files will be generated into RenderPerfTest/dist directory.
-----------------------------------------------------------------------
How To Run RenderPerfTest
-----------------------------------------------------------------------
Run all tests
#> ant run
or
#> java -jar dist/RenderPerfTest.jar
Run particular test cases
#> java -jar dist/RenderPerfTest.jar testWhiteTextBubblesGray ...

View File

@@ -1,94 +0,0 @@
<!--
Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
- Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
- Neither the name of Oracle nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-->
<project name="RenderPerfTest" default="dist" basedir=".">
<description>
simple example build file
</description>
<!-- set global properties for this build -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<property name="dist" location="dist"/>
<property name="resources" location="resources"/>
<target name="init">
<!-- Create the time stamp -->
<tstamp/>
<!-- Create the build directory structure used by compile -->
<mkdir dir="${build}"/>
</target>
<target name="compile" depends="init"
description="compile the source " >
<!-- Compile the java code from ${src} into ${build} -->
<javac includeantruntime="false" debug="off" srcdir="${src}" destdir="${build}"/>
</target>
<target name="run" depends="dist"
description="run RenderPerfTest" >
<java jar="${dist}/RenderPerfTest.jar"
fork="true"
>
</java>
</target>
<target name="resources" depends="init"
description="copy resources into build dir" >
<!-- Copy the resource files from ${resources} into ${build}/ -->
<mkdir dir="${dist}"/>
<mkdir dir="${dist}/renderperf"/>
<mkdir dir="${build}/renderperf/images"/>
<copy todir="${build}/renderperf/images">
<fileset dir="resources/renderperf/images" />
</copy>
</target>
<target name="dist" depends="compile, resources"
description="generate the distribution" >
<!-- Create the distribution directory -->
<mkdir dir="${dist}"/>
<!-- Put everything in ${build} into the J2DBench.jar file -->
<jar jarfile="${dist}/RenderPerfTest.jar" basedir="${build}">
<manifest>
<attribute name="Built-By" value="${user.name}"/>
<attribute name="Main-Class" value="renderperf.RenderPerfTest"/>
</manifest>
</jar>
</target>
<target name="clean"
description="clean up" >
<!-- Delete the ${build} and ${dist} directory trees -->
<delete dir="${build}"/>
<delete dir="${dist}"/>
</target>
</project>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -1,739 +0,0 @@
/*
* Copyright (c) 2019, 2020 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. 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 renderperf;
import javax.imageio.ImageIO;
import javax.swing.*;
import java.awt.*;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.geom.AffineTransform;
import java.awt.geom.Point2D;
import java.awt.geom.QuadCurve2D;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashSet;
import java.util.Objects;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicBoolean;
public class RenderPerfTest {
private static HashSet<String> ignoredTests = new HashSet<>();
private final static int N = 1000;
private final static float WIDTH = 800;
private final static float HEIGHT = 800;
private final static float R = 25;
private final static int BW = 50;
private final static int BH = 50;
private final static int COUNT = 300;
private final static int DELAY = 10;
private final static int RESOLUTION = 5;
private final static int COLOR_TOLERANCE = 10;
private final static int MAX_MEASURE_TIME = 5000;
interface Configurable {
void configure(Graphics2D g2d);
}
interface Renderable {
void setup(Graphics2D g2d);
void render(Graphics2D g2d);
void update();
}
static class Particles {
private float[] bx;
private float[] by;
private float[] vx;
private float[] vy;
private float r;
private int n;
private float x0;
private float y0;
private float width;
private float height;
Particles(int n, float r, float x0, float y0, float width, float height) {
bx = new float[n];
by = new float[n];
vx = new float[n];
vy = new float[n];
this.n = n;
this.r = r;
this.x0 = x0;
this.y0 = y0;
this.width = width;
this.height = height;
for (int i = 0; i < n; i++) {
bx[i] = (float) (x0 + r + 0.1 + Math.random() * (width - 2 * r - 0.2 - x0));
by[i] = (float) (y0 + r + 0.1 + Math.random() * (height - 2 * r - 0.2 - y0));
vx[i] = 0.1f * (float) (Math.random() * 2 * r - r);
vy[i] = 0.1f * (float) (Math.random() * 2 * r - r);
}
}
void render(Graphics2D g2d, ParticleRenderer renderer) {
for (int i = 0; i < n; i++) {
renderer.render(g2d, i, bx, by, vx, vy);
}
}
void update() {
for (int i = 0; i < n; i++) {
bx[i] += vx[i];
if (bx[i] + r > width || bx[i] - r < x0) vx[i] = -vx[i];
by[i] += vy[i];
if (by[i] + r > height || by[i] - r < y0) vy[i] = -vy[i];
}
}
}
ParticleRenderable createPR(ParticleRenderer renderer) {
return new ParticleRenderable(renderer);
}
static class ParticleRenderable implements Renderable {
ParticleRenderer renderer;
Configurable configure;
ParticleRenderable(ParticleRenderer renderer, Configurable configure) {
this.renderer = renderer;
this.configure = configure;
}
ParticleRenderable(ParticleRenderer renderer) {
this(renderer, null);
}
@Override
public void setup(Graphics2D g2d) {
if (configure != null) configure.configure(g2d);
}
@Override
public void render(Graphics2D g2d) {
balls.render(g2d, renderer);
}
@Override
public void update() {
balls.update();
}
public ParticleRenderable configure(Configurable configure) {
this.configure = configure;
return this;
}
}
interface ParticleRenderer {
void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy);
}
static class FlatParticleRenderer implements ParticleRenderer {
Color[] colors;
float r;
FlatParticleRenderer(int n, float r) {
colors = new Color[n];
this.r = r;
for (int i = 0; i < n; i++) {
colors[i] = new Color((float) Math.random(),
(float) Math.random(), (float) Math.random());
}
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
g2d.setColor(colors[id % colors.length]);
g2d.fillOval((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
}
}
static class WhiteTextParticleRenderer implements ParticleRenderer {
float r;
WhiteTextParticleRenderer(float r) {
this.r = r;
}
void setPaint(Graphics2D g2d, int id) {
g2d.setColor(Color.WHITE);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
setPaint(g2d, id);
g2d.drawString("The quick brown fox jumps over the lazy dog",
(int)(x[id] - r), (int)(y[id] - r));
g2d.drawString("The quick brown fox jumps over the lazy dog",
(int)(x[id] - r), (int)y[id]);
g2d.drawString("The quick brown fox jumps over the lazy dog",
(int)(x[id] - r), (int)(y[id] + r));
}
}
static class TextParticleRenderer extends WhiteTextParticleRenderer {
Color[] colors;
float r;
TextParticleRenderer(int n, float r) {
super(r);
colors = new Color[n];
this.r = r;
for (int i = 0; i < n; i++) {
colors[i] = new Color((float) Math.random(),
(float) Math.random(), (float) Math.random());
}
}
void setPaint(Graphics2D g2d, int id) {
g2d.setColor(colors[id % colors.length]);
}
}
static class LargeTextParticleRenderer extends TextParticleRenderer {
LargeTextParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
setPaint(g2d, id);
Font font = new Font("LucidaGrande", Font.PLAIN, 32);
g2d.setFont(font);
g2d.drawString("The quick brown fox jumps over the lazy dog",
(int)(x[id] - r), (int)(y[id] - r));
g2d.drawString("The quick brown fox jumps over the lazy dog",
(int)(x[id] - r), (int)y[id]);
g2d.drawString("The quick brown fox jumps over the lazy dog",
(int)(x[id] - r), (int)(y[id] + r));
}
}
static class FlatOvalRotParticleRenderer extends FlatParticleRenderer {
FlatOvalRotParticleRenderer(int n, float r) {
super(n, r);
}
void setPaint(Graphics2D g2d, int id) {
g2d.setColor(colors[id % colors.length]);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
setPaint(g2d, id);
if (Math.abs(vx[id] + vy[id]) > 0.001) {
AffineTransform t = (AffineTransform) g2d.getTransform().clone();
double l = vx[id] / Math.sqrt(vx[id] * vx[id] + vy[id] * vy[id]);
if (vy[id] < 0) {
l = -l;
}
g2d.translate(x[id], y[id]);
g2d.rotate(Math.acos(l));
g2d.fillOval(-(int)r, (int)(-0.5*r), (int) (2 * r), (int)r);
g2d.setTransform(t);
} else {
g2d.fillOval((int)(x[id] - r), (int)(y[id] - 0.5*r),
(int) (2 * r), (int) r);
}
}
}
static class LinGradOvalRotParticleRenderer extends FlatOvalRotParticleRenderer {
LinGradOvalRotParticleRenderer(int n, float r) {
super(n, r);
}
@Override
void setPaint(Graphics2D g2d, int id) {
Point2D start = new Point2D.Double(- r, - 0.5*r);
Point2D end = new Point2D.Double( 2 * r, r);
float[] dist = {0.0f, 1.0f};
Color[] cls = {colors[id %colors.length], colors[(colors.length - id) %colors.length]};
LinearGradientPaint p =
new LinearGradientPaint(start, end, dist, cls);
g2d.setPaint(p);
}
}
static class FlatBoxParticleRenderer extends FlatParticleRenderer {
FlatBoxParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
g2d.setColor(colors[id % colors.length]);
g2d.fillRect((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
}
}
static class ImgParticleRenderer extends FlatParticleRenderer {
BufferedImage dukeImg;
ImgParticleRenderer(int n, float r) {
super(n, r);
try {
dukeImg = ImageIO.read(
Objects.requireNonNull(
RenderPerfTest.class.getClassLoader().getResourceAsStream(
"renderperf/images/duke.png")));
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
g2d.setColor(colors[id % colors.length]);
g2d.drawImage(dukeImg, (int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r), null);
}
}
static class FlatBoxRotParticleRenderer extends FlatParticleRenderer {
FlatBoxRotParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
g2d.setColor(colors[id % colors.length]);
if (Math.abs(vx[id] + vy[id]) > 0.001) {
AffineTransform t = (AffineTransform) g2d.getTransform().clone();
double l = vx[id] / Math.sqrt(vx[id] * vx[id] + vy[id] * vy[id]);
if (vy[id] < 0) {
l = -l;
}
g2d.translate(x[id], y[id]);
g2d.rotate(Math.acos(l));
g2d.fillRect(-(int)r, -(int)r, (int) (2 * r), (int) (2 * r));
g2d.setTransform(t);
} else {
g2d.fillRect((int)(x[id] - r), (int)(y[id] - r),
(int) (2 * r), (int) (2 * r));
}
}
}
static class WiredParticleRenderer extends FlatParticleRenderer {
WiredParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
g2d.setColor(colors[id % colors.length]);
g2d.drawOval((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
}
}
static class WiredBoxParticleRenderer extends FlatParticleRenderer {
WiredBoxParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
g2d.setColor(colors[id % colors.length]);
g2d.drawRect((int)(x[id] - r), (int)(y[id] - r), (int)(2*r), (int)(2*r));
}
}
static class SegParticleRenderer extends FlatParticleRenderer {
SegParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
double v = Math.sqrt(vx[id]*vx[id]+vy[id]*vy[id]);
float nvx = (float) (vx[id]/v);
float nvy = (float) (vy[id]/v);
g2d.setColor(colors[id % colors.length]);
g2d.drawLine((int)(x[id] - r*nvx), (int)(y[id] - r*nvy),
(int)(x[id] + 2*r*nvx), (int)(y[id] + 2*r*nvy));
}
}
static class WiredQuadParticleRenderer extends FlatParticleRenderer {
WiredQuadParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
if (id > 2 && (id % 3) == 0) {
g2d.setColor(colors[id % colors.length]);
g2d.draw(new QuadCurve2D.Float(x[id-3], y[id-3], x[id-2], y[id-2], x[id-1], y[id-1]));
}
}
}
static class FlatQuadParticleRenderer extends FlatParticleRenderer {
FlatQuadParticleRenderer(int n, float r) {
super(n, r);
}
@Override
public void render(Graphics2D g2d, int id, float[] x, float[] y, float[] vx, float[] vy) {
if (id > 2 && (id % 3) == 0) {
g2d.setColor(colors[id % colors.length]);
g2d.fill(new QuadCurve2D.Float(x[id-3], y[id-3], x[id-2], y[id-2], x[id-1], y[id-1]));
}
}
}
static class PerfMeter {
private String name;
private int frame = 0;
private JPanel panel;
private long time;
private double execTime = 0;
private Color expColor = Color.RED;
AtomicBoolean waiting = new AtomicBoolean(false);
private double fps;
PerfMeter(String name) {
this.name = name;
}
PerfMeter exec(final Renderable renderable) throws Exception {
final CountDownLatch latch = new CountDownLatch(COUNT);
final CountDownLatch latchFrame = new CountDownLatch(1);
final long endTime = System.currentTimeMillis() + MAX_MEASURE_TIME;
final JFrame f = new JFrame();
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
latchFrame.countDown();
}
});
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
panel = new JPanel()
{
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
time = System.nanoTime();
Graphics2D g2d = (Graphics2D) g.create();
renderable.setup(g2d);
renderable.render(g2d);
g2d.setColor(expColor);
g.fillRect(0, 0, BW, BH);
}
};
panel.setPreferredSize(new Dimension((int)(WIDTH + BW), (int)(HEIGHT + BH)));
panel.setBackground(Color.BLACK);
f.add(panel);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.pack();
f.setVisible(true);
}
});
Robot robot = new Robot();
Timer timer = new Timer(DELAY, e -> {
if (waiting.compareAndSet(false, true)) {
Color c = robot.getPixelColor(
panel.getTopLevelAncestor().getX() + panel.getTopLevelAncestor().getInsets().left + BW / 2,
panel.getTopLevelAncestor().getY() + panel.getTopLevelAncestor().getInsets().top + BW / 2);
if (isAlmostEqual(c, Color.BLUE)) {
expColor = Color.RED;
} else {
expColor = Color.BLUE;
}
renderable.update();
panel.getParent().repaint();
} else {
while (!isAlmostEqual(
robot.getPixelColor(
panel.getTopLevelAncestor().getX() + panel.getTopLevelAncestor().getInsets().left + BW/2,
panel.getTopLevelAncestor().getY() + panel.getTopLevelAncestor().getInsets().top + BH/2),
expColor))
{
try {
Thread.sleep(RESOLUTION);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
time = System.nanoTime() - time;
execTime += time;
frame++;
waiting.set(false);
}
if (System.currentTimeMillis() < endTime) {
latch.countDown();
} else {
while(latch.getCount() > 0) latch.countDown();
}
});
timer.start();
latch.await();
SwingUtilities.invokeAndWait(() -> {
timer.stop();
f.setVisible(false);
f.dispose();
});
latchFrame.await();
if (execTime != 0 && frame != 0) {
fps = 1e9 / (execTime / frame);
} else {
fps = 0;
}
return this;
}
private void report() {
System.err.println(name + " : " + String.format("%.2f FPS", fps));
}
private boolean isAlmostEqual(Color c1, Color c2) {
return Math.abs(c1.getRed() - c2.getRed()) < COLOR_TOLERANCE ||
Math.abs(c1.getGreen() - c2.getGreen()) < COLOR_TOLERANCE ||
Math.abs(c1.getBlue() - c2.getBlue()) < COLOR_TOLERANCE;
}
}
private static final Particles balls = new Particles(N, R, BW, BH, WIDTH, HEIGHT);
private static final ParticleRenderer flatRenderer = new FlatParticleRenderer(N, R);
private static final ParticleRenderer flatOvalRotRenderer = new FlatOvalRotParticleRenderer(N, R);
private static final ParticleRenderer flatBoxRenderer = new FlatBoxParticleRenderer(N, R);
private static final ParticleRenderer flatBoxRotRenderer = new FlatBoxRotParticleRenderer(N, R);
private static final ParticleRenderer linGradOvalRotRenderer = new LinGradOvalRotParticleRenderer(N, R);
private static final ParticleRenderer wiredRenderer = new WiredParticleRenderer(N, R);
private static final ParticleRenderer wiredBoxRenderer = new WiredBoxParticleRenderer(N, R);
private static final ParticleRenderer segRenderer = new SegParticleRenderer(N, R);
private static final ParticleRenderer flatQuadRenderer = new FlatQuadParticleRenderer(N, R);
private static final ParticleRenderer wiredQuadRenderer = new WiredQuadParticleRenderer(N, R);
private static final ParticleRenderer imgRenderer = new ImgParticleRenderer(N, R);
private static final ParticleRenderer textRenderer = new TextParticleRenderer(N, R);
private static final ParticleRenderer largeTextRenderer = new LargeTextParticleRenderer(N, R);
private static final ParticleRenderer whiteTextRenderer = new WhiteTextParticleRenderer(R);
private static final Configurable AA = (Graphics2D g2d) ->
g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
private static final Configurable TextLCD = (Graphics2D g2d) ->
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB);
private static final Configurable TextAA = (Graphics2D g2d) ->
g2d.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
public void testFlatBubbles() throws Exception {
(new PerfMeter("FlatOval")).exec(createPR(flatRenderer)).report();
}
public void testFlatBubblesAA() throws Exception {
(new PerfMeter("FlatOvalAA")).exec(createPR(flatRenderer).configure(AA)).report();
}
public void testFlatBoxBubbles() throws Exception {
(new PerfMeter("FlatBox")).exec(createPR(flatBoxRenderer)).report();
}
public void testFlatBoxBubblesAA() throws Exception {
(new PerfMeter("FlatBoxAA")).exec(createPR(flatBoxRenderer).configure(AA)).report();
}
public void testImgBubbles() throws Exception {
(new PerfMeter("Image")).exec(createPR(imgRenderer)).report();
}
public void testImgBubblesAA() throws Exception {
(new PerfMeter("ImageAA")).exec(createPR(imgRenderer).configure(AA)).report();
}
public void testFlatBoxRotBubbles() throws Exception {
(new PerfMeter("RotatedBox")).exec(createPR(flatBoxRotRenderer)).report();
}
public void testFlatBoxRotBubblesAA() throws Exception {
(new PerfMeter("RotatedBoxAA")).exec(createPR(flatBoxRotRenderer).configure(AA)).report();
}
public void testFlatOvalRotBubbles() throws Exception {
(new PerfMeter("RotatedOval")).exec(createPR(flatOvalRotRenderer)).report();
}
public void testFlatOvalRotBubblesAA() throws Exception {
(new PerfMeter("RotatedOvalAA")).exec(createPR(flatOvalRotRenderer).configure(AA)).report();
}
public void testLinGradOvalRotBubbles() throws Exception {
(new PerfMeter("LinGradRotatedOval")).exec(createPR(linGradOvalRotRenderer)).report();
}
public void testLinGradOvalRotBubblesAA() throws Exception {
(new PerfMeter("LinGradRotatedOvalAA")).exec(createPR(linGradOvalRotRenderer).configure(AA)).report();
}
public void testWiredBubbles() throws Exception {
(new PerfMeter("WiredBubbles")).exec(createPR(wiredRenderer)).report();
}
public void testWiredBubblesAA() throws Exception {
(new PerfMeter("WiredBubblesAA")).exec(createPR(wiredRenderer).configure(AA)).report();
}
public void testWiredBoxBubbles() throws Exception {
(new PerfMeter("WiredBox")).exec(createPR(wiredBoxRenderer)).report();
}
public void testWiredBoxBubblesAA() throws Exception {
(new PerfMeter("WiredBoxAA")).exec(createPR(wiredBoxRenderer).configure(AA)).report();
}
public void testLines() throws Exception {
(new PerfMeter("Lines")).exec(createPR(segRenderer)).report();
}
public void testLinesAA() throws Exception {
(new PerfMeter("LinesAA")).exec(createPR(segRenderer).configure(AA)).report();
}
public void testFlatQuad() throws Exception {
(new PerfMeter("FlatQuad")).exec(createPR(flatQuadRenderer)).report();
}
public void testFlatQuadAA() throws Exception {
(new PerfMeter("FlatQuadAA")).exec(createPR(flatQuadRenderer).configure(AA)).report();
}
public void testWiredQuad() throws Exception {
(new PerfMeter("WiredQuad")).exec(createPR(wiredQuadRenderer)).report();
}
public void testWiredQuadAA() throws Exception {
(new PerfMeter("WiredQuadAA")).exec(createPR(wiredQuadRenderer).configure(AA)).report();
}
public void testTextBubblesNoAA() throws Exception {
(new PerfMeter("TextNoAA")).exec(createPR(textRenderer)).report();
}
public void testTextBubblesLCD() throws Exception {
(new PerfMeter("TextLCD")).exec(createPR(textRenderer).configure(TextLCD)).report();
}
public void testTextBubblesGray() throws Exception {
(new PerfMeter("TextGray")).exec(createPR(textRenderer).configure(TextAA)).report();
}
public void testLargeTextBubblesNoAA() throws Exception {
(new PerfMeter("LargeTextNoAA")).exec(createPR(largeTextRenderer)).report();
}
public void testLargeTextBubblesLCD() throws Exception {
(new PerfMeter("LargeTextLCD")).exec(createPR(largeTextRenderer).configure(TextLCD)).report();
}
public void testLargeTextBubblesGray() throws Exception {
(new PerfMeter("LargeTextGray")).exec(createPR(largeTextRenderer).configure(TextAA)).report();
}
public void testWhiteTextBubblesNoAA() throws Exception {
(new PerfMeter("WhiteTextNoAA")).exec(createPR(whiteTextRenderer)).report();
}
public void testWhiteTextBubblesLCD() throws Exception {
(new PerfMeter("WhiteTextLCD")).exec(createPR(whiteTextRenderer).configure(TextLCD)).report();
}
public void testWhiteTextBubblesGray() throws Exception {
(new PerfMeter("WhiteTextGray")).exec(createPR(whiteTextRenderer).configure(TextAA)).report();
}
public static void main(String[] args)
throws InvocationTargetException, IllegalAccessException, NoSuchMethodException
{
RenderPerfTest test = new RenderPerfTest();
if (args.length > 0) {
for (String testCase : args) {
Method m = RenderPerfTest.class.getDeclaredMethod(testCase);
m.invoke(test);
}
} else {
Method[] methods = RenderPerfTest.class.getDeclaredMethods();
for (Method m : methods) {
if (m.getName().startsWith("test") && !ignoredTests.contains(m.getName())) {
m.invoke(test);
}
}
}
}
}

View File

@@ -41,6 +41,7 @@ public class MacOSFlags {
private static boolean oglEnabled;
private static boolean oglVerbose;
private static boolean metalEnabled;
private static boolean metalDisplaySyncEnabled;
private static boolean metalVerbose;
private enum PropertyState {ENABLED, DISABLED, UNSPECIFIED}
@@ -115,6 +116,9 @@ public class MacOSFlags {
metalEnabled = false;
}
metalDisplaySyncEnabled = metalEnabled &&
!"false".equals(System.getProperty("sun.java2d.metal.displaySync"));
oglVerbose = isBooleanPropTrueVerbose("sun.java2d.opengl");
metalVerbose = isBooleanPropTrueVerbose("sun.java2d.metal");
@@ -163,6 +167,10 @@ public class MacOSFlags {
return oglVerbose;
}
public static boolean isMetalDisplaySyncEnabled() {
return metalDisplaySyncEnabled;
}
public static String getRenderPipelineName() {
return metalEnabled? "Metal" : oglEnabled ? "OpenGL" : "Unknown";
}

View File

@@ -307,6 +307,11 @@ public final class MTLGraphicsConfig extends CGraphicsConfig
}
}
@Override
public void flush(LWComponentPeer<?, ?> peer) {
MTLSurfaceData.flushBuffer(peer.getPlatformWindow().getLayerPtr());
}
private static class MTLBufferCaps extends BufferCapabilities {
public MTLBufferCaps(boolean dblBuf) {
super(imageCaps, imageCaps,

View File

@@ -53,6 +53,7 @@ import java.awt.image.Raster;
import static sun.java2d.pipe.BufferedOpCodes.DISPOSE_SURFACE;
import static sun.java2d.pipe.BufferedOpCodes.FLUSH_SURFACE;
import static sun.java2d.pipe.BufferedOpCodes.FLUSH_BUFFER;
import static sun.java2d.pipe.hw.ContextCapabilities.CAPS_MULTITEXTURE;
import static sun.java2d.pipe.hw.ContextCapabilities.CAPS_PS30;
@@ -640,4 +641,18 @@ public abstract class MTLSurfaceData extends SurfaceData
rq.unlock();
}
}
static void flushBuffer(long layer) {
MTLRenderQueue rq = MTLRenderQueue.getInstance();
rq.lock();
try {
RenderBuffer buf = rq.getBuffer();
rq.ensureCapacityAndAlignment(12, 4);
buf.putInt(FLUSH_BUFFER);
buf.putLong(layer);
rq.flushNow();
} finally {
rq.unlock();
}
}
}

View File

@@ -347,6 +347,11 @@ public final class CGLGraphicsConfig extends CGraphicsConfig
}
}
@Override
public void flush(LWComponentPeer<?, ?> peer) {
}
private static class CGLBufferCaps extends BufferCapabilities {
public CGLBufferCaps(boolean dblBuf) {
super(imageCaps, imageCaps,

View File

@@ -74,6 +74,7 @@ import sun.awt.RepaintArea;
import sun.awt.SunToolkit;
import sun.awt.event.IgnorePaintEvent;
import sun.awt.image.SunVolatileImage;
import sun.java2d.MacOSFlags;
import sun.java2d.SunGraphics2D;
import sun.java2d.metal.MTLRenderQueue;
import sun.java2d.opengl.OGLRenderQueue;
@@ -1301,6 +1302,10 @@ public abstract class LWComponentPeer<T extends Component, D extends JComponent>
// if (!isLayouting && !paintPending) {
if (!isLayouting()) {
targetPaintArea.paint(getTarget(), shouldClearRectBeforePaint());
if (MacOSFlags.isMetalEnabled() && !MacOSFlags.isMetalDisplaySyncEnabled()) {
SunToolkit.executeOnEventHandlerThread(getTarget(),
() -> getWindowPeerOrSelf().updateWindow());
}
}
}

View File

@@ -89,6 +89,11 @@ public interface LWGraphicsConfig {
void flip(LWComponentPeer<?, ?> peer, Image backBuffer, int x1, int y1,
int x2, int y2, BufferCapabilities.FlipContents flipAction);
/**
* Performs the native flush operation for the given peer
*/
void flush(LWComponentPeer<?, ?> peer);
/**
* Creates a new hidden-acceleration image of the given width and height
* that is associated with the target Component.

View File

@@ -35,6 +35,7 @@ import java.security.*;
import java.util.*;
import sun.awt.*;
import sun.java2d.MacOSFlags;
import sun.print.*;
import sun.awt.util.ThreadGroupUtils;
@@ -364,6 +365,11 @@ public abstract class LWToolkit extends SunToolkit implements Runnable {
return true;
}
@Override
public boolean needUpdateWindowAfterPaint() {
return MacOSFlags.isMetalEnabled() && !MacOSFlags.isMetalDisplaySyncEnabled();
}
@Override
public final KeyboardFocusManagerPeer getKeyboardFocusManagerPeer() {
return LWKeyboardFocusManagerPeer.getInstance();

View File

@@ -508,6 +508,7 @@ public class LWWindowPeer
@Override
public void updateWindow() {
getLWGC().flush(this);
}
public final boolean isTextured() {
@@ -1212,6 +1213,9 @@ public class LWWindowPeer
}
}
flushOnscreenGraphics();
if (((LWToolkit) Toolkit.getDefaultToolkit()).needUpdateWindowAfterPaint()) {
updateWindow();
}
}
private void blitSurfaceData(final SurfaceData src, final SurfaceData dst) {

View File

@@ -42,7 +42,7 @@
// Amount of blit operations per update to make sure that everything is
// rendered into the window drawable. It does not slow things down as we
// use separate command queue for blitting.
#define REDRAW_INC 2
#define REDRAW_COUNT 1
extern jboolean MTLSD_InitMTLWindow(JNIEnv *env, MTLSDOps *mtlsdo);
extern BOOL isDisplaySyncEnabled();
@@ -587,7 +587,7 @@ CVReturn mtlDisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeStamp*
- (void)startRedraw:(MTLLayer*)layer {
AWT_ASSERT_APPKIT_THREAD;
layer.redrawCount += REDRAW_INC;
layer.redrawCount = REDRAW_COUNT;
J2dTraceLn2(J2D_TRACE_VERBOSE, "MTLContext_startRedraw: ctx=%p layer=%p", self, layer);
_displayLinkCount = KEEP_ALIVE_COUNT;
[_layers addObject:layer];

View File

@@ -35,6 +35,7 @@
@property (nonatomic) jobject javaLayer;
@property (readwrite, assign) MTLContext* ctx;
@property (readwrite, assign) id<MTLTexture>* buffer;
@property (readwrite, assign) id<MTLTexture>* outBuffer;
@property (readwrite, atomic) int nextDrawableCount;
@property (readwrite, assign) int topInset;
@property (readwrite, assign) int leftInset;
@@ -53,7 +54,9 @@
- (void) blitCallback;
- (void) display;
- (void) startRedraw;
- (void) startRedrawIfNeeded;
- (void) stopRedraw:(BOOL)force;
- (void) flushBuffer;
- (void) commitCommandBuffer:(MTLContext*)mtlc wait:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay;
@end

View File

@@ -32,6 +32,9 @@
#import "MTLSurfaceData.h"
#import "JNIUtilities.h"
#define MAX_DRAWABLE 3
#define LAST_DRAWABLE (MAX_DRAWABLE - 1)
const NSTimeInterval DF_BLIT_FRAME_TIME=1.0/120.0;
BOOL isDisplaySyncEnabled() {
@@ -149,6 +152,10 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
if (@available(macOS 10.13, *)) {
self.displaySyncEnabled = isDisplaySyncEnabled();
}
if (@available(macOS 10.13.2, *)) {
self.maximumDrawableCount = MAX_DRAWABLE;
}
self.presentsWithTransaction = NO;
self.avgBlitFrameTime = DF_BLIT_FRAME_TIME;
return self;
}
@@ -164,12 +171,14 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
return;
}
if (self.nextDrawableCount != 0) {
if (self.nextDrawableCount >= LAST_DRAWABLE) {
if (!isDisplaySyncEnabled()) {
[self performSelectorOnMainThread:@selector(setNeedsDisplay) withObject:nil waitUntilDone:NO];
}
return;
}
// Perform blit:
[self stopRedraw:NO];
@autoreleasepool {
@@ -198,13 +207,14 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
J2dTraceLn(J2D_TRACE_VERBOSE, "MTLLayer.blitTexture: nextDrawable is null)");
return;
}
// increment used drawables:
self.nextDrawableCount++;
id<MTLCommandBuffer> renderBuffer = [self.ctx createCommandBuffer];
id <MTLBlitCommandEncoder> blitEncoder = [commandBuf blitCommandEncoder];
[blitEncoder
copyFromTexture:(*self.buffer) sourceSlice:0 sourceLevel:0
copyFromTexture:(isDisplaySyncEnabled()) ? (*self.buffer) : (*self.outBuffer)
sourceSlice:0 sourceLevel:0
sourceOrigin:MTLOriginMake(src_x, src_y, 0)
sourceSize:MTLSizeMake(src_w, src_h, 1)
toTexture:mtlDrawable.texture destinationSlice:0 destinationLevel:0
@@ -222,15 +232,18 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
}
[self retain];
[commandBuf addCompletedHandler:^(id <MTLCommandBuffer> commandBuf) {
[commandBuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) {
// free drawable:
self.nextDrawableCount--;
if (@available(macOS 10.15.4, *)) {
if (!isDisplaySyncEnabled()) {
const NSTimeInterval gpuTime = commandBuf.GPUEndTime - commandBuf.GPUStartTime;
// Exponential smoothing on elapsed time:
const NSTimeInterval gpuTime = commandbuf.GPUEndTime - commandbuf.GPUStartTime;
const NSTimeInterval a = 0.25;
self.avgBlitFrameTime = gpuTime * a + self.avgBlitFrameTime * (1.0 - a);
}
}
self.nextDrawableCount--;
[self release];
}];
@@ -270,6 +283,17 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
[super display];
}
- (void)startRedrawIfNeeded {
AWT_ASSERT_APPKIT_THREAD;
if (isDisplaySyncEnabled()) {
if (self.redrawCount == 0) {
[self.ctx startRedraw:self];
}
// Redraw now:
[self setNeedsDisplay];
}
}
- (void)startRedraw {
if (isDisplaySyncEnabled()) {
if (self.ctx != nil) {
@@ -281,39 +305,65 @@ BOOL MTLLayer_isExtraRedrawEnabled() {
}
- (void)stopRedraw:(BOOL)force {
if (self.ctx != nil && isDisplaySyncEnabled()) {
if (isDisplaySyncEnabled()) {
if (force) {
self.redrawCount = 0;
}
[self.ctx performSelectorOnMainThread:@selector(stopRedraw:) withObject:self waitUntilDone:NO];
if (self.ctx != nil) {
[self.ctx performSelectorOnMainThread:@selector(stopRedraw:) withObject:self waitUntilDone:NO];
}
}
}
- (void) flushBuffer {
if (self.ctx == nil || self.buffer == NULL) {
return;
}
// Copy the rendered texture to the output buffer (blit later) using the render command queue:
id <MTLCommandBuffer> commandbuf = [self.ctx createCommandBuffer];
id <MTLBlitCommandEncoder> blitEncoder = [commandbuf blitCommandEncoder];
[blitEncoder
copyFromTexture:(*self.buffer) sourceSlice:0 sourceLevel:0
sourceOrigin:MTLOriginMake(0, 0, 0)
sourceSize:MTLSizeMake((*self.buffer).width, (*self.buffer).height, 1)
toTexture:(*self.outBuffer) destinationSlice:0 destinationLevel:0
destinationOrigin:MTLOriginMake(0, 0, 0)];
[blitEncoder endEncoding];
[self retain];
[commandbuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) {
[self startRedraw];
[self release];
}];
[commandbuf commit];
}
- (void)commitCommandBuffer:(MTLContext*)mtlc wait:(BOOL)waitUntilCompleted display:(BOOL)updateDisplay {
MTLCommandBufferWrapper * cbwrapper =[mtlc pullCommandBufferWrapper];
MTLCommandBufferWrapper * cbwrapper = [mtlc pullCommandBufferWrapper];
if (cbwrapper != nil) {
id <MTLCommandBuffer> commandbuf =[cbwrapper getCommandBuffer];
if (isDisplaySyncEnabled() || !updateDisplay) {
[commandbuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) {
[cbwrapper release];
}];
} else {
[self retain];
[commandbuf addCompletedHandler:^(id <MTLCommandBuffer> commandbuf) {
[cbwrapper release];
[self startRedraw];
[self release];
}];
}
[commandbuf commit];
if (isDisplaySyncEnabled()) {
[self startRedraw];
}
id <MTLCommandBuffer> commandbuf = [cbwrapper getCommandBuffer];
if (waitUntilCompleted) {
[self retain];
[commandbuf addCompletedHandler:^(id <MTLCommandBuffer> commandBuf) {
[cbwrapper release];
if (updateDisplay && isDisplaySyncEnabled()) {
// Ensure layer will be redrawn asap to display new content:
[self performSelectorOnMainThread:@selector(startRedrawIfNeeded) withObject:nil waitUntilDone:NO];
}
[self release];
}];
[commandbuf commit];
if (updateDisplay) {
if (isDisplaySyncEnabled()) {
[self startRedraw];
} else {
[self flushBuffer];
}
}
if (waitUntilCompleted && isDisplaySyncEnabled()) {
[commandbuf waitUntilCompleted];
}
}
} else if (updateDisplay) {
[self startRedraw];
}
@@ -356,6 +406,7 @@ Java_sun_java2d_metal_MTLLayer_validate
if (surfaceData != NULL) {
BMTLSDOps *bmtlsdo = (BMTLSDOps*) SurfaceData_GetOps(env, surfaceData);
layer.buffer = &bmtlsdo->pTexture;
layer.outBuffer = &bmtlsdo->pOutTexture;
layer.ctx = ((MTLSDOps *)bmtlsdo->privOps)->configInfo->context;
layer.device = layer.ctx.device;
layer.pixelFormat = MTLPixelFormatBGRA8Unorm;
@@ -371,7 +422,11 @@ Java_sun_java2d_metal_MTLLayer_validate
layer.drawableSize =
CGSizeMake((*layer.buffer).width,
(*layer.buffer).height);
[layer startRedraw];
if (isDisplaySyncEnabled()) {
[layer startRedraw];
} else {
[layer flushBuffer];
}
} else {
layer.ctx = NULL;
[layer stopRedraw:YES];

View File

@@ -865,6 +865,20 @@ Java_sun_java2d_metal_MTLRenderQueue_flushBuffer
break;
}
case sun_java2d_pipe_BufferedOpCodes_FLUSH_BUFFER:
{
CHECK_PREVIOUS_OP(MTL_OP_OTHER);
jlong pLayerPtr = NEXT_LONG(b);
MTLLayer* layer = (MTLLayer*)pLayerPtr;
if (layer != nil) {
[layer flushBuffer];
} else {
J2dRlsTraceLn(J2D_TRACE_ERROR,
"MTLRenderQueue_flushBuffer(FLUSH_BUFFER): MTLLayer is nil");
}
break;
}
default:
J2dRlsTraceLn1(J2D_TRACE_ERROR,
"MTLRenderQueue_flushBuffer: invalid opcode=%d", opcode);

View File

@@ -32,6 +32,7 @@
#import "MTLSurfaceData.h"
#include "jlong.h"
extern BOOL isDisplaySyncEnabled();
jboolean MTLSD_InitMTLWindow(JNIEnv *env, BMTLSDOps *bmtlsdo);
void MTLSD_SetNativeDimensions(JNIEnv *env, BMTLSDOps *bmtlsdo, jint w, jint h);
@@ -76,7 +77,11 @@ static jboolean MTLSurfaceData_initTexture(BMTLSDOps *bmtlsdo, jboolean isOpaque
textureDescriptor.usage = MTLTextureUsageUnknown;
textureDescriptor.storageMode = MTLStorageModePrivate;
bmtlsdo->pTexture = [ctx.device newTextureWithDescriptor: textureDescriptor];
if (sfType == MTLSD_FLIP_BACKBUFFER && !isDisplaySyncEnabled()) {
bmtlsdo->pOutTexture = [ctx.device newTextureWithDescriptor: textureDescriptor];
} else {
bmtlsdo->pOutTexture = NULL;
}
MTLTextureDescriptor *stencilDataDescriptor =
[MTLTextureDescriptor texture2DDescriptorWithPixelFormat:MTLPixelFormatR8Uint width:width height:height mipmapped:NO];
stencilDataDescriptor.usage = MTLTextureUsageRenderTarget | MTLTextureUsageShaderRead;
@@ -186,6 +191,10 @@ MTLSD_Delete(JNIEnv *env, BMTLSDOps *bmtlsdo)
|| bmtlsdo->drawableType == MTLSD_FLIP_BACKBUFFER
) {
[(NSObject *)bmtlsdo->pTexture release];
if (bmtlsdo->pOutTexture != NULL) {
[(NSObject *)bmtlsdo->pOutTexture release];
bmtlsdo->pOutTexture = NULL;
}
[(NSObject *)bmtlsdo->pStencilTexture release];
[(NSObject *)bmtlsdo->pStencilData release];
bmtlsdo->pTexture = NULL;

View File

@@ -76,6 +76,7 @@ typedef struct {
jint width;
jint height;
void* pTexture;
void* pOutTexture;
void* pStencilData; // stencil data to be rendered to this buffer
void* pStencilTexture; // stencil texture byte buffer stencil mask used in main rendering
} BMTLSDOps;

View File

@@ -4460,20 +4460,10 @@ public class Window extends Container implements Accessible {
static {
AWTAccessor.setWindowAccessor(new AWTAccessor.WindowAccessor() {
private static final boolean isWLToolkit = Toolkit.getDefaultToolkit()
.getClass().getName().equals("sun.awt.wl.WLToolkit");
public void updateWindow(Window window) {
window.updateWindow();
}
public boolean needUpdateWindowAfterPaint(Window window) {
return window != null && isWLToolkit;
}
public boolean needUpdateWindow(Window window) {
return window != null && (isWLToolkit || !window.isOpaque());
}
public void setPopupParent(Window window, Component component) {
window.popupParent = component;
}

View File

@@ -793,27 +793,25 @@ public class RepaintManager
}
private void updateWindows(Map<Component,Rectangle> dirtyComponents) {
Toolkit toolkit = Toolkit.getDefaultToolkit();
if (!(toolkit instanceof SunToolkit &&
((SunToolkit)toolkit).needUpdateWindow()))
if (Toolkit.getDefaultToolkit() instanceof SunToolkit sunToolkit &&
sunToolkit.needUpdateWindow())
{
return;
}
Set<Window> windows = new HashSet<Window>();
Set<Component> dirtyComps = dirtyComponents.keySet();
for (Component dirty : dirtyComps) {
Window window = dirty instanceof Window ?
(Window)dirty :
SwingUtilities.getWindowAncestor(dirty);
if (AWTAccessor.getWindowAccessor().needUpdateWindow(window))
{
windows.add(window);
Set<Window> windows = new HashSet<Window>();
Set<Component> dirtyComps = dirtyComponents.keySet();
for (Component dirty : dirtyComps) {
Window window = dirty instanceof Window ?
(Window) dirty :
SwingUtilities.getWindowAncestor(dirty);
if (window != null &&
(!window.isOpaque() || sunToolkit.needUpdateWindowAfterPaint()))
{
windows.add(window);
}
}
}
for (Window window : windows) {
AWTAccessor.getWindowAccessor().updateWindow(window);
for (Window window : windows) {
AWTAccessor.getWindowAccessor().updateWindow(window);
}
}
}
@@ -1347,9 +1345,12 @@ public class RepaintManager
g.setClip(x, y, w, h);
paintingComponent.paintToOffscreen(g, x, y, w, h, x + w, y + h);
}
final Window window = SwingUtilities.getWindowAncestor(paintingComponent);
if (AWTAccessor.getWindowAccessor().needUpdateWindowAfterPaint(window)) {
AWTAccessor.getWindowAccessor().updateWindow(window);
if (Toolkit.getDefaultToolkit() instanceof SunToolkit tk) {
final Window window = SwingUtilities.getWindowAncestor(paintingComponent);
if (window != null && tk.needUpdateWindowAfterPaint()) {
AWTAccessor.getWindowAccessor().updateWindow(window);
}
}
}

View File

@@ -306,10 +306,6 @@ public final class AWTAccessor {
*/
void updateWindow(Window window);
boolean needUpdateWindowAfterPaint(Window window);
boolean needUpdateWindow(Window window);
void setPopupParent(Window window, Component component);
Component getPopupParent(Window window);

View File

@@ -2053,6 +2053,9 @@ public abstract class SunToolkit extends Toolkit
return false;
}
public boolean needUpdateWindowAfterPaint() {
return false;
}
/**
* Descendants of the SunToolkit should override and put their own logic here.
*/

View File

@@ -77,6 +77,7 @@ public final class BufferedOpCodes {
// multibuffering ops
@Native public static final int SWAP_BUFFERS = 80;
@Native public static final int FLUSH_BUFFER = 81;
// special no-op op code (mainly used for achieving 8-byte alignment)
@Native public static final int NOOP = 90;

View File

@@ -1,4 +1,6 @@
Copyright (c) 2016 The Inter Project Authors (https://github.com/rsms/inter)
Copyright (c) 2016-2020 The Inter Project Authors.
"Inter" is trademark of Rasmus Andersson.
https://github.com/rsms/inter
This Font Software is licensed under the SIL Open Font License, Version 1.1.
This license is copied below, and is also available with a FAQ at:

View File

@@ -65,7 +65,7 @@ Java_java_awt_SplashScreen__1update(JNIEnv * env, jclass thisClass,
/* we need a copy anyway, so we'll be using GetIntArrayRegion */
(*env)->GetIntArrayRegion(env, data, 0, dataSize,
(jint *) splash->overlayData);
initFormat(&splash->overlayFormat, 0xFF0000, 0xFF00, 0xFF, 0xFF000000);
initFormat(&splash->overlayFormat, QUAD_RED_MASK, QUAD_GREEN_MASK, QUAD_BLUE_MASK, QUAD_ALPHA_MASK);
initRect(&splash->overlayRect, x, y, width, height, 1,
stride * sizeof(rgbquad_t), splash->overlayData,
&splash->overlayFormat);

View File

@@ -77,12 +77,6 @@ typedef struct SplashImage
#define SPLASH_COLOR_MAP_SIZE 0x100
typedef struct ScreenInfo {
int width;
int height;
int scale;
} ScreenInfo;
typedef struct Splash
{
ImageFormat screenFormat; /* must be preset before image decoding */
@@ -94,6 +88,7 @@ typedef struct Splash
int width; /* in pixels */
int height; /* in pixels */
int frameCount;
bool initialized;
SplashImage *frames; /* dynamically allocated array of frame descriptors */
unsigned time; /* in msec, origin is not important */
rgbquad_t *overlayData; /* overlay image data, always rgbquads */
@@ -101,7 +96,6 @@ typedef struct Splash
ImageFormat overlayFormat;
void *screenData;
int screenStride; /* stored scanline length in bytes */
ScreenInfo screenInfo;
int currentFrame; // currentFrame==-1 means image is not loaded
int loopCount;
int x, y;
@@ -129,12 +123,11 @@ typedef struct Splash
XWMHints* wmHints;
#elif defined(WITH_WL)
int controlpipe[2];
Buffer main_buffer;
Buffer *main_buffer;
Buffer *buffers;
wayland_state *state;
wayland_state *wl_state;
int window_width;
int window_height;
int native_scale;
pthread_mutex_t lock;
#elif defined(WITH_MACOSX)
pthread_mutex_t lock;

View File

@@ -874,33 +874,28 @@ abstract class XDecoratedPeer extends XWindowPeer {
updateChildrenSizes();
WindowLocation newLocation = getNewLocation(xe);
Dimension newDimension = new Dimension(xe.get_width(), xe.get_height());
WindowLocation eventLocation = getNewLocation(xe);
Dimension eventDimension = new Dimension(xe.get_width(), xe.get_height());
boolean xinerama = XToolkit.localEnv.runningXinerama();
SunToolkit.executeOnEventHandlerThread(target, () -> {
Point newUserLocation = newLocation.getUserLocation();
WindowDimensions newDimensions = new WindowDimensions(newUserLocation,
new Dimension(scaleDown(newDimension.width), scaleDown(newDimension.height)), getRealInsets(), true);
Point oldLocation = getLocation();
Dimension newSize = xinerama
? checkIfOnNewScreen(new Rectangle(eventLocation.getDeviceLocation(), eventDimension))
: new Dimension(scaleDown(eventDimension.width), scaleDown(eventDimension.height));
Point newUserLocation = eventLocation.getUserLocation();
WindowDimensions newDimensions = new WindowDimensions(newUserLocation, newSize, getRealInsets(), true);
if (insLog.isLoggable(PlatformLogger.Level.FINER)) {
insLog.finer("Insets are {0}, new dimensions {1}",
getRealInsets(), newDimensions);
}
Point oldLocation = getLocation();
dimensions = newDimensions;
if (!newUserLocation.equals(oldLocation)) {
handleMoved(newDimensions);
}
reconfigureContentWindow(newDimensions);
updateChildrenSizes();
repositionSecurityWarning();
if (xinerama) {
checkIfOnNewScreen(new Rectangle(newLocation.getDeviceLocation(), newDimension));
}
});
}
@@ -1444,20 +1439,23 @@ abstract class XDecoratedPeer extends XWindowPeer {
if (r.width <= ins.left + ins.right || r.height <= ins.top + ins.bottom) {
return;
}
if (syncSizeOnly && dimensions != null) {
dimensions.setSize(r.width, r.height);
dimensions.setInsets(ins);
boolean isMaximized = target instanceof Frame f && (f.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0;
// When a window is maximized, affirming its size through an explicit request to the X server
// may make the window fullscreen, which has undesirable consequences. Also, when a window
// already has the maximized attributes, it is already properly sized, so no need to
// resize explicitly.
if (!isMaximized) {
xSetSize(r.width, r.height);
if (XWindowPeer.RESIZE_WITH_SCALE) {
if (syncSizeOnly && dimensions != null) {
dimensions.setSize(r.width, r.height);
dimensions.setInsets(ins);
boolean isMaximized = target instanceof Frame f && (f.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0;
// When a window is maximized, affirming its size through an explicit request to the X server
// may make the window fullscreen, which has undesirable consequences. Also, when a window
// already has the maximized attributes, it is already properly sized, so no need to
// resize explicitly.
if (!isMaximized) {
xSetSize(r.width, r.height);
}
} else {
dimensions = new WindowDimensions(r, ins, false);
xSetBounds(r.x, r.y, r.width, r.height);
}
} else {
dimensions = new WindowDimensions(r, ins, false);
xSetBounds(r.x, r.y, r.width, r.height);
}
reconfigureContentWindow(dimensions);
doValidateSurface();

View File

@@ -142,21 +142,24 @@ public class XEmbeddedFramePeer extends XFramePeer {
xembedLog.fine(xe.toString());
}
WindowLocation newLocation = getNewLocation(xe);
Dimension newDimension = new Dimension(xe.get_width(), xe.get_height());
WindowLocation eventLocation = getNewLocation(xe);
Dimension eventDimension = new Dimension(xe.get_width(), xe.get_height());
boolean xinerama = XToolkit.localEnv.runningXinerama();
// fix for 5063031
// if we use super.handleConfigureNotifyEvent() we would get wrong
// size and position because embedded frame really is NOT a decorated one
SunToolkit.executeOnEventHandlerThread(target, () -> {
Point newUserLocation = newLocation.getUserLocation();
Point newUserLocation = eventLocation.getUserLocation();
Rectangle oldBounds = getBounds();
Dimension newSize = xinerama
? checkIfOnNewScreen(new Rectangle(eventLocation.getDeviceLocation(), eventDimension))
: new Dimension(scaleDown(eventDimension.width), scaleDown(eventDimension.height));
synchronized (getStateLock()) {
x = newUserLocation.x;
y = newUserLocation.y;
width = scaleDown(newDimension.width);
height = scaleDown(newDimension.height);
width = newSize.width;
height = newSize.height;
dimensions.setClientSize(width, height);
dimensions.setLocation(x, y);
@@ -166,10 +169,6 @@ public class XEmbeddedFramePeer extends XFramePeer {
handleMoved(dimensions);
}
reconfigureContentWindow(dimensions);
if (xinerama) {
checkIfOnNewScreen(new Rectangle(newLocation.getDeviceLocation(), newDimension));
}
});
}

View File

@@ -67,6 +67,8 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
= "true".equals(GetPropertyAction.privilegedGetProperty("transients.desktop.check", "true"));
static final boolean FULL_MODAL_TRANSIENTS_CHAIN
= "true".equals(GetPropertyAction.privilegedGetProperty("full.modal.transients.chain"));
static final boolean RESIZE_WITH_SCALE
= "true".equals(GetPropertyAction.privilegedGetProperty("resize.with.scale", "false"));
// should be synchronized on awtLock
private static Set<XWindowPeer> windows = new HashSet<XWindowPeer>();
@@ -659,8 +661,9 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
* called to check if we've been moved onto a different screen
* Based on checkNewXineramaScreen() in awt_GraphicsEnv.c
* newBounds are specified in device space.
* Returns the corrected dimension of this window.
*/
public boolean checkIfOnNewScreen(Rectangle newBounds) {
public Dimension checkIfOnNewScreen(Rectangle newBounds) {
if (log.isLoggable(PlatformLogger.Level.FINEST)) {
log.finest("XWindowPeer: Check if we've been moved to a new screen since we're running in Xinerama mode");
}
@@ -669,7 +672,7 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
int curScreenNum = ((X11GraphicsDevice)getGraphicsConfiguration().getDevice()).getScreen();
int newScreenNum = curScreenNum;
GraphicsDevice[] gds = XToolkit.localEnv.getScreenDevices();
GraphicsConfiguration newGC = null;
GraphicsConfiguration newGC = getGraphicsConfiguration();
for (int i = 0; i < gds.length; i++) {
X11GraphicsDevice device = (X11GraphicsDevice) gds[i];
@@ -689,38 +692,47 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
}
}
}
// Ensure that after window will be moved to another monitor and (probably)
// resized as a result, majority of its area will stay on the new monitor
if (newScreenNum != curScreenNum) {
X11GraphicsDevice device = (X11GraphicsDevice) gds[newScreenNum];
Rectangle screenBounds = newGC.getBounds();
// Rescale screen size to native unscaled coordinates
screenBounds.width = device.scaleUp(screenBounds.width);
screenBounds.height = device.scaleUp(screenBounds.height);
// Rescale window to new screen's scale
newBounds.width = newBounds.width * device.getScaleFactor() / graphicsConfig.getScale();
newBounds.height = newBounds.height * device.getScaleFactor() / graphicsConfig.getScale();
Rectangle intersection = screenBounds.intersection(newBounds);
if (intersection.isEmpty() ||
intersection.width * intersection.height <= newBounds.width * newBounds.height / 2) {
newScreenNum = curScreenNum; // Don't move to new screen
Rectangle newScaledBounds = newBounds.getBounds();
if (XWindowPeer.RESIZE_WITH_SCALE) {
// Try to guess that after the window has been moved to another monitor and (probably)
// resized as a result, the majority of its area will still be on that new monitor.
// This is a guess since we cannot predict the result of the resize operation where
// the window manager has the final say.
boolean isMaximized = target instanceof Frame f && (f.getExtendedState() & Frame.MAXIMIZED_BOTH) != 0;
if (newScreenNum != curScreenNum && !isMaximized) {
X11GraphicsDevice device = (X11GraphicsDevice) gds[newScreenNum];
Rectangle screenBounds = newGC.getBounds();
// Rescale screen size to native unscaled coordinates
screenBounds.width = device.scaleUp(screenBounds.width);
screenBounds.height = device.scaleUp(screenBounds.height);
// Rescale window to new screen's scale
newScaledBounds.width = newBounds.width * device.getScaleFactor() / graphicsConfig.getScale();
newScaledBounds.height = newBounds.height * device.getScaleFactor() / graphicsConfig.getScale();
Rectangle intersection = screenBounds.intersection(newScaledBounds);
if (intersection.isEmpty() ||
intersection.width * intersection.height <= newScaledBounds.width * newScaledBounds.height / 2) {
newScreenNum = curScreenNum; // Don't move to the new screen
}
}
}
var device = (X11GraphicsDevice) newGC.getDevice();
Dimension newSize = newScaledBounds.getSize();
newSize.width = device.scaleDown(newSize.width);
newSize.height = device.scaleDown(newSize.height);
if (newScreenNum != curScreenNum) {
if (log.isLoggable(PlatformLogger.Level.FINEST)) {
log.finest("XWindowPeer: Moved to a new screen");
}
var gc = newGC;
var device = (X11GraphicsDevice) gc.getDevice();
var acc = AWTAccessor.getComponentAccessor();
syncSizeOnly = true;
acc.setSize(target, device.scaleDown(newBounds.width), device.scaleDown(newBounds.height));
acc.setGraphicsConfiguration(target, gc);
acc.setSize(target, newSize.width, newSize.height);
acc.setGraphicsConfiguration(target, newGC);
syncSizeOnly = false;
return true;
}
return false;
return newSize;
}
/**
@@ -854,18 +866,20 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
insLog.fine(xe.toString());
}
WindowLocation newLocation = getNewLocation(xe);
Dimension newDimension = new Dimension(xe.get_width(), xe.get_height());
WindowLocation eventLocation = getNewLocation(xe);
Dimension eventDimension = new Dimension(xe.get_width(), xe.get_height());
boolean xinerama = XToolkit.localEnv.runningXinerama();
SunToolkit.executeOnEventHandlerThread(target, () -> {
Point newUserLocation = newLocation.getUserLocation();
Rectangle oldBounds = getBounds();
Dimension newSize = xinerama
? checkIfOnNewScreen(new Rectangle(eventLocation.getDeviceLocation(), eventDimension))
: new Dimension(scaleDown(eventDimension.width), scaleDown(eventDimension.height));;
Point newUserLocation = eventLocation.getUserLocation();
x = newUserLocation.x;
y = newUserLocation.y;
width = scaleDown(newDimension.width);
height = scaleDown(newDimension.height);
width = newSize.width;
height = newSize.height;
if (!getBounds().getSize().equals(oldBounds.getSize())) {
AWTAccessor.getComponentAccessor().setSize(target, width, height);
@@ -876,10 +890,6 @@ class XWindowPeer extends XPanelPeer implements WindowPeer,
postEvent(new ComponentEvent(target, ComponentEvent.COMPONENT_MOVED));
}
repositionSecurityWarning();
if (xinerama) {
checkIfOnNewScreen(new Rectangle(newLocation.getDeviceLocation(), newDimension));
}
});
}

View File

@@ -82,6 +82,7 @@ public class WLComponentPeer implements ComponentPeer {
{"hand"}, // HAND_CURSOR
{"move"}, // MOVE_CURSOR
};
private static final int WHEEL_SCROLL_AMOUNT = 3;
private long nativePtr;
private volatile boolean surfaceAssigned = false;
@@ -381,9 +382,9 @@ public class WLComponentPeer implements ComponentPeer {
* Commits changes accumulated in the underlying SurfaceData object
* to the server for displaying on the screen. The request may not be
* granted immediately as the server may be busy reading data provided
* previously. In the latter case, the commit will happen later when
* the server notifies us (through an event on EDT) that the displaying
* buffer is ready to accept new data.
* previously. In the latter case, the commit will automatically happen
* later when the server notifies us (through an event on EDT) that
* the displaying buffer is ready to accept new data.
*/
public void commitToServer() {
performLocked(() -> {
@@ -391,6 +392,7 @@ public class WLComponentPeer implements ComponentPeer {
surfaceData.flush();
}
});
Toolkit.getDefaultToolkit().sync();
}
public Component getTarget() {
@@ -1068,7 +1070,7 @@ public class WLComponentPeer implements ComponentPeer {
isPopupTrigger,
MouseWheelEvent.WHEEL_UNIT_SCROLL,
1,
e.getAxis0Value());
Integer.signum(e.getAxis0Value()) * WHEEL_SCROLL_AMOUNT);
postMouseEvent(mouseEvent);
}

View File

@@ -151,10 +151,7 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
@SuppressWarnings("removal")
public WLToolkit() {
AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
final String extraButtons = "sun.awt.enableExtraMouseButtons";
areExtraMouseButtonsEnabled =
Boolean.parseBoolean(System.getProperty(extraButtons, "true"));
System.setProperty(extraButtons, String.valueOf(areExtraMouseButtonsEnabled));
initSystemProperties();
return null;
});
@@ -181,10 +178,22 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
}
}
private static void initSystemProperties() {
final String extraButtons = "sun.awt.enableExtraMouseButtons";
areExtraMouseButtonsEnabled =
Boolean.parseBoolean(System.getProperty(extraButtons, "true"));
System.setProperty(extraButtons, String.valueOf(areExtraMouseButtonsEnabled));
}
public static boolean isToolkitThread() {
return Thread.currentThread() == toolkitThread;
}
@Override
public boolean needUpdateWindowAfterPaint() {
return true;
}
@Override
public ButtonPeer createButton(Button target) {
ButtonPeer peer = new WLButtonPeer(target);
@@ -868,9 +877,9 @@ public class WLToolkit extends UNIXToolkit implements Runnable {
@Override
public boolean useBufferPerWindow() {
if (log.isLoggable(PlatformLogger.Level.FINE)) {
log.fine("Not implemented: WLToolkit.useBufferPerWindow()");
}
// TODO: this may depend on the rendering engine used.
// When rendering is performed into memory buffers shared with Wayland,
// there's no sense in having additional buffers in AWT/Swing.
return false;
}

View File

@@ -33,17 +33,12 @@
#include "awt.h"
#include "WLBuffers.h"
#include "WLToolkit.h"
#ifndef HEADLESS
typedef struct WLSurfaceBuffer WLSurfaceBuffer;
extern struct wl_shm_pool *
CreateShmPool(size_t size, const char *name, void **data); // defined in WLToolkit.c
static bool
TrySendDrawBufferToWayland(WLSurfaceBufferManager * manager);
static WLSurfaceBuffer *
SurfaceBufferCreate(WLSurfaceBufferManager * manager);
@@ -53,9 +48,6 @@ SurfaceBufferNotifyReleased(WLSurfaceBufferManager * manager, struct wl_buffer *
static bool
ShowBufferIsAvailable(WLSurfaceBufferManager * manager);
static void
ShowBufferPrepareFreshOneWithPixelsFrom(WLSurfaceBufferManager * manager, WLSurfaceBuffer * lastBuffer);
static void
ShowBufferInvalidateForNewSize(WLSurfaceBufferManager * manager);
@@ -65,14 +57,11 @@ SurfaceBufferDestroy(WLSurfaceBuffer * buffer);
static void
ScheduleFrameCallback(WLSurfaceBufferManager * manager);
static inline void
RegisterFrameLost(const char* reason)
{
if (getenv("J2D_STATS")) {
fprintf(stderr, "WLBuffers: frame lost, reason '%s'\n", reason);
fflush(stderr);
}
}
static void
CopyDrawBufferToShowBuffer(WLSurfaceBufferManager * manager);
static void
SendShowBufferToWayland(WLSurfaceBufferManager * manager);
static inline void
ReportFatalError(const char* file, int line, const char *msg)
@@ -92,6 +81,22 @@ AssertDrawLockIsHeld(WLSurfaceBufferManager* manager, const char * file, int lin
#define MUTEX_LOCK(m) if (pthread_mutex_lock(&(m))) { WL_FATAL_ERROR("Failed to lock mutex"); }
#define MUTEX_UNLOCK(m) if (pthread_mutex_unlock(&(m))) { WL_FATAL_ERROR("Failed to unlock mutex"); }
/**
* The maximum number of buffers that can be simultaneously in use by Wayland.
* When a new frame is ready to be sent to Wayland and the number of buffers
* already sent plus this new buffer exceeds MAX_BUFFERS_IN_USE, that frame is
* skipped. We will wait for a buffer to be released.
* NB: neither the buffer for drawing nor the next buffer reserved to be sent to
* Wayland count towards MAX_BUFFERS_IN_USE.
* Cannot be less than two because some compositors will not release the buffer
* given to them until a new one has been attached. See the description of
* the wl_buffer::release event in the Wayland documentation.
*/
const int MAX_BUFFERS_IN_USE = 2;
static bool traceEnabled; // set the J2D_STATS env var to enable
static bool traceFPSEnabled; // set the J2D_FPS env var to enable
/**
* Represents one rectangular area linked into a list.
*
@@ -143,6 +148,18 @@ DamageList_Add(DamageList* list, jint x, jint y, jint width, jint height)
return item;
}
static DamageList*
DamageList_AddList(DamageList* list, DamageList* add)
{
assert(list != add);
for (DamageList* l = add; l != NULL; l = l->next) {
list = DamageList_Add(list, l->x, l->y, l->width, l->height);
}
return list;
}
static void
DamageList_SendAll(DamageList* list, struct wl_surface* wlSurface)
{
@@ -181,6 +198,7 @@ typedef struct WLSurfaceBuffer {
pixel_t * data; /// points to a memory segment shared with Wayland
jint width; /// buffer's width
jint height; /// buffer's height
DamageList * damageList;/// Accumulated damage relative to the current show buffer
} WLSurfaceBuffer;
/**
@@ -210,28 +228,24 @@ struct WLDrawBuffer {
/**
* Contains data necessary to manage multiple backing buffers for one wl_surface.
*
* There's one and only buffer attached to the surface that Wayland reads from,
* which is allocated in shared memory: bufferForShow.
* There's one buffer that will be sent to Wayland next: bufferForShow. When it is
* ready to be sent to Wayland, it is added to the buffersInUse list and a new one
* is put in its place so that bufferForShow is always available.
* If the number of buffers in use is >= MAX_BUFFERS_IN_USE, no new buffer is sent
* to Wayland until some buffers have been released by Wayland. This effectively
* skips some of the frames.
*
* There's one buffer (but it possible to have more) that can be used for drawing.
* When Wayland is ready to receive updates, the modified portions of that buffer
* are copied over to bufferForShow.
* There's one buffer that can be drawn upon: bufferForDraw. When we're done drawing,
* pixels from that buffer are copied over to bufferForShow.
*
* The size of bufferForShow is determined by width and height fields; the size of
* bufferForShow can lag behind and will re-adjust after Wayland has released it
* back to us.
* The size of bufferForShow is determined by the width and height fields.
*/
struct WLSurfaceBufferManager {
struct wl_surface * wlSurface; // only accessed under showLock
int bgPixel;
int format; // one of enum wl_shm_format
struct wl_surface * wlSurface; // only accessed under showLock
bool isBufferAttached; // is there a buffer attached to the surface?
int bgPixel; // the pixel value to be used to clear new buffers
int format; // one of enum wl_shm_format
/**
* ID of the "drawing" frame to be sent to Wayland.
* Is set by committing a new frame with WLSBM_SurfaceCommit().
* Gets re-set to 0 right after sending to Wayland.
*/
frame_id_t commitFrameID; // only accessed under showLock
struct wl_callback* wl_frame_callback; // only accessed under showLock
pthread_mutex_t showLock;
@@ -241,16 +255,17 @@ struct WLSurfaceBufferManager {
* When sent to Wayland, its WLSurfaceBuffer is added to the buffersInUse list
* and a fresh one created or re-used from the buffersFree list so that
* this buffer is available at all times.
* When "draw" buffer (bufferForDraw) size is changed, this one is
* When the "draw" buffer (bufferForDraw) size is changed, this one is
* immediately invalidated along with all those from the buffersFree list.
*/
WLShowBuffer bufferForShow; // only accessed under showLock
/// A list of buffers that can be re-used as bufferForShow.wlSurfaceBuffer.
/// The list of buffers that can be re-used as bufferForShow.wlSurfaceBuffer.
WLSurfaceBuffer * buffersFree; // only accessed under showLock
/// A list of buffers sent to Wayland and not yet released; when released,
/// The list of buffers sent to Wayland and not yet released; when released,
/// they may be added to the buffersFree list.
/// Does not exceed MAX_BUFFERS_IN_USE elements.
WLSurfaceBuffer * buffersInUse; // only accessed under showLock
/// The scale of wl_surface (see Wayland docs for more info on that).
@@ -269,37 +284,69 @@ struct WLSurfaceBufferManager {
static inline void
AssertDrawLockIsHeld(WLSurfaceBufferManager* manager, const char * file, int line)
{
// TODO: would be nice to be able to check the mutex owner
// The drawLock is recursive, so can't effectively check if it is locked
// with trylock. Maybe add a manual lock count or current owner?
}
static inline void
AssertShowLockIsHeld(WLSurfaceBufferManager* manager, const char * file, int line)
{
#ifdef DEBUG
if (pthread_mutex_trylock(&manager->showLock) == 0) {
fprintf(stderr, "showLock not acquired at %s:%d\n", file, line);
fflush(stderr);
assert(0);
}
#endif
}
static jlong
GetJavaTimeNanos(void) {
jlong result = 0;
if (traceEnabled || traceFPSEnabled) {
struct timespec tp;
const jlong NANOSECS_PER_SEC = 1000000000L;
int status = clock_gettime(CLOCK_MONOTONIC, &tp);
result = (jlong)(tp.tv_sec) * NANOSECS_PER_SEC + (jlong)(tp.tv_nsec);
}
return result;
}
static inline void
ShowFrameNumbers(WLSurfaceBufferManager* manager, const char *fmt, ...)
WLBufferTrace(WLSurfaceBufferManager* manager, const char *fmt, ...)
{
// TODO: this is temporary debugging code that will be removed in the future
if (getenv("J2D_TRACE_LEVEL")) {
if (traceEnabled) {
va_list args;
va_start(args, fmt);
fprintf(stderr, ">>> ");
jlong t = GetJavaTimeNanos();
fprintf(stderr, "[%07dms] ", t / 1000000);
vfprintf(stderr, fmt, args);
fprintf(stderr, "; showing frame %d, drawing frame %d, frame to be committed %d\n",
fprintf(stderr, "; frames [^%03d, *%03d]\n",
manager->bufferForShow.frameID,
manager->bufferForDraw.frameID,
manager->commitFrameID);
manager->bufferForDraw.frameID);
fflush(stderr);
va_end(args);
}
}
static void
WLBufferTraceFrame(WLSurfaceBufferManager* manager)
{
if (traceFPSEnabled) {
static jlong lastFrameTime = 0;
static int frameCount = 0;
jlong curTime = GetJavaTimeNanos();
frameCount++;
if (curTime - lastFrameTime > 1000000000L) {
fprintf(stderr, "FPS: %d\n", frameCount);
fflush(stderr);
lastFrameTime = curTime;
frameCount = 0;
}
}
}
static inline size_t
SurfaceBufferSizeInBytes(WLSurfaceBuffer * buffer)
{
@@ -321,12 +368,6 @@ DrawBufferSizeInBytes(WLSurfaceBufferManager * manager)
return stride * manager->bufferForDraw.height;
}
static inline jint
SurfaceBufferSizeInPixels(WLSurfaceBuffer * buffer)
{
return buffer->width * buffer->height;
}
/**
* Returns the number of pixels in the "draw" buffer.
*/
@@ -341,9 +382,8 @@ wl_buffer_release(void * data, struct wl_buffer * wl_buffer)
{
/* Sent by the compositor when it's no longer using this buffer */
WLSurfaceBufferManager * manager = (WLSurfaceBufferManager *) data;
WLBufferTrace(manager, "wl_buffer_release");
SurfaceBufferNotifyReleased(manager, wl_buffer);
ShowFrameNumbers(manager, "wl_buffer_release");
}
static const struct wl_buffer_listener wl_buffer_listener = {
@@ -366,21 +406,24 @@ SurfaceBufferDestroy(WLSurfaceBuffer * buffer)
// the surface contents" (source: wayland.xml)
wl_buffer_destroy(buffer->wlBuffer);
memset(buffer, 0, sizeof(WLSurfaceBuffer));
DamageList_FreeAll(buffer->damageList);
free(buffer);
}
static WLSurfaceBuffer *
SurfaceBufferCreate(WLSurfaceBufferManager * manager)
{
ASSERT_DRAW_LOCK_IS_HELD(manager);
WLBufferTrace(manager, "SurfaceBufferCreate");
WLSurfaceBuffer * buffer = calloc(1, sizeof(WLSurfaceBuffer));
if (!buffer) return NULL;
MUTEX_LOCK(manager->drawLock);
buffer->width = manager->bufferForDraw.width;
buffer->height = manager->bufferForDraw.height;
MUTEX_UNLOCK(manager->drawLock);
buffer->damageList = DamageList_Add(NULL, 0, 0, buffer->width, buffer->height);
const size_t size = SurfaceBufferSizeInBytes(buffer);
buffer->wlPool = CreateShmPool(size, "jwlshm", (void**)&buffer->data);
@@ -407,6 +450,22 @@ SurfaceBufferNotifyReleased(WLSurfaceBufferManager * manager, struct wl_buffer *
{
assert(manager);
if (traceEnabled) {
int used = 0;
int free = 0;
WLSurfaceBuffer * cur = manager->buffersInUse;
while (cur) {
used++;
cur = cur->next;
}
cur = manager->buffersFree;
while (cur) {
free++;
cur = cur->next;
}
WLBufferTrace(manager, "SurfaceBufferNotifyReleased (%d in use, %d free)", used, free);
}
MUTEX_LOCK(manager->showLock);
WLSurfaceBuffer * cur = manager->buffersInUse;
@@ -446,12 +505,27 @@ ShowBufferIsAvailable(WLSurfaceBufferManager * manager)
{
ASSERT_SHOW_LOCK_IS_HELD(manager);
return manager->bufferForShow.wlSurfaceBuffer;
assert(manager->bufferForShow.wlSurfaceBuffer);
// Skip sending the next frame if the number of buffers that
// had been sent to Wayland for displaying earlier is too large.
// Clearly the server can't support our frame rate in that case.
int used = 0;
WLSurfaceBuffer * cur = manager->buffersInUse;
while (cur) {
used++;
cur = cur->next;
}
WLBufferTrace(manager, "ShowBufferIsAvailable: %d/%d in use", used, MAX_BUFFERS_IN_USE);
// NB: account for one extra buffer about to be sent to Wayland and added to the used list
return used < MAX_BUFFERS_IN_USE;
}
static void
ShowBufferCreate(WLSurfaceBufferManager * manager)
{
ASSERT_SHOW_LOCK_IS_HELD(manager);
manager->bufferForShow.wlSurfaceBuffer = SurfaceBufferCreate(manager);
}
@@ -479,32 +553,22 @@ ShowBufferPrepareFreshOne(WLSurfaceBufferManager * manager)
}
}
/**
* Makes sure that there's a fresh "show" buffer of suitable size available
* that can be sent to Wayland. That fresh buffer's pixels are copied over
* from the given buffer.
*/
static void
ShowBufferPrepareFreshOneWithPixelsFrom(WLSurfaceBufferManager * manager, WLSurfaceBuffer * lastBuffer)
TrySendShowBufferToWayland(WLSurfaceBufferManager * manager, bool sendNow)
{
ASSERT_SHOW_LOCK_IS_HELD(manager);
assert(lastBuffer);
WLBufferTrace(manager, "TrySendShowBufferToWayland(%s)", sendNow ? "now" : "later");
ShowBufferPrepareFreshOne(manager);
if (manager->bufferForShow.wlSurfaceBuffer) {
// Copy the last image data from the buffer provided.
const bool sameSize =
manager->bufferForShow.wlSurfaceBuffer->width == lastBuffer->width
&& manager->bufferForShow.wlSurfaceBuffer->height == lastBuffer->height;
assert(sameSize);
// TODO: better do memcpy
for (jint i = 0; i < SurfaceBufferSizeInPixels(lastBuffer); ++i) {
manager->bufferForShow.wlSurfaceBuffer->data[i] = lastBuffer->data[i];
}
sendNow = sendNow && ShowBufferIsAvailable(manager);
if (sendNow) {
CopyDrawBufferToShowBuffer(manager);
SendShowBufferToWayland(manager);
} else {
ScheduleFrameCallback(manager);
}
WLBufferTrace(manager, "wl_surface_commit");
// Need to commit either the damage done to the surface or the re-scheduled callback.
wl_surface_commit(manager->wlSurface);
}
static void
@@ -525,6 +589,9 @@ ShowBufferInvalidateForNewSize(WLSurfaceBufferManager * manager)
manager->buffersFree = next;
}
// NB: the buffers that are currently in use will be destroyed
// as soon as they are released (see wl_buffer_release()).
ShowBufferCreate(manager);
MUTEX_UNLOCK(manager->showLock);
@@ -536,26 +603,20 @@ wl_frame_callback_done(void * data,
uint32_t callback_data)
{
WLSurfaceBufferManager * manager = (WLSurfaceBufferManager *) data;
WLBufferTrace(manager, "wl_frame_callback_done");
MUTEX_LOCK(manager->showLock);
assert(manager->wl_frame_callback == wl_callback);
wl_callback_destroy(manager->wl_frame_callback);
manager->wl_frame_callback = NULL;
struct wl_surface * wlSurface = manager->wlSurface;
if (wlSurface) {
// Wayland is ready to get a new frame from us. Send whatever we have
// managed to draw by this time (maybe nothing).
if (!TrySendDrawBufferToWayland(manager)) {
// Re-schedule the same callback if we were unable to send the
// new frame to Wayland.
ScheduleFrameCallback(manager);
}
ShowFrameNumbers(manager, "wl_frame_callback_done");
// Need to commit either the damage done to the surface or the re-scheduled
// callback.
wl_surface_commit(wlSurface);
if (manager->wlSurface) {
const bool hasSomethingToSend = (manager->bufferForDraw.damageList != NULL);
TrySendShowBufferToWayland(manager, hasSomethingToSend);
}
MUTEX_UNLOCK(manager->showLock);
}
@@ -576,41 +637,44 @@ ScheduleFrameCallback(WLSurfaceBufferManager * manager)
}
/**
* Copies all the damaged areas from the drawing buffer to show buffer and
* transfers manager to the "new frame sent" state.
*
* Returns true if a buffer (possibly with damage) was attached to the managed
* Wayland surface and false otherwise.
* Attaches the current show buffer to the Wayland surface, notifying Wayland
* of all the damaged areas in that buffer.
* Prepares a fresh buffer for the next frame to show.
*/
static bool
static void
SendShowBufferToWayland(WLSurfaceBufferManager * manager)
{
ASSERT_SHOW_LOCK_IS_HELD(manager);
assert(manager->wlSurface);
if (manager->wlSurface) { // may get called without an associated wl_surface
WLSurfaceBuffer * buffer = manager->bufferForShow.wlSurfaceBuffer;
assert(buffer);
jlong startTime = GetJavaTimeNanos();
ShowBufferPrepareFreshOneWithPixelsFrom(manager, buffer);
WLSurfaceBuffer * buffer = manager->bufferForShow.wlSurfaceBuffer;
assert(buffer);
// wl_buffer_listener will release bufferForShow when Wayland's done with it
wl_surface_attach(manager->wlSurface, buffer->wlBuffer, 0, 0);
wl_surface_set_buffer_scale(manager->wlSurface, manager->scale);
ShowBufferPrepareFreshOne(manager);
DamageList_SendAll(manager->bufferForShow.damageList, manager->wlSurface);
DamageList_FreeAll(manager->bufferForShow.damageList);
manager->bufferForShow.damageList = NULL;
// wl_buffer_listener will release bufferForShow when Wayland's done with it
wl_surface_attach(manager->wlSurface, buffer->wlBuffer, 0, 0);
wl_surface_set_buffer_scale(manager->wlSurface, manager->scale);
buffer->next = manager->buffersInUse;
manager->buffersInUse = buffer;
// Wayland will not issue frame callbacks before a buffer is attached to the surface.
// So we need to take note of the fact of attaching.
manager->isBufferAttached = true;
manager->bufferForShow.frameID = manager->bufferForDraw.frameID;
manager->bufferForDraw.frameID++;
manager->commitFrameID = 0;
return true;
}
DamageList_SendAll(manager->bufferForShow.damageList, manager->wlSurface);
DamageList_FreeAll(manager->bufferForShow.damageList);
manager->bufferForShow.damageList = NULL;
return false;
buffer->next = manager->buffersInUse;
manager->buffersInUse = buffer;
manager->bufferForShow.frameID = manager->bufferForDraw.frameID;
manager->bufferForDraw.frameID++;
jlong endTime = GetJavaTimeNanos();
WLBufferTrace(manager, "SendShowBufferToWayland (%lldns)", endTime - startTime);
WLBufferTraceFrame(manager);
}
static void
@@ -625,6 +689,8 @@ CopyDamagedArea(WLSurfaceBufferManager * manager, jint x, jint y, jint width, ji
assert(height >= 0);
assert(height + y >= 0);
assert(width + x >= 0);
assert(width <= manager->bufferForDraw.width);
assert(height <= manager->bufferForDraw.height);
pixel_t * dest = manager->bufferForShow.wlSurfaceBuffer->data;
pixel_t * src = manager->bufferForDraw.data;
@@ -639,81 +705,68 @@ CopyDamagedArea(WLSurfaceBufferManager * manager, jint x, jint y, jint width, ji
}
/**
* Copies areas from the current damageList of the drawing surface to
* the buffer associated with the Wayland surface for displaying.
* Copies the contents of the drawing surface to the buffer associated
* with the Wayland surface for displaying, the "show" buffer.
*
* Clears the list of damaged areas from the drawing buffer and
* moves that list to the displaying buffer so that Wayland can get
* moves that list to the "show" buffer so that Wayland can get
* notified of what has changed in the buffer.
*
* Updates the damaged areas in all the existing free and in-use buffers.
*/
static bool
CopyDamagedAreasToShowBuffer(WLSurfaceBufferManager * manager)
static void
CopyDrawBufferToShowBuffer(WLSurfaceBufferManager * manager)
{
ASSERT_SHOW_LOCK_IS_HELD(manager);
ASSERT_DRAW_LOCK_IS_HELD(manager);
MUTEX_LOCK(manager->drawLock);
assert(manager->bufferForShow.wlSurfaceBuffer);
assert(manager->wlSurface != NULL);
assert(manager->bufferForShow.damageList == NULL);
const bool willCommit = (manager->bufferForDraw.damageList != NULL) && manager->wlSurface != NULL;
if (willCommit) {
manager->bufferForShow.damageList = manager->bufferForDraw.damageList;
manager->bufferForDraw.damageList = NULL;
jlong startTime = GetJavaTimeNanos();
for (DamageList* l = manager->bufferForShow.damageList; l; l = l->next) {
CopyDamagedArea(manager, l->x, l->y, l->width, l->height);
}
// All the existing buffers will now differ even more from the new "show" buffer.
// Need to add to their damaged areas.
for (WLSurfaceBuffer* buffer = manager->buffersFree; buffer != NULL; buffer = buffer->next) {
buffer->damageList = DamageList_AddList(buffer->damageList, manager->bufferForDraw.damageList);
}
return willCommit;
}
/**
* Attempts to send damaged areas in the drawing buffer from the frame specified
* by manager->commitFrameID to Wayland by copying them to the show buffer
* and notifying Wayland of that.
*
* Returns false if another attempt to send this frame must be scheduled
* and true otherwise (a new frame is expected).
*/
static bool
TrySendDrawBufferToWayland(WLSurfaceBufferManager * manager)
{
ASSERT_SHOW_LOCK_IS_HELD(manager);
if (manager->commitFrameID != manager->bufferForDraw.frameID) {
RegisterFrameLost("Attempt to show a frame with ID different from the one we committed");
ShowFrameNumbers(manager, "TrySendDrawBufferToWayland - skipped frame");
return true;
for (WLSurfaceBuffer* buffer = manager->buffersInUse; buffer != NULL; buffer = buffer->next) {
buffer->damageList = DamageList_AddList(buffer->damageList, manager->bufferForDraw.damageList);
}
bool needAnotherTry = true;
ShowFrameNumbers(manager, "TrySendDrawBufferToWayland");
// Merge the damage list with the new damage from the draw buffer; this is better than
// copying damage from two lists because this way we might avoid copying the same area twice.
manager->bufferForShow.wlSurfaceBuffer->damageList
= DamageList_AddList(manager->bufferForShow.wlSurfaceBuffer->damageList,
manager->bufferForDraw.damageList);
const bool bufferForDrawWasLocked = pthread_mutex_trylock(&manager->drawLock);
if (bufferForDrawWasLocked) {
// Can't display the buffer with new pixels, so let's give what we already have.
RegisterFrameLost("Repeating last frame while the new one isn't ready yet");
} else { // bufferForDraw was not locked, but is locked now
if (ShowBufferIsAvailable(manager)) { // may be out of memory
const bool needCommit = CopyDamagedAreasToShowBuffer(manager);
pthread_mutex_unlock(&manager->drawLock);
if (needCommit) {
needAnotherTry = !SendShowBufferToWayland(manager);
} else {
needAnotherTry = false; // nothing to show, wait for the next WLSBM_SurfaceCommit()
}
} else {
pthread_mutex_unlock(&manager->drawLock);
}
int count = 0;
for (DamageList* l = manager->bufferForShow.wlSurfaceBuffer->damageList; l != NULL; l = l->next) {
CopyDamagedArea(manager, l->x, l->y, l->width, l->height);
count++;
}
return !needAnotherTry;
// This buffer is now identical to what's on the screen, so clear the difference list:
DamageList_FreeAll(manager->bufferForShow.wlSurfaceBuffer->damageList);
manager->bufferForShow.wlSurfaceBuffer->damageList = NULL;
// The list of damage to notify Wayland about:
manager->bufferForShow.damageList = manager->bufferForDraw.damageList;
manager->bufferForDraw.damageList = NULL;
jlong endTime = GetJavaTimeNanos();
WLBufferTrace(manager, "CopyDrawBufferToShowBuffer: copied %d area(s) in %lldns", count, endTime - startTime);
MUTEX_UNLOCK(manager->drawLock);
}
static void
DrawBufferCreate(WLSurfaceBufferManager * manager)
{
ASSERT_DRAW_LOCK_IS_HELD(manager);
assert(manager->bufferForDraw.data == NULL);
assert(manager->bufferForDraw.damageList == NULL);
@@ -738,6 +791,9 @@ DrawBufferDestroy(WLSurfaceBufferManager * manager)
WLSurfaceBufferManager *
WLSBM_Create(jint width, jint height, jint scale, jint bgPixel, jint wlShmFormat)
{
traceEnabled = getenv("J2D_STATS");
traceFPSEnabled = getenv("J2D_FPS");
WLSurfaceBufferManager * manager = calloc(1, sizeof(WLSurfaceBufferManager));
if (!manager) {
return NULL;
@@ -759,8 +815,14 @@ WLSBM_Create(jint width, jint height, jint scale, jint bgPixel, jint wlShmFormat
// once for reading.
pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&manager->drawLock, &attr);
MUTEX_LOCK(manager->drawLock); // satisfy assertions
DrawBufferCreate(manager);
MUTEX_UNLOCK(manager->drawLock);
MUTEX_LOCK(manager->showLock); // satisfy assertions
ShowBufferCreate(manager);
MUTEX_UNLOCK(manager->showLock);
J2dTrace3(J2D_TRACE_INFO, "WLSBM_Create: created %p for %dx%d px\n", manager, width, height);
return manager;
@@ -772,7 +834,12 @@ WLSBM_SurfaceAssign(WLSurfaceBufferManager * manager, struct wl_surface* wl_surf
J2dTrace2(J2D_TRACE_INFO, "WLSBM_SurfaceAssign: assigned surface %p to manger %p\n", wl_surface, manager);
MUTEX_LOCK(manager->showLock);
manager->wlSurface = wl_surface;
if (manager->wlSurface == NULL || wl_surface == NULL) {
manager->wlSurface = wl_surface;
manager->isBufferAttached = false;
} else {
assert(manager->wlSurface == wl_surface);
}
MUTEX_UNLOCK(manager->showLock);
}
@@ -782,6 +849,7 @@ WLSBM_Destroy(WLSurfaceBufferManager * manager)
J2dTrace1(J2D_TRACE_INFO, "WLSBM_Destroy: manger %p\n", manager);
// NB: must never be called in parallel with the Wayland event handlers
// because their callbacks retain a pointer to this manager.
MUTEX_LOCK(manager->showLock);
MUTEX_LOCK(manager->drawLock);
if (manager->wl_frame_callback) {
@@ -831,22 +899,8 @@ WLSBM_HeightGet(WLSurfaceBufferManager * manager)
WLDrawBuffer *
WLSBM_BufferAcquireForDrawing(WLSurfaceBufferManager * manager)
{
WLBufferTrace(manager, "WLSBM_BufferAcquireForDrawing(%d)", manager->bufferForDraw.frameID);
MUTEX_LOCK(manager->drawLock);
// We are going to "damage" the drawing frame now and therefore
// shall not commit until WLSBM_SurfaceCommit() is issued.
// Setting commitFrameID to a number that no draw frame has
// achieves just that.
// This effectively disables redrawing during very fast interactive
// resize of applications that draw often (like animated pictures)
// as new frames often appear after the size had been changed, but before
// the change has been committed to Wayland. In this case we don't
// commit and wait for a finished frame, which may not come quick
// enough before the next size change, which re-starts the same cycle.
MUTEX_LOCK(manager->showLock);
manager->commitFrameID = 0;
MUTEX_UNLOCK(manager->showLock);
return &manager->bufferForDraw;
}
@@ -855,7 +909,7 @@ WLSBM_BufferReturn(WLSurfaceBufferManager * manager, WLDrawBuffer * buffer)
{
if (&manager->bufferForDraw == buffer) {
MUTEX_UNLOCK(buffer->manager->drawLock);
ShowFrameNumbers(manager, "WLSBM_BufferReturn");
WLBufferTrace(manager, "WLSBM_BufferReturn(%d)", manager->bufferForDraw.frameID);
} else {
WL_FATAL_ERROR("WLSBM_BufferReturn() called with an unidentified buffer");
}
@@ -865,26 +919,13 @@ void
WLSBM_SurfaceCommit(WLSurfaceBufferManager * manager)
{
MUTEX_LOCK(manager->showLock);
// Request that the frame with this ID to be committed to Wayland
// and no other. Any attempt to draw on this frame will cancel
// the commit.
manager->commitFrameID = manager->bufferForDraw.frameID;
ShowFrameNumbers(manager, "WLSBM_SurfaceCommit");
if (manager->wlSurface && manager->wl_frame_callback == NULL) {
// Wayland is ready to get a new frame from us. Send whatever we have
// managed to draw by this time (maybe nothing).
if (!TrySendDrawBufferToWayland(manager)) {
// Re-schedule the same callback if we were unable to send the
// new frame to Wayland. This can happen, for instance, if Wayland
// haven't released the surface buffer to us yet.
ScheduleFrameCallback(manager);
}
ShowFrameNumbers(manager, "wl_frame_callback_done");
// Need to commit either the damage done to the surface or the re-scheduled
// callback.
wl_surface_commit(manager->wlSurface);
WLBufferTrace(manager, "WLSBM_SurfaceCommit");
const bool frameCallbackScheduled = manager->wl_frame_callback != NULL;
if (manager->wlSurface && !frameCallbackScheduled) {
bool canScheduleFrameCallback = manager->isBufferAttached;
// Don't always send the frame immediately so as not to overwhelm Wayland
bool sendNow = !canScheduleFrameCallback;
TrySendShowBufferToWayland(manager, sendNow);
}
MUTEX_UNLOCK(manager->showLock);
}
@@ -900,7 +941,7 @@ WLSB_Damage(WLDrawBuffer * buffer, jint x, jint y, jint width, jint height)
assert(y + height <= buffer->manager->bufferForDraw.height);
buffer->damageList = DamageList_Add(buffer->damageList, x, y, width, height);
ShowFrameNumbers(buffer->manager, "WLSB_Damage (at %d, %d %dx%d)", x, y, width, height);
WLBufferTrace(buffer->manager, "WLSB_Damage (at %d, %d %dx%d)", x, y, width, height);
}
pixel_t *
@@ -924,7 +965,7 @@ WLSBM_SizeChangeTo(WLSurfaceBufferManager * manager, jint width, jint height, ji
ShowBufferInvalidateForNewSize(manager);
DrawBufferCreate(manager);
ShowFrameNumbers(manager, "WLSBM_SizeChangeTo %dx%d", width, height);
WLBufferTrace(manager, "WLSBM_SizeChangeTo %dx%d", width, height);
}
MUTEX_LOCK(manager->showLock);

View File

@@ -54,7 +54,7 @@ typedef uint32_t pixel_t;
*
* At least two buffers are associated with the manager:
* - a drawing buffer that SurfaceDataOps operate with (see WLSMSurfaceData.c) and
* - a displaying buffer that is essentially wl_buffer attached to wl_surface.
* - one or more displaying buffer(s) that is essentially wl_buffer attached to wl_surface.
*
* Wayland displays pixels from the displaying buffer and we draw pixels to
* the drawing buffer. The manager is responsible for timely copying from
@@ -76,6 +76,14 @@ void WLSBM_Destroy(WLSurfaceBufferManager *);
*/
void WLSBM_SurfaceAssign(WLSurfaceBufferManager *, struct wl_surface *);
/**
* Arrange to send the current drawing buffer to the Wayland server
* to show on the screen.
* If the attempt to send the buffer immediately fails (for example,
* because the drawing buffer is still locked or there's nothing
* new to send), arranges a re-try at the next 'frame' event
* from Wayland.
*/
void WLSBM_SurfaceCommit(WLSurfaceBufferManager *);
/**

View File

@@ -38,6 +38,7 @@
#include <unistd.h>
const int POLL_EVENT_TIMEOUT = 50;
const int CURSOR_UPDATE_TIME = 50;
void SplashEventLoop(Splash * splash);
bool SplashCreateWindow(Splash * splash);
@@ -137,7 +138,7 @@ SplashEventLoop(Splash * splash) {
rc = poll(pfd, 2, POLL_EVENT_TIMEOUT);
SplashLock(splash);
if (SplashTime() - lastCursorUpdate > 100) {
if (SplashTime() - lastCursorUpdate > CURSOR_UPDATE_TIME) {
SplashUpdateCursor(splash);
lastCursorUpdate = SplashTime();
}

View File

@@ -37,8 +37,50 @@
#include "memory_utils.h"
#include "xdg-shell-client-protocol.h"
struct OutputInfo {
void *wl_output;
int width;
int height;
int scale;
} OutputInfo;
#define OUTPUT_MAX_COUNT 10
static struct OutputInfo outputsInfo[OUTPUT_MAX_COUNT];
static void addOutputInfo(void *wl_output) {
for (int i = 0; i < OUTPUT_MAX_COUNT; i++) {
if (outputsInfo[i].wl_output == NULL) {
outputsInfo[i].wl_output = wl_output;
break;
}
}
}
static void putOutputInfo(void *wl_output, int width, int height, int scale) {
for (int i = 0; i < OUTPUT_MAX_COUNT; i++) {
if (outputsInfo[i].wl_output == wl_output) {
if (scale) {
outputsInfo[i].scale = scale;
}
if (width && height) {
outputsInfo[i].width = width;
outputsInfo[i].height = height;
}
break;
}
}
}
static struct OutputInfo* getOutputInfo(void *wl_output) {
for (int i = 0; i < OUTPUT_MAX_COUNT; i++) {
if (outputsInfo[i].wl_output == wl_output) {
return &outputsInfo[i];
}
}
return NULL;
}
static const int BUFFERS_COUNT = 3;
static bool is_cursor_animated = false;
#define NULL_CHECK_CLEANUP(val, message) if (val == NULL) { fprintf(stderr, "%s\n", message); goto cleanup; }
#define NULL_CHECK(val, message) if (val == NULL) { fprintf(stderr, "%s\n", message); return false; }
@@ -84,6 +126,55 @@ destroy_buffer(Buffer *buffer) {
}
}
static void
wl_surface_entered_output(void *data,
struct wl_surface *wl_surface,
struct wl_output *wl_output)
{
Splash *splash = data;
splash->wl_state->wl_output = wl_output;
SplashReconfigure(splash);
}
static const struct wl_surface_listener wl_surface_listener = {
.enter = wl_surface_entered_output,
};
static void
wl_output_geometry(void *data, struct wl_output * wl_output, int32_t x, int32_t y, int32_t physical_width,
int32_t physical_height, int32_t subpixel, const char *make, const char *model, int32_t transform) {
}
static void
wl_output_scale(void *data, struct wl_output *wl_output, int32_t factor) {
putOutputInfo(wl_output, 0, 0, factor);
}
static void
wl_output_mode(
void *data,
struct wl_output *wl_output,
uint32_t flags,
int32_t width,
int32_t height,
int32_t refresh) {
putOutputInfo(wl_output, width, height, 0);
}
static void
wl_output_done(
void *data,
struct wl_output *wl_output) {
}
struct wl_output_listener wl_output_listener = {
.geometry = &wl_output_geometry,
.mode = &wl_output_mode,
.done = &wl_output_done,
.scale = &wl_output_scale
};
static void
registry_global(void *data, struct wl_registry *wl_registry, uint32_t name, const char *interface, uint32_t version) {
wayland_state *state = data;
@@ -104,8 +195,10 @@ registry_global(void *data, struct wl_registry *wl_registry, uint32_t name, cons
state->xdg_wm_base = wl_registry_bind(
wl_registry, name, &xdg_wm_base_interface, 1);
} else if (strcmp(interface, wl_output_interface.name) == 0) {
state->wl_output = wl_registry_bind(
struct wl_output *wl_output = wl_registry_bind(
wl_registry, name, &wl_output_interface, 2);
addOutputInfo(wl_output);
wl_output_add_listener(wl_output, &wl_output_listener, NULL);
}
}
@@ -128,45 +221,6 @@ static const struct wl_buffer_listener wl_buffer_listener = {
.release = wl_buffer_release,
};
static void
wl_output_geometry(void *data, struct wl_output * wl_output, int32_t x, int32_t y, int32_t physical_width,
int32_t physical_height, int32_t subpixel, const char *make, const char *model, int32_t transform) {
}
static void
wl_output_scale(void *data, struct wl_output *wl_output, int32_t factor) {
ScreenInfo *output = data;
output->scale = factor;
}
static void
wl_output_mode(
void *data,
struct wl_output *wl_output,
uint32_t flags,
int32_t width,
int32_t height,
int32_t refresh) {
ScreenInfo *output = data;
output->width = width;
output->height = height;
}
static void
wl_output_done(
void *data,
struct wl_output *wl_output) {
}
struct wl_output_listener wl_output_listener = {
.geometry = &wl_output_geometry,
.mode = &wl_output_mode,
.done = &wl_output_done,
.scale = &wl_output_scale
};
void
xdg_surface_configure(void *data, struct xdg_surface *xdg_surface, uint32_t serial) {
struct Splash *splash = data;
@@ -184,7 +238,7 @@ handle_toplevel_configure(void *data, struct xdg_toplevel *toplevel, int32_t wid
struct wl_array *states) {
struct Splash *splash = data;
if (width > 0 && height > 0 && (splash->window_width == 0 || splash->window_height == 0)) {
if (width > 0 && height > 0) {
splash->window_width = width;
splash->window_height = height;
}
@@ -199,16 +253,17 @@ static const struct xdg_toplevel_listener xdg_toplevel_listener = {
static void
pointer_handle_enter(void *data, struct wl_pointer *pointer, uint32_t serial, struct wl_surface *surface,
wl_fixed_t sx, wl_fixed_t sy) {
wayland_state *state = data;
struct Splash *splash = data;
struct OutputInfo *currentOutputInfo = getOutputInfo(splash->wl_state->wl_output);
int outputScale = (currentOutputInfo != NULL) ? currentOutputInfo->scale : 1;
is_cursor_animated = true;
struct wl_cursor_image *image = state->default_cursor->images[0];
wl_pointer_set_cursor(pointer, serial, state->cursor_surface, image->hotspot_x, image->hotspot_y);
struct wl_cursor_image *image = splash->wl_state->default_cursor->images[0];
wl_pointer_set_cursor(pointer, serial, splash->wl_state->cursor_surface,
image->hotspot_x / outputScale, image->hotspot_y / outputScale);
}
static void
pointer_handle_leave(void *data, struct wl_pointer *pointer, uint32_t serial, struct wl_surface *surface) {
is_cursor_animated = false;
}
static void
@@ -229,14 +284,14 @@ static const struct wl_pointer_listener pointer_listener = {
static void
seat_handle_capabilities(void *data, struct wl_seat *seat, enum wl_seat_capability caps) {
wayland_state *state = data;
wayland_state *wl_state = ((Splash*)(data))->wl_state;
if ((caps & WL_SEAT_CAPABILITY_POINTER) && !state->pointer) {
state->pointer = wl_seat_get_pointer(seat);
wl_pointer_add_listener(state->pointer, &pointer_listener, state);
} else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && state->pointer) {
wl_pointer_destroy(state->pointer);
state->pointer = NULL;
if ((caps & WL_SEAT_CAPABILITY_POINTER) && !wl_state->pointer) {
wl_state->pointer = wl_seat_get_pointer(seat);
wl_pointer_add_listener(wl_state->pointer, &pointer_listener, data);
} else if (!(caps & WL_SEAT_CAPABILITY_POINTER) && wl_state->pointer) {
wl_pointer_destroy(wl_state->pointer);
wl_state->pointer = NULL;
}
}
@@ -255,78 +310,70 @@ static const struct xdg_wm_base_listener xdg_wm_base_listener = {
bool
SplashCreateWindow(Splash * splash) {
splash->native_scale = getNativeScaleFactor(NULL, 1);
if (splash->native_scale == -1.0) {
splash->native_scale = 1.0;
}
splash->wl_state->wl_surface = wl_compositor_create_surface(splash->wl_state->wl_compositor);
NULL_CHECK(splash->wl_state->wl_surface, "Cannot create surface\n")
splash->wl_state->wl_subsurfaces_surface = wl_compositor_create_surface(splash->wl_state->wl_compositor);
NULL_CHECK(splash->wl_state->wl_subsurfaces_surface, "Cannot create surface\n")
wl_surface_set_buffer_scale(splash->wl_state->wl_subsurfaces_surface, (int) splash->scaleFactor);
wl_surface_set_buffer_scale(splash->wl_state->wl_surface, 1);
wl_output_add_listener(splash->state->wl_output, &wl_output_listener, &splash->screenInfo);
xdg_wm_base_add_listener(splash->wl_state->xdg_wm_base, &xdg_wm_base_listener, splash->wl_state);
splash->wl_state->xdg_surface = xdg_wm_base_get_xdg_surface(splash->wl_state->xdg_wm_base, splash->wl_state->wl_surface);
NULL_CHECK(splash->wl_state->xdg_surface, "Cannot get xdg_surface\n")
wl_surface_add_listener(splash->wl_state->wl_surface, &wl_surface_listener, splash);
xdg_surface_add_listener(splash->wl_state->xdg_surface, &xdg_surface_listener, splash);
splash->state->wl_surface = wl_compositor_create_surface(splash->state->wl_compositor);
NULL_CHECK(splash->state->wl_surface, "Cannot create surface\n")
splash->state->wl_subsurfaces_surface = wl_compositor_create_surface(splash->state->wl_compositor);
NULL_CHECK(splash->state->wl_subsurfaces_surface, "Cannot create surface\n")
wl_surface_set_buffer_scale(splash->state->wl_subsurfaces_surface, (int) splash->scaleFactor);
wl_surface_set_buffer_scale(splash->state->wl_surface, splash->native_scale);
splash->wl_state->xdg_toplevel = xdg_surface_get_toplevel(splash->wl_state->xdg_surface);
NULL_CHECK(splash->wl_state->xdg_toplevel, "Cannot get xdg_toplevel\n")
xdg_toplevel_set_maximized(splash->wl_state->xdg_toplevel);
xdg_toplevel_add_listener(splash->wl_state->xdg_toplevel, &xdg_toplevel_listener, splash);
xdg_wm_base_add_listener(splash->state->xdg_wm_base, &xdg_wm_base_listener, splash->state);
splash->state->xdg_surface = xdg_wm_base_get_xdg_surface(splash->state->xdg_wm_base, splash->state->wl_surface);
NULL_CHECK(splash->state->xdg_surface, "Cannot get xdg_surface\n")
xdg_surface_add_listener(splash->state->xdg_surface, &xdg_surface_listener, splash);
splash->wl_state->cursor_surface = wl_compositor_create_surface(splash->wl_state->wl_compositor);
NULL_CHECK(splash->wl_state->cursor_surface, "Cannot get cursor_surface\n")
wl_seat_add_listener(splash->wl_state->wl_seat, &wl_seat_listener, splash);
splash->state->xdg_toplevel = xdg_surface_get_toplevel(splash->state->xdg_surface);
NULL_CHECK(splash->state->xdg_toplevel, "Cannot get xdg_toplevel\n")
xdg_toplevel_set_maximized(splash->state->xdg_toplevel);
xdg_toplevel_add_listener(splash->state->xdg_toplevel, &xdg_toplevel_listener, splash);
splash->state->cursor_surface = wl_compositor_create_surface(splash->state->wl_compositor);
NULL_CHECK(splash->state->cursor_surface, "Cannot get cursor_surface\n")
wl_seat_add_listener(splash->state->wl_seat, &wl_seat_listener, splash->state);
splash->state->wl_subsurfaces_subsurface = wl_subcompositor_get_subsurface(
splash->state->wl_subcompositor, splash->state->wl_subsurfaces_surface, splash->state->wl_surface);
NULL_CHECK(splash->state->wl_subsurfaces_subsurface, "Cannot create subsurface\n")
wl_subsurface_set_desync(splash->state->wl_subsurfaces_subsurface);
splash->state->cursor_theme = wl_cursor_theme_load(NULL, 32, splash->state->wl_shm);
NULL_CHECK(splash->state->cursor_theme, "unable to load default theme\n")
splash->state->default_cursor = wl_cursor_theme_get_cursor(splash->state->cursor_theme, "watch");
NULL_CHECK(splash->state->default_cursor, "unable to load pointer\n")
splash->wl_state->wl_subsurfaces_subsurface = wl_subcompositor_get_subsurface(
splash->wl_state->wl_subcompositor, splash->wl_state->wl_subsurfaces_surface, splash->wl_state->wl_surface);
NULL_CHECK(splash->wl_state->wl_subsurfaces_subsurface, "Cannot create subsurface\n")
wl_subsurface_set_desync(splash->wl_state->wl_subsurfaces_subsurface);
return true;
}
int
SplashInitPlatform(Splash * splash) {
SplashInitPlatform(Splash *splash) {
pthread_mutex_init(&splash->lock, NULL);
splash->initialized = false;
splash->buffers = 0;
splash->window_width = 0;
splash->window_height = 0;
splash->state = malloc(sizeof(wayland_state));
NULL_CHECK_CLEANUP(splash->state, "Cannot allocate enough memory\n")
splash->wl_state = malloc(sizeof(wayland_state));
NULL_CHECK_CLEANUP(splash->wl_state, "Cannot allocate enough memory\n")
splash->buffers = malloc(sizeof(Buffer) * BUFFERS_COUNT);
NULL_CHECK_CLEANUP(splash->buffers, "Cannot allocate enough memory\n")
splash->main_buffer = malloc(sizeof(Buffer));
NULL_CHECK_CLEANUP(splash->main_buffer, "Cannot allocate enough memory\n")
splash->state->wl_display = NULL;
splash->state->wl_registry = NULL;
splash->wl_state->wl_display = NULL;
splash->wl_state->wl_registry = NULL;
splash->state->wl_shm = NULL;
splash->state->wl_compositor = NULL;
splash->state->wl_subcompositor = NULL;
splash->state->wl_seat = NULL;
splash->state->xdg_wm_base = NULL;
splash->state->wl_subsurfaces_subsurface = NULL;
splash->wl_state->wl_shm = NULL;
splash->wl_state->wl_compositor = NULL;
splash->wl_state->wl_subcompositor = NULL;
splash->wl_state->wl_seat = NULL;
splash->wl_state->xdg_wm_base = NULL;
splash->wl_state->wl_subsurfaces_subsurface = NULL;
splash->state->wl_surface = NULL;
splash->state->wl_subsurfaces_surface = NULL;
splash->state->xdg_surface = NULL;
splash->state->xdg_toplevel = NULL;
splash->state->pointer = NULL;
splash->state->cursor_surface = NULL;
splash->wl_state->wl_surface = NULL;
splash->wl_state->wl_subsurfaces_surface = NULL;
splash->wl_state->xdg_surface = NULL;
splash->wl_state->xdg_toplevel = NULL;
splash->wl_state->pointer = NULL;
splash->wl_state->cursor_surface = NULL;
splash->main_buffer.wl_buffer = NULL;
splash->main_buffer.data = NULL;
splash->main_buffer->wl_buffer = NULL;
splash->main_buffer->data = NULL;
for (int i = 0; i < BUFFERS_COUNT; i++) {
splash->buffers[i].wl_buffer = NULL;
splash->buffers[i].data = NULL;
@@ -339,20 +386,19 @@ SplashInitPlatform(Splash * splash) {
splash->screenFormat.byteOrder = BYTE_ORDER_LSBFIRST;
splash->screenFormat.depthBytes = 4;
splash->state->wl_display = wl_display_connect(NULL);
NULL_CHECK_CLEANUP(splash->state->wl_display, "Cannot connect to display\n")
splash->wl_state->wl_display = wl_display_connect(NULL);
NULL_CHECK_CLEANUP(splash->wl_state->wl_display, "Cannot connect to display\n")
splash->state->wl_registry = wl_display_get_registry(splash->state->wl_display);
NULL_CHECK_CLEANUP(splash->state->wl_registry, "Cannot get display's registry\n")
wl_registry_add_listener(splash->state->wl_registry, &wl_registry_listener, splash->state);
wl_display_roundtrip(splash->state->wl_display);
splash->wl_state->wl_registry = wl_display_get_registry(splash->wl_state->wl_display);
NULL_CHECK_CLEANUP(splash->wl_state->wl_registry, "Cannot get display's registry\n")
wl_registry_add_listener(splash->wl_state->wl_registry, &wl_registry_listener, splash->wl_state);
wl_display_roundtrip(splash->wl_state->wl_display);
NULL_CHECK_CLEANUP(splash->state->wl_shm, "wl_shm not initialized\n")
NULL_CHECK_CLEANUP(splash->state->wl_compositor, "wl_compositor not initialized\n")
NULL_CHECK_CLEANUP(splash->state->wl_subcompositor, "wl_subcompositor not initialized\n")
NULL_CHECK_CLEANUP(splash->state->wl_seat, "wl_seat not initialized\n")
NULL_CHECK_CLEANUP(splash->state->xdg_wm_base, "xdg_wm_base not initialized\n")
NULL_CHECK_CLEANUP(splash->state->wl_output, "wl_output not initialized\n")
NULL_CHECK_CLEANUP(splash->wl_state->wl_shm, "wl_shm not initialized\n")
NULL_CHECK_CLEANUP(splash->wl_state->wl_compositor, "wl_compositor not initialized\n")
NULL_CHECK_CLEANUP(splash->wl_state->wl_subcompositor, "wl_subcompositor not initialized\n")
NULL_CHECK_CLEANUP(splash->wl_state->wl_seat, "wl_seat not initialized\n")
NULL_CHECK_CLEANUP(splash->wl_state->xdg_wm_base, "xdg_wm_base not initialized\n")
return true;
cleanup:
@@ -362,48 +408,67 @@ cleanup:
bool
SplashReconfigureNow(Splash * splash) {
int splash_scale = (int) splash->scaleFactor;
int offsetX = splash->screenInfo.width - splash->window_width * splash->screenInfo.scale;
int offsetY = splash->screenInfo.height - splash->window_height * splash->screenInfo.scale;
splash->x = (splash->screenInfo.width - splash->width / splash_scale) / 2;
splash->y = (splash->screenInfo.height - splash->height / splash_scale) / 2;
int localX = (splash->x - offsetX) / splash->screenInfo.scale;
int localY = (splash->y - offsetY) / splash->screenInfo.scale;
wl_subsurface_set_position(splash->state->wl_subsurfaces_subsurface, localX, localY);
destroy_buffer(&splash->main_buffer);
for (int i = 0; i < BUFFERS_COUNT; i++) {
destroy_buffer(&splash->buffers[i]);
splash->buffers[i].available = false;
}
struct wl_region *region = wl_compositor_create_region(splash->state->wl_compositor);
wl_region_subtract(region, 0, 0, splash->window_width, splash->window_height);
wl_region_add(region, localX, localY, splash->width / splash_scale, splash->height / splash_scale);
wl_surface_set_input_region(splash->state->wl_surface, region);
wl_surface_set_opaque_region(splash->state->wl_surface, region);
wl_region_destroy(region);
for (int i = 0; i < BUFFERS_COUNT; i++) {
if (!alloc_buffer(splash->width, splash->height, splash->state->wl_shm, &splash->buffers[i],
WL_SHM_FORMAT_XRGB8888, 4)) {
fprintf(stderr, "%s\n", "Cannot allocate enough memory");
if (splash->wl_state->wl_output) {
struct OutputInfo *currentOutputInfo = getOutputInfo(splash->wl_state->wl_output);
if (currentOutputInfo == NULL) {
return false;
}
wl_buffer_add_listener(splash->buffers[i].wl_buffer, &wl_buffer_listener, &splash->buffers[i]);
splash->buffers[i].available = true;
int outputScale = currentOutputInfo->scale;
int imageScale = outputScale / splash->scaleFactor;
int offsetX = currentOutputInfo->width - splash->window_width * outputScale;
int offsetY = currentOutputInfo->height - splash->window_height * outputScale;
splash->x = (currentOutputInfo->width - splash->width * imageScale) / 2;
splash->y = (currentOutputInfo->height - splash->height * imageScale) / 2;
int localX = (splash->x - offsetX) / outputScale;
int localY = (splash->y - offsetY) / outputScale;
wl_subsurface_set_position(splash->wl_state->wl_subsurfaces_subsurface, localX, localY);
for (int i = 0; i < BUFFERS_COUNT; i++) {
destroy_buffer(&splash->buffers[i]);
splash->buffers[i].available = false;
}
struct wl_region *region = wl_compositor_create_region(splash->wl_state->wl_compositor);
wl_region_subtract(region, 0, 0, splash->window_width, splash->window_height);
wl_region_add(region, localX, localY, splash->width / outputScale, splash->height / outputScale);
wl_surface_set_input_region(splash->wl_state->wl_surface, region);
wl_region_destroy(region);
for (int i = 0; i < BUFFERS_COUNT; i++) {
if (!alloc_buffer(splash->width, splash->height, splash->wl_state->wl_shm, &splash->buffers[i],
WL_SHM_FORMAT_ARGB8888, 4)) {
fprintf(stderr, "%s\n", "Cannot allocate enough memory");
return false;
}
wl_buffer_add_listener(splash->buffers[i].wl_buffer, &wl_buffer_listener, &splash->buffers[i]);
splash->buffers[i].available = true;
}
splash->wl_state->cursor_theme = wl_cursor_theme_load(NULL, 32 * outputScale, splash->wl_state->wl_shm);
NULL_CHECK(splash->wl_state->cursor_theme, "unable to load default theme\n")
splash->wl_state->default_cursor = wl_cursor_theme_get_cursor(splash->wl_state->cursor_theme, "watch");
NULL_CHECK(splash->wl_state->default_cursor, "unable to load pointer\n")
if (splash->wl_state->cursor_surface) {
wl_surface_set_buffer_scale(splash->wl_state->cursor_surface, outputScale);
}
}
if (!alloc_buffer(splash->window_width * splash->native_scale, splash->window_height * splash->native_scale,
splash->state->wl_shm, &splash->main_buffer, WL_SHM_FORMAT_ARGB8888, 4)) {
destroy_buffer(splash->main_buffer);
if (!alloc_buffer(splash->window_width, splash->window_height,
splash->wl_state->wl_shm, splash->main_buffer, WL_SHM_FORMAT_ARGB8888, 4)) {
fprintf(stderr, "%s\n", "Cannot allocate enough memory");
return false;
}
memset(splash->main_buffer.data, 0, splash->window_width * splash->window_height * 4);
wl_surface_attach(splash->state->wl_surface, splash->main_buffer.wl_buffer, 0, 0);
wl_surface_damage(splash->state->wl_surface, 0, 0, splash->window_width, splash->window_height);
wl_surface_commit(splash->state->wl_surface);
memset(splash->main_buffer->data, 0, splash->window_width * splash->window_height * 4);
wl_surface_attach(splash->wl_state->wl_surface, splash->main_buffer->wl_buffer, 0, 0);
wl_surface_damage(splash->wl_state->wl_surface, 0, 0, splash->window_width, splash->window_height);
wl_surface_commit(splash->wl_state->wl_surface);
if (splash->wl_state->wl_output) {
splash->initialized = true;
}
SplashRedrawWindow(splash);
return true;
@@ -411,13 +476,17 @@ SplashReconfigureNow(Splash * splash) {
void
SplashRedrawWindow(Splash * splash) {
if (!splash->initialized) {
return;
}
for (int i = 0; i < BUFFERS_COUNT; i++) {
if (splash->buffers[i].available) {
splash->screenData = splash->buffers[i].data;
SplashUpdateScreenData(splash, true);
wl_surface_attach(splash->state->wl_subsurfaces_surface, splash->buffers[i].wl_buffer, 0, 0);
wl_surface_damage(splash->state->wl_subsurfaces_surface, 0, 0, splash->window_width, splash->window_height);
wl_surface_commit(splash->state->wl_subsurfaces_surface);
wl_surface_attach(splash->wl_state->wl_subsurfaces_surface, splash->buffers[i].wl_buffer, 0, 0);
wl_surface_damage(splash->wl_state->wl_subsurfaces_surface, 0, 0, splash->window_width, splash->window_height);
wl_surface_commit(splash->wl_state->wl_subsurfaces_surface);
splash->buffers[i].available = false;
break;
}
@@ -426,39 +495,37 @@ SplashRedrawWindow(Splash * splash) {
bool
FlushEvents(Splash * splash) {
return wl_display_flush(splash->state->wl_display) != -1;
return wl_display_flush(splash->wl_state->wl_display) != -1;
}
bool
DispatchEvents(Splash * splash) {
return wl_display_dispatch(splash->state->wl_display) != -1;
return wl_display_dispatch(splash->wl_state->wl_display) != -1;
}
int
GetDisplayFD(Splash * splash) {
return wl_display_get_fd(splash->state->wl_display);
return wl_display_get_fd(splash->wl_state->wl_display);
}
void
SplashUpdateCursor(Splash * splash) {
static int index = 0;
if (is_cursor_animated) {
wayland_state *state = splash->state;
struct wl_buffer *buffer;
struct wl_cursor *cursor = state->default_cursor;
struct wl_cursor_image *image;
wayland_state *state = splash->wl_state;
struct wl_buffer *buffer;
struct wl_cursor *cursor = state->default_cursor;
struct wl_cursor_image *image;
if (cursor) {
image = state->default_cursor->images[index];
index = (index + 1) % (state->default_cursor->image_count);
buffer = wl_cursor_image_get_buffer(image);
if (!buffer)
return;
wl_surface_attach(state->cursor_surface, buffer, 0, 0);
wl_surface_damage(state->cursor_surface, 0, 0, image->width, image->height);
wl_surface_commit(state->cursor_surface);
}
if (cursor) {
image = state->default_cursor->images[index];
index = (index + 1) % (state->default_cursor->image_count);
buffer = wl_cursor_image_get_buffer(image);
if (!buffer)
return;
wl_surface_attach(state->cursor_surface, buffer, 0, 0);
wl_surface_damage(state->cursor_surface, 0, 0, image->width, image->height);
wl_surface_commit(state->cursor_surface);
}
}
@@ -474,21 +541,22 @@ SplashDonePlatform(Splash * splash) {
return;
}
DESTROY_NOT_NULL(splash->state->wl_shm, wl_shm_destroy)
DESTROY_NOT_NULL(splash->state->wl_compositor, wl_compositor_destroy)
DESTROY_NOT_NULL(splash->state->wl_subcompositor, wl_subcompositor_destroy)
DESTROY_NOT_NULL(splash->state->wl_seat, wl_seat_destroy)
DESTROY_NOT_NULL(splash->state->xdg_wm_base, xdg_wm_base_destroy)
DESTROY_NOT_NULL(splash->state->wl_subsurfaces_subsurface, wl_subsurface_destroy)
DESTROY_NOT_NULL(splash->wl_state->wl_shm, wl_shm_destroy)
DESTROY_NOT_NULL(splash->wl_state->wl_compositor, wl_compositor_destroy)
DESTROY_NOT_NULL(splash->wl_state->wl_subcompositor, wl_subcompositor_destroy)
DESTROY_NOT_NULL(splash->wl_state->wl_seat, wl_seat_destroy)
DESTROY_NOT_NULL(splash->wl_state->xdg_wm_base, xdg_wm_base_destroy)
DESTROY_NOT_NULL(splash->wl_state->wl_subsurfaces_subsurface, wl_subsurface_destroy)
DESTROY_NOT_NULL(splash->state->wl_surface, wl_surface_destroy)
DESTROY_NOT_NULL(splash->state->wl_subsurfaces_surface, wl_surface_destroy)
DESTROY_NOT_NULL(splash->state->xdg_surface, xdg_surface_destroy)
DESTROY_NOT_NULL(splash->state->xdg_toplevel, xdg_toplevel_destroy)
DESTROY_NOT_NULL(splash->state->pointer, wl_pointer_destroy)
DESTROY_NOT_NULL(splash->state->cursor_surface, wl_surface_destroy)
DESTROY_NOT_NULL(splash->wl_state->wl_surface, wl_surface_destroy)
DESTROY_NOT_NULL(splash->wl_state->wl_subsurfaces_surface, wl_surface_destroy)
DESTROY_NOT_NULL(splash->wl_state->xdg_surface, xdg_surface_destroy)
DESTROY_NOT_NULL(splash->wl_state->xdg_toplevel, xdg_toplevel_destroy)
DESTROY_NOT_NULL(splash->wl_state->pointer, wl_pointer_destroy)
DESTROY_NOT_NULL(splash->wl_state->cursor_surface, wl_surface_destroy)
destroy_buffer(&splash->main_buffer);
destroy_buffer(splash->main_buffer);
free(splash->main_buffer);
if (splash->buffers) {
for (int i = 0; i < BUFFERS_COUNT; i++) {
destroy_buffer(&splash->buffers[i]);
@@ -496,12 +564,12 @@ SplashDonePlatform(Splash * splash) {
free(splash->buffers);
}
if (splash->state->wl_display) {
wl_display_flush(splash->state->wl_display);
wl_display_disconnect(splash->state->wl_display);
if (splash->wl_state->wl_display) {
wl_display_flush(splash->wl_state->wl_display);
wl_display_disconnect(splash->wl_state->wl_display);
}
free(splash->state);
free(splash->wl_state);
}
void

View File

@@ -217,9 +217,12 @@ vmTestbase/nsk/jdi/LaunchingConnector/launch/launch001/TestDescription.java init
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/stress/ClassPrepareEvents/ClassPrepareEvents001/ClassPrepareEvents001.java JBR-6470 macosx-x64
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/type003/TestDescription.java time_out_intermittent macosx-all
vmTestbase/nsk/jdi/VirtualMachine/allThreads/allthreads001/TestDescription.java JBR-6530 macosx-all
vmTestbase/nsk/jdi/VirtualMachine/canGetMonitorInfo/cangetmonitorinfo001/TestDescription.java JBR-6361 macosx-all
vmTestbase/metaspace/gc/firstGC_10m/TestDescription.java 8208250 generic-all

View File

@@ -1,31 +0,0 @@
#!/usr/bin/env bash
# @test
# @summary CDSArchivesTest.sh checks jsa files exist in jbrsdk distributions, jbr distributions are skipped
# @run shell CDSArchivesTest.sh
if [ -z "${TESTJAVA}" ]; then
echo "TESTJAVA undefined: testing cancelled"
exit 1
fi
source ${TESTJAVA}/release
echo "Checking $IMPLEMENTOR_VERSION"
if [[ "$IMPLEMENTOR_VERSION" != *"JBRSDK"* ]]; then
echo "Test executed for JBRSDK only"
echo "skipping the test"
exit 0
fi
FIND="/usr/bin/find"
files=$(${FIND} ${TESTJAVA} -name "*.jsa")
ls -l $files
if [ $? != 0 ]; then
echo "Command failed."
exit 1
elif [ -z "$files" ]; then
echo "*** FAILED *** jsa-files not found"
echo "\n*** FAILED *** Test failed"
exit 1
fi
echo "\nTest passed"

View File

@@ -52,6 +52,7 @@ public class PopupIncomingFocusTest {
SwingUtilities.invokeAndWait(PopupIncomingFocusTest::init);
robot.delay(1000);
launchProcessWithWindow();
robot.delay(1000);
clickAt(button);
popupOpened.get(10, TimeUnit.SECONDS);
clickAt(400, 100); // other process' window
@@ -70,7 +71,7 @@ public class PopupIncomingFocusTest {
popup.setVisible(true);
});
frame = new JFrame();
frame = new JFrame("PIFT");
frame.add(button);
frame.setBounds(50, 50, 200, 100);
@@ -117,29 +118,23 @@ public class PopupIncomingFocusTest {
private static void launchProcessWithWindow() throws Exception {
String javaPath = System.getProperty("java.home") + File.separator + "bin" + File.separator + "java";
File tmpFile = File.createTempFile("PopupIncomingFocusTest", ".java");
tmpFile.deleteOnExit();
Files.writeString(tmpFile.toPath(), "import javax.swing.*;\n" +
"import java.awt.event.*;\n" +
"\n" +
"public class TestWindow {\n" +
" public static void main(String[] args) {\n" +
" SwingUtilities.invokeLater(() -> {\n" +
" JFrame f = new JFrame();\n" +
" f.addWindowFocusListener(new WindowAdapter() {\n" +
" @Override\n" +
" public void windowGainedFocus(WindowEvent e) {\n" +
" System.out.println();\n" +
" }\n" +
" });\n" +
" f.setBounds(300, 50, 200, 100);\n" +
" f.setVisible(true);\n" +
" });\n" +
" }\n" +
"}\n");
otherProcess = Runtime.getRuntime().exec(new String[]{javaPath, tmpFile.getAbsolutePath()});
otherProcess = Runtime.getRuntime().exec(new String[]{javaPath,
"-cp",
System.getProperty("java.class.path"),
"PopupIncomingFocusTestChild"});
if (otherProcess.getInputStream().read() == -1) {
throw new RuntimeException("Error starting process");
}
}
}
class PopupIncomingFocusTestChild {
public static void main(String[] args) throws Exception {
SwingUtilities.invokeAndWait(() -> {
JFrame f = new JFrame("PIFT 2");
f.setBounds(300, 50, 200, 100);
f.setVisible(true);
});
System.out.println();
}
}

View File

@@ -23,6 +23,7 @@
import java.awt.Robot;
import java.awt.Toolkit;
import java.lang.reflect.InvocationTargetException;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javax.swing.WindowConstants;
@@ -85,10 +86,17 @@ public class GetScreenInsets468 implements Runnable {
}
}
private void disposeAll() {
private void disposeAll() throws InterruptedException, InvocationTargetException {
for (JFrame frame : frames) {
frame.setVisible(false);
frame.dispose();
SwingUtilities.invokeAndWait(() -> {
frame.setVisible(false);
});
SwingUtilities.invokeAndWait(() -> {
frame.dispose();
});
robot.delay(100);
}
}

View File

@@ -63,7 +63,6 @@ javax/swing/JToolTip/bug5047379.java JBR-5397 macosx-all
javax/swing/JTree/4518432/JTreeNodeCopyPasteTest.java JBR-5397 macosx-all
javax/swing/JTree/4618767/JTreeSelectedElementTest.java JBR-5397 macosx-all
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java JBR-5397 macosx-all
javax/swing/plaf/aqua/CustomComboBoxFocusTest.java JBR-5397 macosx-all
javax/swing/plaf/aqua/JInternalFrameBorderTest.java JBR-5397 macosx-all
javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java JBR-5397 macosx-all
javax/swing/plaf/synth/7158712/bug7158712.java JBR-5397 macosx-all

View File

@@ -111,14 +111,12 @@
############################################################################
java/awt/event/MouseEvent/AcceptExtraButton/AcceptExtraButton.java JBR-6353 linux-x64,windows-aarch64,macosx-all
java/awt/FlowLayout/PreferredLayoutSize.java JBR-6349 linux-all
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java NOBUG windows-all timeout
java/awt/MenuItem/EnableTest.java NOBUG windows-all timeout
java/awt/Robot/NonEmptyErrorStream.java JBR-6275 macosx-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8233582,JBR-6360 linux-all,windows-all
javax/swing/plaf/synth/SynthButtonUI/6276188/bug6276188.java NOBUG macosx-all Synth ButtonUI does not handle PRESSED & MOUSE_OVER state
javax/swing/plaf/nimbus/8041642/ScrollBarThumbVisibleTest.java JBR-6485 linux-all
javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-6274 windows-x64,macosx-all
jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-2651 generic-all
jb/java/awt/Focus/PopupIncomingFocusTest.java JBR-2651 generic-all
jb/sun/awt/macos/InputMethodTest/KeyCodesTest.java JBR-6480 macosx-x64

View File

@@ -1,27 +1,24 @@
java/awt/Choice/ChoiceGeneratesItemEvents.java JBR-6284 linux-all
java/awt/Choice/ChoicePopupLocation/ChoicePopupLocation.java 8202931,JBR-5398 macosx-all,linux-all,windows-all
java/awt/Choice/ChoiceStaysOpenedOnTAB.java JBR-6284 linux-all
java/awt/Debug/X11Trace.java JBR-5442 linux-all
java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java JBR-6294 linux-all
java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-6058 windows-all
java/awt/EmbeddedFrame/GraphicsConfigTest/GraphicsConfigTest.java 8305515
java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java 8311535 windows-all
java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java 8292588,JBR-6058 macosx-all,windows-all,linux-all
java/awt/Multiscreen/WindowGCChangeTest/WindowGCChangeTest.java JBR-5531 macosx-all,linux-all
java/awt/Frame/FramesGC/FramesGC.java JBR-6057 windows-all
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-5117,JBR-6509 linux-all,generic-all
java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenSmall.java JBR-4379 windows-all
java/awt/Frame/SetMaximizedBounds/SetMaximizedBounds.java JBR-4379 windows-all
java/awt/FullScreen/CurrentDisplayModeTest/CurrentDisplayModeTest.java JBR-5059 linux-all
java/awt/FullScreen/MultimonFullscreenTest/MultimonDeadlockTest.java JBR-4379 windows-all
java/awt/Frame/FramesGC/FramesGC.java 8079069,JBR-6057 macosx-all,windows-all
java/awt/Graphics2D/DrawString/DisposerTest.java JBR-5442 linux-all
java/awt/GraphicsDevice/DisplayModes/CompareToXrandrTest.java JBR-5062 linux-all
java/awt/GraphicsDevice/DisplayModes/UnknownRefrshRateTest.java JBR-6336 macosx-aarch64
java/awt/GraphicsDevice/IncorrectDisplayModeExitFullscreen.java JBR-6336 macosx-aarch64
java/awt/datatransfer/Clipboard/GetContentsInterruptedTest.java JBR-5086 linux-5.15.0-46-generic Ubuntu 20.04
java/awt/dnd/MissedDragEnterTest.java JBR-6091 windows-all
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-5117 linux-all
java/awt/LightweightDispatcher/LWDispatcherMemoryLeakTest.java 8311535 windows-all
java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java#id1 JBR-5442 linux-all
java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184,JBR-5442 windows-all,linux-all
java/awt/MouseInfo/MultiscreenPointerInfo.java JBR-5442 linux-all
java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java 8253184,JBR-5442 windows-all,linux-all
java/awt/Multiscreen/MultiScreenLocationTest/MultiScreenLocationTest.java JBR-5442 linux-all
java/awt/Multiscreen/WindowGCChangeTest/WindowGCChangeTest.java JBR-5531,JBR-5442 macosx-all,linux-all
java/awt/Multiscreen/UpdateGCTest/UpdateGCTest.java JBR-5442 linux-all
java/awt/PopupMenu/PopupMenuLocation.java 8238720,JBR-5442 windows-all,linux-all
java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184,JBR-5510,JBR-5442,JBR-6092 windows-all,linux-all,macosx-aarch64
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184,JBR-5442 windows-all,linux-all
java/awt/Frame/FramesGC/FramesGC.java JBR-6057 windows-all,macosx-all
java/awt/Robot/NonEmptyErrorStream.java JBR-5442 linux-all
java/awt/Robot/MouseLocationOnScreen/MouseLocationOnScreen.java JBR-5390 macosx-all,linux-all
java/awt/Robot/NonEmptyErrorStream.java JBR-5442 linux-all
java/awt/Robot/RobotMoveMultiscreen.java JBR-5442 linux-all
@@ -29,41 +26,24 @@ java/awt/TextArea/TextAreaEditing/TextAreaEditing.java JBR-6282 linux-all
java/awt/Toolkit/AWTEventListenerProxyTest/AWTEventListenerProxyTest.java JBR-6065 windows-all
java/awt/Window/SlowMotion/SlowMotion.java JBR-5442 linux-all
java/awt/Window/WindowSizeDifferentScreens/WindowSizeDifferentScreens.java JBR-5442 linux-all
java/awt/dnd/MissingEventsOnModalDialog/MissingEventsOnModalDialogTest.java JBR-5442 linux-all
java/awt/im/memoryleak/InputContextMemoryLeakTest.java JBR-6065 windows-all
java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-5442 linux-all
javax/swing/GraphicsConfigNotifier/TestMultiScreenGConfigNotify.java JBR-5442 linux-all
javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-6100 linux-all
javax/swing/JInternalFrame/Test6325652.java JBR-6065 windows-all
javax/swing/JMenu/4692443/bug4692443.java JBR-6065 windows-all
javax/swing/JMenuBar/4750590/bug4750590.java JBR-6065 windows-all
javax/swing/JMenuItem/4171437/bug4171437.java JBR-6065 windows-all
javax/swing/JTable/7124218/SelectEditTableCell.java JBR-5442 linux-all
javax/swing/JTextArea/8149849/DNDTextToScaledArea.java JBR-6296 linux-all
javax/swing/JTextField/8036819/bug8036819.java JBR-6065 windows-all
javax/swing/JTree/4927934/bug4927934.java JBR-6065 windows-all
javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-5442 linux-all
javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8253184,JBR-5510,JBR-5442 windows-all,linux-all
javax/swing/SwingWorker/TestDoneBeforeDoInBackground.java JBR-5442 linux-all
javax/swing/text/html/StyleSheet/bug4936917.java JBR-899,JBR-5510,JBR-5442 windows-all,linux-all
javax/swing/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952,JBR-5442 windows-x64,linux-all
javax/swing/JTextArea/8149849/DNDTextToScaledArea.java JBR-5442 linux-all
javax/swing/system/6799345/TestShutdown.java JBR-6020 windows-all
javax/swing/plaf/basic/BasicGraphicsUtils/8132119/bug8132119.java JBR-4379 windows-all,linux-all
jb/java/awt/dnd/DnDScalingWithHIDPI/DnDScalingWithHIDPITest.java JBR-5442 linux-all
java/awt/event/MouseEvent/AcceptExtraButton/AcceptExtraButton.java JBR-6353 linux-x64,windows-aarch64,macosx-all
java/awt/Choice/ChoiceGeneratesItemEvents.java JBR-551 linux-all
java/awt/Choice/ChoiceStaysOpenedOnTAB.java JBR-5510 linux-all
java/awt/Choice/PopdownGeneratesMouseEvents/PopdownGeneratesMouseEvents.java JBR-5510 linux-all
java/awt/ColorClass/AlphaColorTest.java JBR-5359,JBR-5510 windows-aarch64,linux-all
java/awt/Component/RepaintTest.java JBR-5359,JBR-5510 windows-aarch64,linux-all
java/awt/ColorClass/AlphaColorTest.java 8277816,JBR-5359,JBR-5510 macosx-aarch64,windows-aarch64,linux-all
java/awt/Dialog/DialogAboveFrame/DialogAboveFrameTest.java JBR-5210,JBR-5510 windows-all,linux-all
java/awt/dnd/DnDTestWithHIDPI/DragTestWithHIDPI.java NOBUG linux-all
java/awt/FlowLayout/PreferredLayoutSize.java JBR-6349 linux-all
java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-5359,JBR-5510 windows-aarch64,linux-all
java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java JBR-5210 windows-all,linux-all
java/awt/Graphics/XORPaint.java#id2 NOBUG linux-all
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/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-5510 windows-all,linux-all
java/awt/image/multiresolution/MultiResolutionJOptionPaneIconTest.java 8253184,JBR-5510 windows-all,linux-all
java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-5359 windows-aarch64,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/Menu/OpensWithNoGrab/OpensWithNoGrab.java JBR-5510 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
@@ -71,8 +51,7 @@ java/awt/Mixing/AWT_Mixing/JColorChooserOverlapping.java 8158801,JBR-5510 window
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5359,JBR-5510 macosx-all,windows-aarch64,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/JGlassPaneInternalFrameOverlapping.java JBR-5359,JBR-5510 windows-aarch64,linux-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5359,JBR-5510 windows-aarch64,linux-all
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5359,JBR-5510,JBR-6134 windows-aarch64,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-5359,JBR-5510 windows-aarch64,linux-all
java/awt/Mixing/AWT_Mixing/JLabelInGlassPaneOverlapping.java 8158801,JBR-5510 windows-all,linux-all
@@ -86,7 +65,7 @@ java/awt/Mixing/AWT_Mixing/JProgressBarInGlassPaneOverlapping.java 8158801,JBR-5
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 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
@@ -99,52 +78,58 @@ java/awt/Mixing/AWT_Mixing/JTextFieldInGlassPaneOverlapping.java 8158801,JBR-551
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 8158801,JBR-5510 windows-all,linux-all
java/awt/Modal/BlockedMouseInputTest.java NOBUG 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 macosx-all,windows-all,linux-all
java/awt/Modal/MultipleDialogs/MultipleDialogs4Test.java 8198665,8253184,JBR-5510,JBR-6284 macosx-all,windows-all,linux-all
java/awt/Modal/BlockedMouseInputTest.java nobug linux-all
java/awt/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/PopupMenu/PopupMenuStayOpen.java NOBUG linux-all
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184,NOBUG windows-all,linux-all
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureGtkTest.java NOBUG linux-all
java/awt/PopupMenu/PopupMenuLocation.java 8238720,8288415 windows-all,macosx-all,linux-all
java/awt/PopupMenu/PopupMenuStayOpen.java JBR-6286 linux-all
java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8277816,8253184,JBR-5510 macosx-aarch64,windows-all,linux-all
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8277816,8253184 macosx-aarch64,windows-all,linux-all
java/awt/Window/8159168/SetShapeTest.java 8253184,JBR-5510 windows-all,linux-all
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5359,JBR-5510 windows-aarch64,linux-all
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-5510,JBR-5359 linux-all,windows-aarch64
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5359,JBR-5510 windows-all,linux-all
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java 8222323,JBR-5510 windows-all,linux-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/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-5359,JBR-5510 windows-aarch64,linux-all
java/awt/Window/WindowTitleVisibleTest/WindowTitleVisibleTestLinuxGnome.java NOBUG linux-all
javax/swing/JButton/8151303/PressedIconTest.java JBR-5210,JBR-5510 windows-all,linux-all
javax/swing/JComponent/7154030/bug7154030.java JBR-5359,JBR-5510 windows-aarch64,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 8266246,JBR-5210,JBR-5510 macosx-aarch64,windows-all,linux-all
javax/swing/JComponent/7154030/bug7154030.java 8297454,JBR-5359,JBR-5510 macosx-all,windows-aarch64,linux-all
javax/swing/JDialog/Transparency/TransparencyTest.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/JEditorPane/8195095/ImageViewTest.java 8253184,JBR-5510,JBR-6283 windows-all,linux-all,macos-all
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5359,JBR-5510 windows-aarch64,linux-all
javax/swing/JFormattedTextField/TestSelectedTextBackgroundColor.java JBR-5510,JBR-6160 linux-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5359,JBR-5510 windows-aarch64,linux-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java 8274106,JBR-5359,JBR-5510 macosx-aarch64,windows-all,linux-all
javax/swing/JInternalFrame/5066752/bug5066752.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java JBR-5359,JBR-5510 windows-aarch64,linux-all
javax/swing/JInternalFrame/8160248/JInternalFrameDraggingTest.java 8277816,JBR-5359,JBR-5510 macosx-aarch64,windows-aarch64,linux-all
javax/swing/JMenu/JMenuSelectedColorTest.java JBR-5510 linux-all
javax/swing/JMenu/TestDisabledMenuForegroundColor.java JBR-5510 linux-all
javax/swing/JPasswordField/TestSelectedTextBackgroundColor.java JBR-5510 linux-all
javax/swing/JProgressBar/TestJProgressBarHighlightColor.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-5359,JBR-5510 windows-aarch64,linux-all
javax/swing/JSlider/TestJSliderRendering.java JBR-5510 linux-all
javax/swing/JSpinner/4670051/DateFieldUnderCursorTest.java JBR-5510 linux-all
javax/swing/JSpinner/TestSelectedTextBackgroundColor.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-5359,JBR-5510 windows-aarch64,linux-all
javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5359,JBR-5510 macosx-all,windows-aarch64,linux-all
javax/swing/JTextPane/TestJTextPaneBackgroundColor.java JBR-5510 linux-all
javax/swing/JToolTip/TestTooltipBackgroundColor.java JBR-5510 linux-all
javax/swing/JTree/TestTreeBackgroundColor.java JBR-5510 linux-all
javax/swing/JTable/7124218/SelectEditTableCell.java nobug 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 windows-all,linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128,8253184,JBR-5510 macosx-all,windows-all,linux-all
javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/plaf/metal/MetalGradient/8163193/ButtonGradientTest.java 8277816,8253184,JBR-5510 macosx-aarch64,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-5359,JBR-5510 windows-aarch64,linux-all
javax/swing/plaf/nimbus/8057791/bug8057791.java 8253184,JBR-5510 windows-all,linux-all
javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-5359,NOBUG windows-aarch64,linux-all
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5359,JBR-5510,JBR-5951 windows-aarch64,linux-all,windows-x64
sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-5510 windows-all,macosx-all,linux-all
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5359,JBR-5510 windows-aarch64,linux-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5359,JBR-5366,JBR-5510 windows-all,linux-all
sun/java2d/GdiRendering/InsetClipping.java 7124403,JBR-5359,JBR-5366,JBR-5510 windows-all,macosx-all,windows-aarch64,linux-all
javax/swing/text/html/StyleSheet/bug4936917.java 8277816,JBR-899,JBR-5510 windows-all,macosx-aarch64,linux-all
jb/java/awt/MouseInfo/GetPointerInfoTest.java nobug linux-all
jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java JBR-6486 macosx-all
sun/java2d/GdiRendering/ClipShapeRendering.java 8285604,JBR-5510 windows-all,linux-all
sun/java2d/GdiRendering/InsetClipping.java 7124403,JBR-5359,JBR-5510 windows-x64,macosx-all,windows-aarch64,linux-all

View File

@@ -115,10 +115,11 @@
java/awt/Button/DisabledButtonPress.java JBR-5799 windows-aarch64
java/awt/Desktop/8064934/bug8064934.java JBR-5764 windows-all
java/awt/Debug/DumpOnKey/DumpOnKey.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/Debug/DumpOnKey/DumpOnKey.java JBR-5225 windows-all
java/awt/event/MouseEvent/MouseClickTest/MouseClickTest.java 8168389 windows-all,macosx-all
java/awt/event/KeyEvent/CorrectTime/CorrectTime.java 6626492 linux-all
java/awt/event/KeyEvent/SwallowKeyEvents/SwallowKeyEvents.java 8224055 macosx-all
java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6479 generic-all
java/awt/FlowLayout/PreferredLayoutSize.java JBR-6349 linux-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
@@ -131,6 +132,7 @@ java/awt/Focus/OwnedWindowFocusIMECrashTest/OwnedWindowFocusIMECrashTest.java 81
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/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-6509 generic-all
java/awt/Frame/MaximizedUndecorated/MaximizedUndecorated.java 8022302 generic-all
java/awt/Frame/MaximizedToIconified/MaximizedToIconified.java 8296972 macosx-all
java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenBig.java JBR-5303 windows-all
@@ -140,17 +142,21 @@ java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion.java 8060176
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_1.java 8060176,8204200 windows-all,macosx-all,linux-all
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_2.java 8204200 windows-all,macosx-all,linux-all
java/awt/event/MouseWheelEvent/InfiniteRecursion/InfiniteRecursion_4.java 8204200 windows-all,macosx-all,linux-all
java/awt/event/MouseWheelEvent/WheelModifier/WheelModifier.java JBR-94 windows-x64,linux-all
java/awt/dnd/DropActionChangeTest.java JBR-6489 generic-all
java/awt/dnd/DropTargetEnterExitTest/ExtraDragEnterTest.java 8029680 generic-all
java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java JBR-5730 linux-all
java/awt/dnd/DropTargetEnterExitTest/MissedDragExitTest.java JBR-5730 linux-al
java/awt/dnd/MissedDragEnterTest.java JBR-6091 windows-alll
java/awt/dnd/MissingDragExitEventTest/MissingDragExitEventTest.java 8288839,JBR-5727,JBR-5959 windows-all,linux-all
java/awt/dnd/ModalDialogOnDropDeadlockTest.java JBR-6529 windows-all
java/awt/dnd/NextDropActionTest/NextDropActionTest.java 8313633 macosx-aarch64
java/awt/dnd/MissingDragExitEventTest/MissingDragExitEventTest.java 8288839,JBR-5727,JBR-5959 windows-x64,linux-all, windows-aarch64
java/awt/dnd/URIListBetweenJVMsTest/URIListBetweenJVMsTest.java 8171510,JBR-881 macosx-all,linux-all
javax/swing/dnd/7171812/bug7171812.java 8041447,8253184 macosx-all,windows-all
java/awt/Focus/ChildWindowFocusTest/ChildWindowFocusTest.java JBR-5545 linux-all,windows-all
java/awt/Focus/ChoiceFocus/ChoiceFocus.java 8169103 windows-all,macosx-all
java/awt/Focus/ClearGlobalFocusOwnerTest/ClearGlobalFocusOwnerTest.java JBR-5907 linux-all
java/awt/Focus/ClearLwQueueBreakTest/ClearLwQueueBreakTest.java 8198618,JBR-814 macosx-all,linux-all
java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/Focus/CloseDialogActivateOwnerTest/CloseDialogActivateOwnerTest.java JBR-5225 windows-all
java/awt/Focus/ConsumeNextKeyTypedOnModalShowTest/ConsumeNextKeyTypedOnModalShowTest.java 6986252,JBR-5178 macosx-all,windows-all
java/awt/Focus/ConsumedTabKeyTest.java JBR-5833 windows-all
java/awt/Focus/KeyEventForBadFocusOwnerTest/KeyEventForBadFocusOwnerTest.java JBR-5210 windows-all
@@ -163,7 +169,7 @@ java/awt/Focus/WrongKeyTypedConsumedTest/WrongKeyTypedConsumedTest.java 8169096,
java/awt/EventQueue/6980209/bug6980209.java 8198615 macosx-all
java/awt/Frame/ExceptionOnSetExtendedStateTest/ExceptionOnSetExtendedStateTest.java 8198237 macosx-all
java/awt/Frame/SetMinimumSizeTest/SetMinimumSizeTest2.java JBR-5210 windows-all
java/awt/Frame/ShapeNotSetSometimes/ShapeNotSetSometimes.java JBR-5210 windows-all,linux-5.18.2-arch1-1
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/grab/GrabOnUnfocusableToplevel/GrabOnUnfocusableToplevel.java 8169109,JBR-4880 linux-all,windows-all
java/awt/event/InputEvent/EventWhenTest/EventWhenTest.java 8168646 generic-all
@@ -175,7 +181,7 @@ java/awt/Mixing/AWT_Mixing/JMenuBarOverlapping.java 8159451 linux-all,windows-al
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/MixingPanelsResizing.java 8049405 generic-all
java/awt/Mixing/AWT_Mixing/JComboBoxOverlapping.java 8049405,JBR-5359,JBR-5510 macosx-all,windows-aarch64,linux-5.18.2-arch1-1
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
@@ -213,19 +219,19 @@ java/awt/Mixing/ValidBounds.java 8253184 windows-all
java/awt/Mixing/Validating.java JBR-5908 linux-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 windows-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/UnicodeTransferTest/UnicodeTransferTest.java 8300704 linux-all
java/awt/Toolkit/ScreenInsetsTest/ScreenInsetsTest.java JBR-5812 linux-all
java/awt/Toolkit/SecurityTest/SecurityTest2.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/Toolkit/SecurityTest/SecurityTest2.java JBR-5225 windows-all
java/awt/Toolkit/SunDisplayChangerLeakTest/SunDisplayChangerLeakTest.java JBR-5051 windows-all
java/awt/Toolkit/RealSync/Test.java 6849383,8072110 linux-all,windows-all
java/awt/LightweightComponent/LightweightEventTest/LightweightEventTest.java 8159252,JBR-5050 windows-all,macosx-all
java/awt/EventDispatchThread/HandleExceptionOnEDT/HandleExceptionOnEDT.java 8072110,8203047 macosx-all,linux-all
java/awt/EventDispatchThread/LoopRobustness/LoopRobustness.java 8073636,JBR-4211 macosx-all,linux-all
java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/EventDispatchThread/PropertyPermissionOnEDT/PropertyPermissionOnEDT.java JBR-5225 windows-all
java/awt/FullScreen/AltTabCrashTest/AltTabCrashTest.java JBR-4905 windows-all,linux-all
java/awt/FullScreen/FullScreenInsets/FullScreenInsets.java 7019055,8266245 windows-all,linux-all,macosx-aarch64
java/awt/FullScreen/FullscreenWindowProps/FullscreenWindowProps.java JBR-4275,JBR-4880,JBR-5837 linux-all,windows-all,macosx-all
@@ -238,7 +244,6 @@ java/awt/Focus/8000326/SetFocusTraversalKeysEnabledTest.java JBR-4997,JBR-5729 w
java/awt/Focus/8073453/AWTFocusTransitionTest.java JBR-5210,8298247 windows-all,linux-all
java/awt/Focus/8073453/SwingFocusTransitionTest.java JBR-5210 windows-all
java/awt/event/KeyEvent/AltCharAcceleratorTest/AltCharAcceleratorTest.java JBR-5210 windows-all
java/awt/event/KeyEvent/AltGraphModifier.java JBR-5359 windows-aarch64
java/awt/event/KeyEvent/ExtendedKeyCode/ExtendedKeyCodeTest.java 8169476 windows-all
java/awt/event/KeyEvent/KeyChar/KeyCharTest.java 8169474,8224055,JBR-93 windows-all,linux-all
java/awt/event/KeyEvent/KeyEventLocationTest.java JBR-5916 linux-all
@@ -254,19 +259,19 @@ java/awt/dnd/RejectDragDropActionTest.java JBR-5858 windows-10.0
java/awt/dnd/URIListToFileListBetweenJVMsTest/URIListToFileListBetweenJVMsTest.java 8194947 generic-all
java/awt/Frame/FramesGC/FramesGC.java 8079069 macosx-all
java/awt/ScrollPane/ScrollPanePreferredSize/ScrollPanePreferredSize.java 8253184 windows-all
java/awt/TrayIcon/ActionCommand/ActionCommand.java 8150540 windows-all
java/awt/TrayIcon/ActionEventMask/ActionEventMask.java 8150540,8242801,8295300 windows-all,macosx-all,linux-all
java/awt/TrayIcon/ActionCommand/ActionCommand.java 8150540,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/ActionEventMask/ActionEventMask.java 8150540,8242801,8295300,JBR-3107 windows-all,macosx-all,linux-all
java/awt/TrayIcon/ActionEventTest/ActionEventTest.java 8150540,8242801 windows-all,macosx-all
java/awt/TrayIcon/ModalityTest/ModalityTest.java 8150540,8295300 windows-all,macosx-all,linux-all
java/awt/TrayIcon/MouseEventMask/MouseEventMaskTest.java 8150540,8295300 windows-all,linux-all
java/awt/TrayIcon/MouseMovedTest/MouseMovedTest.java 8150540,8295300 windows-all,linux-all
java/awt/TrayIcon/SecurityCheck/FunctionalityCheck/FunctionalityCheck.java 8150540,8295300 windows-all,linux-all
java/awt/TrayIcon/SecurityCheck/NoPermissionTest/NoPermissionTest.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/TrayIcon/SecurityCheck/PermissionTest/PermissionTest.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/TrayIcon/TrayIconEventModifiers/TrayIconEventModifiersTest.java 8150540,8295300 windows-all,linux-all
java/awt/TrayIcon/TrayIconEvents/TrayIconEventsTest.java 8150540,8295300 windows-all,linux-all
java/awt/TrayIcon/TrayIconMouseTest/TrayIconMouseTest.java 8150540 windows-all
java/awt/TrayIcon/TrayIconPopup/TrayIconPopupClickTest.java 8150540 windows-all,macosx-all
java/awt/TrayIcon/ModalityTest/ModalityTest.java 8150540,8295300,JBR-3107 windows-all,macosx-all,linux-all
java/awt/TrayIcon/MouseEventMask/MouseEventMaskTest.java 8150540,8295300,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/MouseMovedTest/MouseMovedTest.java 8150540,8295300,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/SecurityCheck/FunctionalityCheck/FunctionalityCheck.java 8150540,8295300,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/SecurityCheck/NoPermissionTest/NoPermissionTest.java JBR-5225 windows-all
java/awt/TrayIcon/SecurityCheck/PermissionTest/PermissionTest.java JBR-5225 windows-all
java/awt/TrayIcon/TrayIconEventModifiers/TrayIconEventModifiersTest.java 8150540,8295300,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/TrayIconEvents/TrayIconEventsTest.java 8150540,8295300,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/TrayIconMouseTest/TrayIconMouseTest.java 8150540,JBR-3107 windows-all,linux-all
java/awt/TrayIcon/TrayIconPopup/TrayIconPopupClickTest.java 8150540,JBR-3107 windows-all,macosx-all,linux-all
java/awt/TrayIcon/TrayIconPopup/TrayIconPopupTest.java 8150540,JBR-3107 windows-all,linux-all
java/awt/Window/8027025/Test8027025.java 8253184 windows-all
@@ -279,8 +284,8 @@ java/awt/Window/ShapedAndTranslucentWindows/ShapedTranslucentWindowClick.java 80
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-5359 linux-5.18.2-arch1-1,windows-aarch64
java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Window/MultiWindowApp/ChildAlwaysOnTopTest.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Window/MultiWindowApp/MultiWindowAppTest.java 8253184,JBR-5510,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
@@ -289,11 +294,11 @@ java/awt/Window/ShapedAndTranslucentWindows/StaticallyShaped.java 8165218,822232
java/awt/Window/ShapedAndTranslucentWindows/Translucent.java 8222328 windows-all,linux-all,macosx-all
java/awt/Window/AlwaysOnTop/AutoTestOnTop.java 6847593,8253184 linux-all,windows-all
java/awt/Window/Grab/GrabTest.java 8253184 windows-all
java/awt/Window/GrabSequence/GrabSequence.java 6848409,JBR-5359 macosx-all,linux-all,windows-aarch64
java/awt/Window/GrabSequence/GrabSequence.java 6848409 macosx-all,linux-all
java/awt/Window/LocationAtScreenCorner/LocationAtScreenCorner.java 8203371 linux-all
java/awt/FontClass/FontAccess.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/FontClass/FontAccess.java JBR-5225 windows-all
java/awt/font/FontScaling/StretchedFontTest.java JBR-6225 macosx-all
java/awt/font/GlyphVector/NLGlyphTest.java 8273321,JBR-5355,JBR-5359 linux-all,windows-aarch64
java/awt/font/GlyphVector/NLGlyphTest.java 8273321,JBR-5355 linux-all
java/awt/font/JNICheck/JNICheck.sh JBR-5011 linux-all
java/awt/font/TextLayout/TextLayoutBounds.java 8169188 generic-all
java/awt/image/BufferedImage/ICMColorDataTest/ICMColorDataTest.java 8233028 generic-all
@@ -314,7 +319,7 @@ sun/java2d/SunGraphics2D/DrawImageBilinear.java 8297175 linux-all
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/Graphics2D/DrawString/DrawRotatedStringUsingRotatedFont.java 8266283 generic-all
java/awt/Graphics2D/DrawString/TextRenderingTest.java JBR-4260,JBR-5359 macosx-11.7.1,windows-aarch64
java/awt/Graphics2D/DrawString/TextRenderingTest.java JBR-4260 macosx-11.7.1
java/awt/Graphics2D/ScaledTransform/ScaledTransform.java 8277240 linux-all
sun/java2d/SunGraphics2D/EmptyClipRenderingTest.java 8144029 macosx-all,linux-all,windows-all
sun/java2d/SunGraphics2D/PolyVertTest.java 6986565 generic-all
@@ -324,22 +329,21 @@ sun/java2d/SunGraphics2D/SourceClippingBlitTest/SourceClippingBlitTest.java 8196
sun/java2d/pipe/InterpolationQualityTest.java JBR-5328 windows-all
java/awt/hidpi/ClientAreaOriginWindowsTest.java 8303491,JBR-630 windows-all
sun/java2d/X11SurfaceData/SharedMemoryPixmapsTest/SharedMemoryPixmapsTest.sh 8221451,JBR-5359 linux-all,macosx-all,windows-aarch64
sun/java2d/X11SurfaceData/SharedMemoryPixmapsTest/SharedMemoryPixmapsTest.sh 8221451 linux-all,macosx-all
java/awt/hidpi/ClientAreaOriginWindowsTest.java 8303491,JBR-630 windows-all
java/awt/hidpi/SetMaximizedBoundsTest.java JBR-5443 windows-all
java/awt/hidpi/properties/HiDPIPropertiesUnixTest.java JBR-495 macosx-all
java/awt/FullScreen/DisplayChangeVITest/DisplayChangeVITest.java 8169469,8273617 windows-all,macosx-aarch64
java/awt/FullScreen/DisplayChangeVITest/DisplayChangeVITest.java 8169469,8273617,JBR-6476 windows-all,macosx-aarch64,macosx-all
java/awt/FullScreen/UninitializedDisplayModeChangeTest/UninitializedDisplayModeChangeTest.java 7188711,8273617,JBR-4880,8253184 macosx-all,linux-all,windows-all
java/awt/print/PrinterJob/GetUserNameTest.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/print/PrinterJob/GetUserNameTest.java JBR-5225 windows-all
java/awt/print/PrinterJob/PSQuestionMark.java 7003378 generic-all
java/awt/print/PrinterJob/GlyphPositions.java 7003378 generic-all
java/awt/Choice/ChoiceLocationTest/ChoiceLocationTest.java JBR-5799 windows-all
java/awt/Choice/ChoiceFocusLostTest.java JBR-5799 windows-x64
java/awt/Choice/ChoiceHandleMouseEvent_2.java JBR-5359 windows-aarch64
java/awt/Choice/ChoiceMouseWheelTest/ChoiceMouseWheelTest.java 6849371,7100044,JBR-5210 macosx-all,linux-all,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-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/Component/RepaintTest.java JBR-5510 linux-5.18.2-arch1-1
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
@@ -505,8 +509,8 @@ java/awt/Mouse/EnterExitEvents/ResizingFrameTest.java 8005021,8253184 macosx-all
java/awt/Mouse/EnterExitEvents/FullscreenEnterEventTest.java 8051455 macosx-all
java/awt/Mouse/ExtraMouseClick/ExtraMouseClick.java 8253184,JBR-5709 windows-all,linux-all
java/awt/Mouse/MouseComboBoxTest/MouseComboBoxTest.java 8253184 windows-all
java/awt/Mouse/MouseModifiersUnitTest/ExtraButtonDrag.java 8253184,JBR-6407 windows-all,linux-5.4.0-1103-aws # 5.4.0-1103-aws - Ubuntu 18.04
java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersUnitTest_Standard.java 7124407 macosx-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/MouseAdapter/MouseAdapterUnitTest/MouseAdapterUnitTest.java 8253184 windows-all
java/awt/MouseInfo/ComponentMousePositionTest.java 8253184 windows-all
@@ -607,7 +611,7 @@ java/awt/List/ActionEventTest/ActionEventTest.java JBR-5799 windows-x64
java/awt/List/EmptyListEventTest/EmptyListEventTest.java JBR-5387 linux-all
java/awt/List/FirstItemRemoveTest/FirstItemRemoveTest.java JBR-86 windows-x64
java/awt/List/ItemEventTest/ItemEventTest.java JBR-5711 linux-all
java/awt/List/KeyEventsTest/KeyEventsTest.java JBR-5210,JBR-6273 windows-all,linux-aarch64
java/awt/List/KeyEventsTest/KeyEventsTest.java JBR-5210,JBR-6273,JBR-5706,JBR-6534 windows-all,linux-aarch64,linux-all
java/awt/List/ListMultipleSelectTest/ListMultipleSelectTest.java JBR-5555 windows-all
java/awt/List/NofocusListDblClickTest/NofocusListDblClickTest.java 8253184 windows-all
javax/print/PrintSEUmlauts/PrintSEUmlauts.java 8135174 generic-all
@@ -623,7 +627,7 @@ java/awt/Focus/NonFocusableWindowTest/NonfocusableOwnerTest.java 8280392
java/awt/Focus/NoFocusOwnerAWTTest.java JBR-5825 windows-all
java/awt/Focus/NoFocusOwnerSwingTest.java JBR-5825 windows-all
java/awt/Focus/TranserFocusToWindow/TranserFocusToWindow.java 6848810,JBR-5210 macosx-all,linux-all,windows-all
java/awt/FileDialog/ModalFocus/FileDialogModalFocusTest.java 8194751,JBR-5359 linux-all,windows-aarch64
java/awt/FileDialog/ModalFocus/FileDialogModalFocusTest.java 8194751 linux-all
java/awt/image/VolatileImage/BitmaskVolatileImage.java 8133102 linux-all
java/awt/SplashScreen/MultiResolutionSplash/MultiResolutionSplashTest.java 8134231,8279190 windows-all,linux-all,macosx-all
java/awt/SplashScreen/MultiResolutionSplash/unix/UnixMultiResolutionSplashTest.java 8203004 linux-all
@@ -633,7 +637,8 @@ java/awt/Mouse/GetMousePositionTest/GetMousePositionWithOverlay.java 8253184 win
java/awt/Mouse/MouseDragEvent/MouseDraggedTest.java 8080676,8253184 linux-all,windows-all
java/awt/Mouse/MouseModifiersUnitTest/MouseModifiersInKeyEvent.java 8157147 linux-all,windows-all
java/awt/Mouse/MouseWheelAbsXY/MouseWheelAbsXY.java 8253184 windows-all
java/awt/Toolkit/ToolkitPropertyTest/ToolkitPropertyTest_Enable.java 6847163 linux-all
java/awt/Toolkit/ToolkitPropertyTest/ToolkitPropertyTest_Enable.java 6847163 linux-all,windows-all
java/awt/xembed/server/RunTestXEmbed.java 7034201 linux-all
java/awt/xembed/server/RunTestXEmbed.java 7034201 linux-all
java/awt/Modal/ModalFocusTransferTests/FocusTransferDialogsDocModalTest.java 8164473 linux-all
java/awt/Frame/DecoratedFrameInsets/DecoratedFrameInsetsTest.java JBR-5205 linux-5.4.0-1103-aws
@@ -641,6 +646,7 @@ java/awt/Frame/DisposeParentGC/DisposeParentGC.java 8079786 macosx-all
java/awt/GraphicsDevice/CheckDisplayModes.java 8266242 macosx-aarch64
java/awt/GraphicsDevice/DisplayModes/CycleDMImage.java 7099223,8274106 macosx-all,linux-all,windows-all
java/awt/GraphicsDevice/DisplayModes/ExtraAllocationTest.java JBR-6384 macosx-all
java/awt/keyboard/AllKeyCode/AllKeyCode.java 8242930 macosx-all
java/awt/keyboard/8218917/AltKeyBug.java JBR-3636,JBR-5312 macosx-all,windows-all
java/awt/keyboard/AltPlusNumberKeyCombinationsTest/AltPlusNumberKeyCombinationsTest.java JBR-5210 windows-all
@@ -657,6 +663,7 @@ java/awt/event/MouseEvent/ClickDuringKeypress/ClickDuringKeypress.java 8233568,J
java/awt/event/KeyEvent/DeadKey/DeadKeyMacOSXInputText.java 8233568 macosx-all
java/awt/event/KeyEvent/DeadKey/deadKeyMacOSX.java 8233568 macosx-all
java/awt/TrayIcon/RightClickWhenBalloonDisplayed/RightClickWhenBalloonDisplayed.java 8238720 windows-all
java/awt/Paint/bug8024864.java JBR-6544 generic-all
java/awt/Paint/ComponentIsNotDrawnAfterRemoveAddTest/ComponentIsNotDrawnAfterRemoveAddTest.java 8253184 windows-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
@@ -671,15 +678,15 @@ java/awt/wakefield/ScreenCapture.java JBR-5653 linux-all
# Several tests which fail sometimes on macos11
java/awt/Window/MainKeyWindowTest/TestMainKeyWindow.java 8265985 macosx-all
java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeCrashTest.java JBR-5225 windows-all
java/awt/security/WarningWindowDisposeTest/WarningWindowDisposeTest.java 8266059 macosx-all
java/awt/Robot/Delay/InterruptOfDelay.java 8265986 macosx-all
java/awt/MenuBar/TestNoScreenMenuBar.java 8265987 macosx-all
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-5359,JBR-5510,JBR-4354 macosx-all,windows-aarch64,linux-all
java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java JBR-5082,JBR-5359 linux-all,windows-aarch64
java/awt/Dialog/MakeWindowAlwaysOnTop/MakeWindowAlwaysOnTop.java 8266243,JBR-5510,JBR-4354 macosx-all,linux-all
java/awt/Dialog/ModalDialogPermission/ModalDialogPermission.java JBR-5225 windows-all
java/awt/Dialog/SiblingChildOrder/SiblingChildOrderTest.java JBR-5082 linux-all
java/awt/Window/GetScreenLocation/GetScreenLocationTest.java 8225787,8253184 linux-all,windows-all
############################################################################
@@ -876,6 +883,7 @@ javax/imageio/plugins/external_plugin_tests/TestClassPathPlugin.sh JBR-5363 wind
# jdk_swing
javax/swing/plaf/aqua/CustomComboBoxFocusTest.java JBR-6488 macosx-all
javax/swing/plaf/basic/BasicComboPopup/JComboBoxPopupLocation/JComboBoxPopupLocation.java 8194945 macosx-all
javax/swing/plaf/basic/BasicHTML/4251579/bug4251579.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
javax/swing/plaf/basic/BasicMenuUI/4983388/bug4983388.java 8253184 windows-all
@@ -884,7 +892,7 @@ javax/swing/plaf/basic/BasicTextUI/8001470/bug8001470.java 8233177 linux-all,win
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 windows-all,linux-5.18.2-arch1-1
javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-6464,JBR-5510 windows-all,linux-5.18.2-arch1-1
javax/swing/plaf/nimbus/TestNimbusOverride.java 8253184,JBR-5829 windows-all,linux-all
javax/swing/plaf/windows/6921687/bug6921687.java 8253184 windows-all
javax/swing/plaf/windows/WindowsRootPaneUI/WrongAltProcessing/WrongAltProcessing.java JBR-4372 windows-all
@@ -896,6 +904,7 @@ 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/PressedButtonRightClickTest.java JBR-5210 windows-all
javax/swing/JButton/TestMnemonicAction.java JBR-6508 windows-x64,linux-all
javax/swing/JColorChooser/Test6524757.java JBR-5210 windows-all
javax/swing/JColorChooser/Test6827032.java JBR-5210 windows-all
javax/swing/JComboBox/6406264/bug6406264.java JBR-5210 windows-all
@@ -912,7 +921,7 @@ javax/swing/JMenu/4515762/bug4515762.java 8197552 windows-all
javax/swing/JMenu/4692443/bug4692443.java JBR-6093 windows-x64
javax/swing/JMenu/6470128/bug6470128.java 8253184,JBR-6307 windows-all,linux-all
javax/swing/JMenu/6538132/bug6538132.java JBR-894 windows-all
javax/swing/JMenu/8072900/WrongSelectionOnMouseOver.java JBR-6306 linux-all
javax/swing/JMenu/8072900/WrongSelectionOnMouseOver.java JBR-5799,JBR-6306 windows-all,linux-all
javax/swing/JMenu/PopupReferenceMemoryLeak.java JBR-5890,JBR-6056 windows-aarch64,windows-x64
javax/swing/JMenuBar/4750590/bug4750590.java JBR-6094 windows-x64
javax/swing/JMenuItem/4171437/bug4171437.java JBR-6112 windows-x64
@@ -920,28 +929,29 @@ javax/swing/JMenuItem/4654927/bug4654927.java JBR-164 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/JRadioButton/8075609/bug8075609.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JMenuItem/8158566/CloseOnMouseClickPropertyTest.java JBR-5510,JBR-5545 linux-all,windows-all
javax/swing/JMenuItem/8158566/CloseOnMouseClickPropertyTest.java JBR-5510,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/JPopupMenu/6415145/bug6415145.java 8197552 windows-all
javax/swing/JPopupMenu/6515446/bug6515446.java 8197552 windows-all
javax/swing/JPopupMenu/6515446/bug6515446.java 8197552,JBR-6531 windows-all,linux-all
javax/swing/JPopupMenu/6544309/bug6544309.java JBR-6532 windows-all,linux-all
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/ButtonGroupFocus/ButtonGroupFocusTest.java 8197552,8266085 windows-all
javax/swing/JRadioButton/FocusTraversal/FocusTraversal.java 8266085 windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java 8233582 linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8233582 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 windows-all,linux-5.18.2-arch1-1
javax/swing/JWindow/ShapedAndTranslucentWindows/PerPixelTranslucentSwing.java 8194128,8253184,JBR-5510 macosx-all,windows-all,linux-5.18.2-arch1-1
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/SetShapeAndClickSwing.java 8013450,8253184 macosx-all,windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentJComboBox.java 8024627,8253184 macosx-all,windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/TranslucentWindowClickSwing.java 8253184 windows-all
# The next test below is an intermittent failure
javax/swing/JTree/DnD/LastNodeLowerHalfDrop.java 8159131 linux-all
javax/swing/JTree/4330357/bug4330357.java 8253184 windows-all
javax/swing/JTree/4330357/bug4330357.java 8253184,JBR-6466 windows-all,linux-all
javax/swing/JTree/4633594/JTreeFocusTest.java 7105441,8173125,JBR-5210 macosx-all,windows-all
javax/swing/JTree/4908142/bug4908142.java 8197552,JBR-151 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
@@ -971,11 +981,11 @@ javax/swing/JFileChooser/8062561/bug8062561.java JBR-5767,JBR-5808 windows-all
javax/swing/JFileChooser/8194044/FileSystemRootTest.java JBR-5767 windows-all
javax/swing/JFileChooser/ShellFolderQueries/ShellFolderQueriesSecurityManagerTest.java JBR-5767 windows-all
javax/swing/JFrame/8016356/bug8016356.java JBR-108 windows-all
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/JFrame/8175301/ScaledFrameBackgroundTest.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/JPopupMenu/6675802/bug6675802.java JBR-5767 windows-all
javax/swing/JPopupMenu/6800513/bug6800513.java 7184956 macosx-all
javax/swing/JPopupMenu/6800513/bug6800513.java 7184956,JBR-6533 macosx-all,linux-all,windows-all
javax/swing/JScrollPane/HorizontalMouseWheelOnShiftPressed/HorizontalMouseWheelOnShiftPressed.java 8197552 windows-all
javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5359,JBR-5510 macosx-all,windows-aarch64,linux-5.18.2-arch1-1
javax/swing/JSplitPane/4885629/bug4885629.java 8019935,JBR-5510 macosx-all,inux-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
@@ -1006,7 +1016,7 @@ javax/swing/ProgressMonitor/ProgressMonitorEscapeKeyPress.java JBR-5210 windows-
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 windows-all,linux-5.18.2-arch1-1
javax/swing/JRadioButton/4314194/bug4314194.java 8298153,JBR-5359 linux-all
javax/swing/JRadioButton/4314194/bug4314194.java 8298153 linux-all
javax/swing/JRootPane/4670486/bug4670486.java 8042381,8197552 macosx-all,windows-all
javax/swing/JRootPane/DefaultButtonTest.java JBR-5739 windows-all,linux-all
javax/swing/text/html/HTMLEditorKit/5043626/bug5043626.java JBR-5210 windows-all
@@ -1014,12 +1024,12 @@ javax/swing/text/html/StyleSheet/bug4936917.java JBR-899,JBR-5510 windows-all,li
javax/swing/plaf/metal/MetalBorders/ScaledMetalBorderTest.java#id1 JBR-5779 linux-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 windows-all
javax/swing/plaf/synth/SynthButtonUI/6276188/bug6276188.java 8253184,JBR-5510,JBR-803 windows-all,linux-5.18.2-arch1-1,linux-all
javax/swing/plaf/synth/SynthButtonUI/6276188/bug6276188.java 8253184,JBR-5510,JBR-803 windows-all,linux-all,macosx-all
javax/swing/plaf/synth/SynthScrollbarThumbPainter/SynthScrollbarThumbPainterTest.java 8253184 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-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/JInternalFrame/8020708/bug8020708.java JBR-4879 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/ToolTipManager/Test6256140.java 8197552 windows-all
javax/swing/text/DefaultEditorKit/4278839/bug4278839.java CODETOOLS-7901623 windows-all
@@ -1027,17 +1037,17 @@ 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 windows-all
javax/swing/text/StyledEditorKit/4506788/bug4506788.java JBR-180 windows-all
javax/swing/text/View/8014863/bug8014863.java JBR-5541 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/UI/UnninstallUIMemoryLeaks/UnninstallUIMemoryLeaks.java JBR-5952 windows-x64
javax/swing/UIDefaults/6795356/TableTest.java JBR-5767 windows-all
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184 windows-all
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java 8253184,JBR-1656 windows-all,linux-all
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java 8253184 windows-all
java/awt/Robot/CheckCommonColors/CheckCommonColors.java 8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/Robot/ModifierRobotKey/ModifierRobotKeyTest.java JBR-5802 windows-all
java/awt/ColorClass/AlphaColorTest.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/ColorClass/AlphaColorTest.java JBR-5510 linux-5.18.2-arch1-1
sanity/client/SwingSet/src/ButtonDemoScreenshotTest.java 8265770,8273312,JBR-5510 windows-all,macosx-all,linux-5.18.2-arch1-1
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/DialogDemoTest.java 8253184 windows-all
sanity/client/SwingSet/src/FrameDemoTest.java 8253184 windows-all
@@ -1160,7 +1170,8 @@ java/awt/dnd/DnDFileGroupDescriptor/DnDFileGroupDescriptor.html 8080185 macosx-a
javax/swing/JTabbedPane/4666224/bug4666224.html 8144124 macosx-all
javax/swing/JTextArea/8149849/DNDTextToScaledArea.java 8253184 windows-all
javax/swing/JTextArea/7049024/bug7049024.java JBR-5836 linux-all
java/awt/event/MouseEvent/AltGraphModifierTest/AltGraphModifierTest.java 8162380 generic-all
java/awt/event/MouseEvent/AcceptExtraButton/AcceptExtraButton.java JBR-6353 linux-x64,windows-aarch64,macosx-all
java/awt/event/MouseEvent/AltGraphModifierTest/AltGraphModifierTest.java 8162380,JBR-4207 generic-all,windows-all
java/awt/image/VolatileImage/VolatileImageConfigurationTest.java 8171069 macosx-all,linux-all
java/awt/Modal/InvisibleParentTest/InvisibleParentTest.java 8172245 linux-all
java/awt/Multiscreen/LocationRelativeToTest/LocationRelativeToTest.java 8253184 windows-all
@@ -1174,6 +1185,7 @@ 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/TestJustification.html 8250791 macosx-all
java/awt/font/TextLayout/TestSinhalaChar.java JBR-5103 generic-all
javax/swing/JTableHeader/6884066/bug6884066.java JBR-113 windows-all,linux-aarch64
javax/swing/JTableHeader/6889007/bug6889007.java 8310238,8253184,JBR-5387 macosx-all,windows-all,linux-all
javax/swing/JTextField/8036819/bug8036819.java JBR-6113 windows-x64
javax/swing/JTree/4927934/bug4927934.java JBR-6114 windows-x64
@@ -1188,8 +1200,9 @@ java/awt/TextArea/TextAreaCursorTest/HoveringAndDraggingTest.java 8024986 macosx
java/awt/TextArea/TextAreaTwicePack/TextAreaTwicePack.java 8253184 windows-all
java/awt/TextField/OverScrollTest/OverScrollTest.java 8253184 windows-all
java/awt/event/MouseEvent/SpuriousExitEnter/SpuriousExitEnter.java 8254841 macosx-all
java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java 8256289,JBR-5359 windows-x64,windows-aarch64
java/awt/Focus/AppletInitialFocusTest/AppletInitialFocusTest1.java 8256289 windows-x64
java/awt/Focus/RequestFocusByCause/RequestFocusByCauseTest.java JBR-6335 linux-all
java/awt/Focus/RequestOnCompWithNullParent/RequestOnCompWithNullParent1.java JBR-6507 linux-all
java/awt/Focus/RemoveAfterRequest/RemoveAfterRequest.java JBR-6052 macosx-all,linux-all
java/awt/Focus/RowToleranceTransitivityTest.java JBR-5751 windows-all
java/awt/FullScreen/TranslucentWindow/TranslucentWindow.java 8258103,8253184 linux-all,windows-all
@@ -1224,7 +1237,7 @@ java/awt/print/PrinterJob/PaintText.java
java/awt/print/PrinterJob/PrintCrashTest.java nobug generic-all
java/awt/print/PrinterJob/PrtException.java nobug generic-all
java/awt/PrintJob/PrinterException.java nobug generic-all
java/awt/PrintJob/Security/SecurityDialogTest.java JBR-5225,JBR-5359 windows-all,windows-aarch64
java/awt/PrintJob/Security/SecurityDialogTest.java JBR-5225 windows-all,windows-aarch64
javax/print/attribute/ChromaticityValues.java nobug generic-all
javax/print/CheckDupFlavor.java nobug generic-all
javax/print/PrintSE/PrintSE.sh nobug generic-all
@@ -1243,10 +1256,8 @@ java/awt/dnd/FileListBetweenJVMsTest/FileListBetweenJVMsTest.java
com/sun/java/swing/plaf/windows/Test8173145.java JBR-4197 windows-all
com/sun/java/swing/plaf/windows/AltFocusIssueTest.java JBR-4197 windows-all
java/awt/event/MouseEvent/AltGraphModifierTest/AltGraphModifierTest.java JBR-4207 windows-all
jb/java/awt/Graphics2D/TextRender/OGLMetalTextRender.java JBR-5392 windows-aarch64
jb/java/awt/event/TouchScreenEvent/TouchScreenEventsTestLinux.sh JBR-4078 linux-all
jb/java/awt/event/MouseEvent/ReleaseAndClickModifiers.java JBR-5366 windows-all
jb/java/awt/Font/font430.sh JBR-4956 linux-all
jb/java/awt/Font/Font467.java JBR-3960 generic-all
jb/java/awt/keyboard/AltGrMustGenerateAltGrModifierTest4207.java JBR-4207 windows-all
@@ -1255,12 +1266,14 @@ java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java
jb/java/awt/Toolkit/LWCToolkitInvokeAndWaitTest.java JBR-4896,JBR-5163 macosx-all,
java/awt/Dialog/NonResizableDialogSysMenuResize/NonResizableDialogSysMenuResize.java JBR-4250 windows-all
java/awt/Dialog/NestedDialogs/Modal/NestedModalDialogTest.java JBR-6487 generic-all
java/awt/Dialog/NestedDialogs/Modeless/NestedModelessDialogTest.java JBR-4250 windows-all
java/nio/file/WatchService/WithSecurityManager.java nobug macosx-all
java/awt/image/DrawImage/BlitRotateClippedArea.java JBR-4674 macosx-all
javax/swing/SwingUtilities/4917669/bug4917669.java JBR-4677 windows-all
javax/swing/SwingUtilities/7088744/bug7088744.java JBR-4677 windows-all
javax/swing/SwingUtilities/7146377/bug7146377.java JBR-4679 windows-all
java/awt/dnd/AcceptDropMultipleTimes/AcceptDropMultipleTimes.java JBR-4880 windows-all
@@ -1270,7 +1283,7 @@ java/awt/Frame/LayoutOnMaximizeTest/LayoutOnMaximizeTest.java JBR-4880 windows-a
java/awt/Frame/MiscUndecorated/UndecoratedInitiallyIconified.java JBR-4880 windows-all
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,JBR-5359 windows-all,windows-aarch64
java/awt/image/mlib/MlibOpsTest.java JBR-5225 windows-all,windows-aarch64
java/awt/image/multiresolution/MenuMultiresolutionIconTest.java JBR-4880,8253184,JBR-5510 windows-all,linux-5.18.2-arch1-1
java/awt/MenuBar/SeparatorsNavigation/SeparatorsNavigation.java JBR-4880 windows-all
javax/swing/JFileChooser/8002077/bug8002077.java JBR-4880 windows-all
@@ -1284,6 +1297,7 @@ javax/swing/JSpinner/SpinnerTest.java JBR-4880 windows-all
javax/swing/JSpinner/TestJSpinnerFocusLost.java JBR-5210 windows-all
javax/swing/JTable/7068740/bug7068740.java 8197552 windows-all
javax/swing/JTable/8236907/LastVisibleRow.java JBR-6066 macosx-aarch64
javax/swing/text/CSSBorder/6796710/bug6796710.java JBR-6465 windows-all,linux-aarch64
javax/swing/text/FlowView/LayoutTest.java JBR-4880 windows-all
javax/swing/text/html/7189299/bug7189299.java JBR-4880 windows-all
jb/java/jcef/HandleJSQueryTest3314.sh JBR-4866 linux-all
@@ -1343,65 +1357,42 @@ javax/sound/sampled/spi/MixerProvider/ExpectedNPEOnNull.java JBR-4455 linux-aarc
javax/sound/sampled/Clip/ClipIsRunningAfterStop.java JBR-4455 linux-aarch64
javax/sound/sampled/Mixers/BogusMixers.java JBR-4455 linux-aarch64
java/awt/Choice/RemoveAllShrinkTest/RemoveAllShrinkTest.java JBR-5359,JBR-5510,8310487 windows-aarch64,linux-5.18.2-arch1-1,linux-all
java/awt/Choice/ResizeAutoClosesChoice/ResizeAutoClosesChoice.java JBR-5359,JBR-5510,JBR-5905 windows-aarch64,linux-5.18.2-arch1-1,linux-all
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/SelectNewItemTest/SelectNewItemTest.java 8315733 macosx-all
java/awt/ColorClass/XRenderTranslucentColorDrawTest.java JBR-5359 windows-aarch64
java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/Graphics/CopyScaledArea/CopyScaledAreaTest.java JBR-5359 windows-aarch64
java/awt/Graphics/XORPaint.java#id0 JBR-5359 windows-aarch64
java/awt/Graphics2D/FillTexturePaint/FillTexturePaint.java JBR-5359 windows-aarch64
java/awt/Graphics2D/FlipDrawImage/FlipDrawImage.java JBR-5359 windows-aarch64
java/awt/Graphics2D/LargeWindowPaintTest.java#default JBR-5359 windows-aarch64
java/awt/Graphics2D/LargeWindowPaintTest.java#ZGenerational JBR-5359 windows-aarch64
java/awt/Graphics2D/LargeWindowPaintTest.java#ZSinglegen JBR-5359 windows-aarch64
java/awt/hidpi/DrawOnFrameGraphicsTest.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/EABlitTest.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/IncorrectBounds.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/IncorrectDestinationOffset.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/IncorrectManagedImageSourceOffset.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/IncorrectOffset.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/IncorrectSourceOffset.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/IncorrectUnmanagedImageSourceOffset.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/SimpleManagedImage.java JBR-5359 windows-aarch64
java/awt/image/DrawImage/SimpleUnmanagedImage.java JBR-5359 windows-aarch64
java/awt/image/VolatileImage/DrawHugeImageTest.java JBR-5359 windows-aarch64
java/awt/image/VolatileImage/ReportRenderingError.java#default JBR-5359 windows-aarch64
java/awt/image/VolatileImage/ReportRenderingError.java#windows JBR-5359 windows-aarch64
java/awt/Mixing/AWT_Mixing/JGlassPaneInternalFrameOverlapping.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JGlassPaneMoveOverlapping.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JInternalFrameOverlapping.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Mixing/AWT_Mixing/JGlassPaneInternalFrameOverlapping.java JBR-5510 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/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-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/JComponent/7154030/bug7154030.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/JEditorPane/TestBrowserBGColor.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/JPopupMenu/7156657/bug7156657.java JBR-5359 windows-aarch64
javax/swing/JRadioButton/8041561/bug8041561.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/JSplitPane/4820080/JSplitPaneDragColorTest.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
java/awt/Window/BackgroundIsNotUpdated/BackgroundIsNotUpdated.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Window/TranslucentJAppletTest/TranslucentJAppletTest.java JBR-5510 linux-5.18.2-arch1-1
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-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
javax/swing/text/html/CSS/4530474/bug4530474.java JBR-5359,JBR-5510,JBR-5951 windows-aarch64,linux-5.18.2-arch1-1,windows-x64
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-x64
jb/java/awt/CustomTitleBar/ActionListenerTest.java JBR-5819 macosx-all,windows-all
jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java JBR-5359,JBR-5345 windows-aarch64,windows-x64
jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java JBR-5359,JBR-5345 windows-aarch64,windows-x64
jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java JBR-5359,JBR-5345 windows-aarch64,windows-x64
jb/java/awt/CustomTitleBar/DialogNativeControlsTest.java JBR-5345 windows-x64
jb/java/awt/CustomTitleBar/FrameNativeControlsTest.java JBR-5345 windows-x64
jb/java/awt/CustomTitleBar/JDialogNativeControlsTest.java JBR-5345 windows-x64
jb/java/awt/CustomTitleBar/HitTestClientArea.java JBR-5551 windows-all
jb/java/awt/CustomTitleBar/HitTestNonClientArea.java JBR-5465,JBR-5550 windows-all
jb/java/awt/CustomTitleBar/MaximizeWindowTest.java JBR-5465,JBR-5550 windows-all
jb/java/awt/CustomTitleBar/MaximizedWindowFocusTest.java JBR-5828 windows-all
jb/java/awt/CustomTitleBar/MinimizingWindowTest.java JBR-5359,JBR-5345 windows-aarch64,windows-x64
jb/java/awt/CustomTitleBar/MinimizingWindowTest.java JBR-5345 windows-x64
jb/java/awt/CustomTitleBar/MouseEventsOnClientArea.java JBR-5910 windows-x64
jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java JBR-5359,JBR-5345 windows-aarch64,windows-x64
jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java JBR-5359,JBR-5345 windows-aarch64,windows-x64
jb/java/awt/CustomTitleBar/NativeControlsVisibilityTest.java JBR-5345 windows-x64
jb/java/awt/CustomTitleBar/WindowsControlWidthTest.java JBR-5345 windows-x64
jb/java/awt/CustomTitleBar/WindowResizeTest.java JBR-5592 windows-all
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5359,JBR-5510 windows-aarch64,linux-5.18.2-arch1-1
sun/java2d/AcceleratedXORModeTest.java JBR-5359 windows-aarch64
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5359,JBR-5366,JBR-5510 windows-all,linux-5.18.2-arch1-1
sun/java2d/GdiRendering/InsetClipping.java 7124403,JBR-5359,JBR-5366,JBR-5510 windows-all,macosx-all,windows-aarch64,linux-5.18.2-arch1-1
sanity/client/SwingSet/src/EditorPaneDemoTest.java 8212240,JBR-5510,JBR-6285,8253184 macosx-all,linux-all,windows-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5510 linux-5.18.2-arch1-1
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
@@ -1416,14 +1407,16 @@ javax/swing/LookAndFeel/8145547/DemandGTK3.sh JBR-5510 linux-5.18.2-arch1-1
java/awt/Toolkit/LockingKeyStateTest/LockingKeyStateTest.java JBR-5765 macosx-all
jb/sun/awt/macos/InputMethodTest/FocusMoveUncommitedCharactersTest.java JBR-5765 macosx-all
jb/java/awt/Focus/BrokenTraversalAWT.java JBR-5799 windows-all
jb/java/awt/Focus/ContextMenuAfterPopup.java JBR-5799 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
com/sun/java/swing/plaf/gtk/TestFileChooserSingleDirectorySelection.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Choice/ChoiceGeneratesItemEvents.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Choice/ChoiceStaysOpenedOnTAB.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Graphics/XORPaint.java#id2 JBR-5510 linux-5.18.2-arch1-1
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureGtkTest.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Robot/HiDPIScreenCapture/ScreenCaptureTest.java JBR-5510 linux-5.18.2-arch1-1
java/awt/Robot/NonEmptyErrorStream.java JBR-5510 linux-5.18.2-arch1-1
@@ -1438,5 +1431,4 @@ javax/swing/JSpinner/TestSelectedTextBackgroundColor.java JBR-5510 linux-5.18.2-
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
javax/swing/JTree/TestTreeBackgroundColor.java JBR-5510 linux-5.18.2-arch1-1
javax/swing/plaf/nimbus/TestNimbusBGColor.java JBR-5510 linux-5.18.2-arch1-1
sun/java2d/ClassCastExceptionForInvalidSurface.java JBR-5510 linux-5.18.2-arch1-1

View File

@@ -1,12 +1,14 @@
java/awt/Dialog/DialogLocationTest.java JBR-6090 windows-all
java/awt/datatransfer/DragUnicodeBetweenJVMTest/DragUnicodeBetweenJVMTest.java JBR-5538 windows-all
java/awt/datatransfer/MissedHtmlAndRtfBug/MissedHtmlAndRtfBug.java JBR-6027 windows-all
java/awt/dnd/MissedDragEnterTest.java JBR-6091 windows-all
java/awt/dnd/DropActionChangeTest.java JBR-6489,JBR-5799 generic-all
java/awt/dnd/ImageTransferTest/ImageTransferTest.java JBR-6442 linux-all
java/awt/dnd/InterJVMGetDropSuccessTest/InterJVMGetDropSuccessTest.java JBR-6442 linux-all
java/awt/dnd/MozillaDnDTest.java JBR-6442 linux-all
java/awt/event/KeyEvent/ExtendedModifiersTest/ExtendedModifiersTest.java JBR-6292 windows-all
java/awt/event/KeyEvent/KeyMaskTest/KeyMaskTest.java JBR-6292 windows-all
java/awt/event/MouseEvent/AcceptExtraButton/AcceptExtraButton.java JBR-6353 linux-x64,windows-aarch64,macosx-all
java/awt/event/MouseEvent/FrameMouseEventAbsoluteCoordsTest/FrameMouseEventAbsoluteCoordsTest.java 8238720,JBR-6095 windows-all,linux-all
java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6090 windows-all
java/awt/event/StressTest/MouseAndKeyEventStressTest.java JBR-6479,JBR-6090 generic-all
java/awt/Focus/6378278/InputVerifierTest.java JBR-6090 windows-all
java/awt/Focus/6382144/EndlessLoopTest.java JBR-6090 windows-all
java/awt/Focus/8282640/ScrollPaneFocusBugTest.java JBR-6090 windows-all
@@ -14,9 +16,10 @@ java/awt/Focus/ClearLwQueueBreakTest/ClearLwQueueBreakTest.java 8198618,JBR-814,
java/awt/Focus/LabelScrollBarFocus.java JBR-6090 windows-x64
java/awt/Focus/ModalExcludedWindowClickTest/ModalExcludedWindowClickTest.java JBR-6090 windows-x64
java/awt/Focus/MouseClickRequestFocusRaceTest/MouseClickRequestFocusRaceTest.java 8194753,JBR-6090 linux-all,macosx-all,windows-x64
java/awt/Focus/NonFocusableBlockedOwnerTest/NonFocusableBlockedOwnerTest.java 7124275,JBR-5799 macosx-all,windows-all
java/awt/Focus/SimpleWindowActivationTest/SimpleWindowActivationTest.java JBR-6089 windows-all
java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.java JBR-6090 windows-all
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-6233 windows-x64
java/awt/Frame/GetGraphicsStressTest/GetGraphicsStressTest.java JBR-6233,JBR-6509 windows-x64,generic-all
java/awt/Frame/InvisibleOwner/InvisibleOwner.java JBR-6090 windows-all
java/awt/Frame/MaximizedToOppositeScreen/MaximizedToOppositeScreenSmall.java JBR-6090 windows-all
java/awt/Frame/RestoreToOppositeScreen/RestoreToOppositeScreen.java 8286840 linux-all
@@ -37,9 +40,7 @@ javax/swing/JComboBox/TestComboBoxComponentRendering.java JBR-6100 linux-all
javax/swing/JComponent/7154030/bug7154030.java JBR-6134 windows-x64
javax/swing/JPopupMenu/6580930/bug6580930.java JBR-5071 linux-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedPerPixelTranslucentGradient.java 8233582,JBR-6090 linux-all,windows-all
javax/swing/JWindow/ShapedAndTranslucentWindows/ShapedTranslucentPerPixelTranslucentGradient.java JBR-6090 windows-all
sanity/client/SwingSet/src/EditorPaneDemoTest.java JBR-5359,JBR-5510,JBR-6285 windows-aarch64,linux-all
sanity/client/SwingSet/src/ToolTipDemoTest.java 8293001,JBR-6293 linux-all,windows-all
sun/java2d/GdiRendering/ClipShapeRendering.java JBR-5204 linux-all,windows-all
@@ -47,6 +48,11 @@ sun/java2d/GdiRendering/ClipShapeRendering.java
# the below tests are not intended to be executed in S2 configurations because
# the tests contains tags to be launched for various scales including S2
#
java/awt/Robot/HiDPIScreenCapture/HiDPIRobotScreenCaptureTest.java nobug generic-all
java/awt/Mouse/GetMousePositionTest/GetMousePositionWithPopup.java nobug generic-all
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
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
@@ -74,6 +80,7 @@ jb/java/awt/Focus/PopupIncomingFocusTest.java
jb/java/awt/Focus/RequestFocusInParent.java JBR-5715 windows-all
jb/java/awt/Focus/SecondLevelPopupTest.java JBR-6090 windows-all
java/awt/Window/WindowSizeDifferentScreens/WindowSizeDifferentScreens.java JBR-5513 linux-all
jb/java/awt/Window/BackgroundWindowOrderOnSpaceChange.java JBR-6486 macosx-all
jb/java/awt/Window/UndecoratedDialogInTransientsChain.java JBR-6090 windows-all
java/awt/Focus/SimpleWindowActivationTest/SimpleWindowActivationTest.java JBR-6089 windows-all
java/awt/Focus/WindowUpdateFocusabilityTest/WindowUpdateFocusabilityTest.java JBR-6089 windows-all