Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/sun/java2d/DirectX/InfiniteValidationLoopTest/InfiniteValidationLoopTest.java
41153 views
1
/*
2
* Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
/*
25
* @test
26
* @key headful
27
* @bug 6648018
28
* @summary Tests that we don't run into infinite validation loop when copying
29
a VolatileImage to the screen
30
* @author [email protected]: area=Graphics
31
* @run main/othervm InfiniteValidationLoopTest
32
* @run main/othervm -Dsun.java2d.d3d=false InfiniteValidationLoopTest
33
*/
34
import java.awt.Color;
35
import java.awt.Frame;
36
import java.awt.Graphics;
37
import java.awt.GraphicsConfiguration;
38
import static java.awt.image.VolatileImage.*;
39
import java.awt.image.VolatileImage;
40
import java.util.concurrent.CountDownLatch;
41
42
public class InfiniteValidationLoopTest extends Frame {
43
private static volatile boolean failed = false;
44
private static final int LOOP_THRESHOLD = 50;
45
private static volatile CountDownLatch latch;
46
private VolatileImage vi;
47
48
public InfiniteValidationLoopTest() {
49
super("InfiniteValidationLoopTest");
50
}
51
52
@Override
53
public void paint(Graphics g) {
54
try {
55
runTest(g);
56
} finally {
57
latch.countDown();
58
}
59
}
60
61
private void runTest(Graphics g) {
62
int status = IMAGE_OK;
63
int count1 = 0;
64
do {
65
GraphicsConfiguration gc = getGraphicsConfiguration();
66
int count2 = 0;
67
while (vi == null || (status = vi.validate(gc)) != IMAGE_OK) {
68
if (++count2 > LOOP_THRESHOLD) {
69
System.err.println("Infinite loop detected: count2="+count2);
70
failed = true;
71
return;
72
}
73
if (vi == null || status == IMAGE_INCOMPATIBLE) {
74
if (vi != null) { vi.flush(); vi = null; }
75
vi = gc.createCompatibleVolatileImage(100, 100);
76
continue;
77
}
78
if (status == IMAGE_RESTORED) {
79
Graphics gg = vi.getGraphics();
80
gg.setColor(Color.green);
81
gg.fillRect(0, 0, vi.getWidth(), vi.getHeight());
82
break;
83
}
84
}
85
g.drawImage(vi, getInsets().left, getInsets().top, null);
86
if (++count1 > LOOP_THRESHOLD) {
87
System.err.println("Infinite loop detected: count1="+count1);
88
failed = true;
89
return;
90
}
91
} while (vi.contentsLost());
92
}
93
94
public static void main(String[] args) {
95
latch = new CountDownLatch(1);
96
InfiniteValidationLoopTest t1 = new InfiniteValidationLoopTest();
97
t1.pack();
98
t1.setSize(200, 200);
99
t1.setVisible(true);
100
try { latch.await(); } catch (InterruptedException ex) {}
101
t1.dispose();
102
103
latch = new CountDownLatch(1);
104
t1 = new InfiniteValidationLoopTest();
105
t1.pack();
106
t1.setSize(50, 50);
107
t1.setVisible(true);
108
try { latch.await(); } catch (InterruptedException ex) {}
109
t1.dispose();
110
111
if (failed) {
112
throw new
113
RuntimeException("Failed: infinite validattion loop detected");
114
}
115
System.out.println("Test PASSED");
116
}
117
}
118
119