mirror of
https://github.com/JetBrains/JetBrainsRuntime.git
synced 2026-01-07 17:11:42 +01:00
Compare commits
19 Commits
avu/Repain
...
jbr21.331
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1fdfd1ae28 | ||
|
|
48181f30b0 | ||
|
|
6f0fc2cc8f | ||
|
|
d8f2bdb21f | ||
|
|
f132a9597f | ||
|
|
4f77d022aa | ||
|
|
21062b021e | ||
|
|
7c4782fcf0 | ||
|
|
afa522d0b1 | ||
|
|
7084e04b3d | ||
|
|
e95b9136f2 | ||
|
|
15b700cf3f | ||
|
|
5a4f931f73 | ||
|
|
7698957b81 | ||
|
|
317be56a4c | ||
|
|
227110f74f | ||
|
|
d8ecbedcc3 | ||
|
|
469636eebf | ||
|
|
998c4c5208 |
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 | \
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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 ...
|
||||
@@ -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 |
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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";
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -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;
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -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:
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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 *);
|
||||
|
||||
/**
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user