Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/jdk/javax/imageio/plugins/jpeg/JPEGsNotAcceleratedTest.java
41152 views
1
/*
2
* Copyright (c) 2004, 2017, 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
* @bug 4994702
27
* @key headful
28
* @summary verifies that no regression were introduced with the fix for this
29
* bug
30
*/
31
32
import java.awt.AlphaComposite;
33
import java.awt.Color;
34
import java.awt.Component;
35
import java.awt.Dimension;
36
import java.awt.Frame;
37
import java.awt.Graphics;
38
import java.awt.Graphics2D;
39
import java.awt.ImageCapabilities;
40
import java.awt.Rectangle;
41
import java.awt.event.MouseAdapter;
42
import java.awt.event.MouseEvent;
43
import java.awt.image.BufferedImage;
44
import java.awt.image.DataBuffer;
45
import java.awt.image.VolatileImage;
46
import java.awt.image.WritableRaster;
47
import java.io.File;
48
import java.io.IOException;
49
50
import javax.imageio.IIOImage;
51
import javax.imageio.ImageIO;
52
import javax.imageio.ImageReadParam;
53
import javax.imageio.ImageReader;
54
import javax.imageio.ImageWriteParam;
55
import javax.imageio.ImageWriter;
56
import javax.imageio.stream.FileImageInputStream;
57
import javax.imageio.stream.ImageOutputStream;
58
59
public class JPEGsNotAcceleratedTest {
60
61
public static final int testRGB = Color.red.getRGB();
62
public static final int TEST_W = 100;
63
public static final int TEST_H = 100;
64
public static final Rectangle roi =
65
new Rectangle(TEST_W/4, TEST_H/4, TEST_W/2, TEST_H/2);
66
67
static Frame f;
68
static boolean showRes = false;
69
static int testsFinished = 0;
70
static int testsStarted = 0;
71
static boolean lowCompression = false;
72
73
static boolean failed = false;
74
75
public JPEGsNotAcceleratedTest(String name) {
76
BufferedImage bi = readTestImage(name, null, null);
77
runTestOnImage("no dest image, no region of interest", bi, null);
78
79
BufferedImage destBI = getDestImage();
80
bi = readTestImage(name, destBI, null);
81
runTestOnImage("w/ dest image, no region of interest", bi, null);
82
83
// steal the raster, see if the destination image
84
// gets accelerated
85
destBI = getDestImage();
86
DataBuffer db =
87
((WritableRaster)destBI.getRaster()).getDataBuffer();
88
bi = readTestImage(name, destBI, null);
89
runTestOnImage("w/ dest image (with stolen raster),"+
90
" no region of interest", bi, null);
91
92
bi = readTestImage(name, null, roi);
93
runTestOnImage("no dest image, region of interest", bi, roi);
94
95
destBI = getDestImage();
96
bi = readTestImage(name, destBI, roi);
97
runTestOnImage("w/ dest image, region of interest", bi, roi);
98
99
// accelerate the destination image first, then load
100
// an image into it. Check that the accelerated copy gets
101
// updated
102
destBI = getDestImage();
103
accelerateImage(destBI);
104
bi = readTestImage(name, destBI, roi);
105
runTestOnImage("w/ accelerated dest image,"+
106
" region of interest", bi, roi);
107
108
synchronized (JPEGsNotAcceleratedTest.class) {
109
testsFinished++;
110
JPEGsNotAcceleratedTest.class.notify();
111
}
112
113
}
114
115
public static BufferedImage readTestImage(String fileName,
116
BufferedImage dest,
117
Rectangle srcROI)
118
{
119
BufferedImage bi = null;
120
121
try {
122
FileImageInputStream is =
123
new FileImageInputStream(new File(fileName));
124
ImageReader reader =
125
(ImageReader)ImageIO.getImageReaders(is).next();
126
ImageReadParam param = reader.getDefaultReadParam();
127
if (dest != null) {
128
param.setDestination(dest);
129
}
130
if (srcROI != null) {
131
param.setSourceRegion(srcROI);
132
}
133
reader.setInput(is);
134
bi = reader.read(0, param);
135
} catch (IOException e) {
136
System.err.println("Error " + e +
137
" when reading file: " + fileName);
138
throw new RuntimeException(e);
139
}
140
141
return bi;
142
}
143
144
public static void writeTestImage(String fileName) {
145
BufferedImage bi =
146
new BufferedImage(TEST_W, TEST_H, BufferedImage.TYPE_INT_RGB);
147
Graphics g = bi.getGraphics();
148
g.setColor(new Color(testRGB));
149
g.fillRect(0, 0, TEST_W, TEST_H);
150
try {
151
System.err.printf("Writing %s\n", fileName);
152
if (lowCompression) {
153
ImageWriter iw = (ImageWriter)ImageIO.getImageWritersBySuffix("jpeg").next();
154
if(iw == null) {
155
throw new RuntimeException("No available image writer for "
156
+ "jpeg "
157
+ " Test failed.");
158
}
159
160
File file = new File(fileName);
161
ImageOutputStream ios = ImageIO.createImageOutputStream(file);
162
iw.setOutput(ios);
163
164
ImageWriteParam param = iw.getDefaultWriteParam();
165
param.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
166
param.setCompressionQuality(1);
167
168
IIOImage iioImg = new IIOImage(bi, null, null);
169
iw.write(null, iioImg, param);
170
171
} else {
172
ImageIO.write(bi, "jpeg", new File(fileName));
173
}
174
} catch (IOException e) {
175
System.err.println("Error " + e +
176
" when writing file: " + fileName);
177
throw new RuntimeException(e);
178
}
179
}
180
181
public VolatileImage accelerateImage(BufferedImage bi) {
182
VolatileImage testVI = f.createVolatileImage(TEST_W, TEST_H);
183
do {
184
if (testVI.validate(f.getGraphicsConfiguration()) ==
185
VolatileImage.IMAGE_INCOMPATIBLE)
186
{
187
testVI = f.createVolatileImage(TEST_W, TEST_H);
188
}
189
Graphics2D g = testVI.createGraphics();
190
g.setComposite(AlphaComposite.Src);
191
g.setColor(Color.green);
192
g.fillRect(0, 0, TEST_W, TEST_H);
193
194
g.drawImage(bi, 0, 0, null);
195
g.drawImage(bi, 0, 0, null);
196
g.drawImage(bi, 0, 0, null);
197
g.dispose();
198
} while (testVI.contentsLost());
199
200
return testVI;
201
}
202
203
public BufferedImage getDestImage() {
204
BufferedImage destBI =
205
new BufferedImage(TEST_W, TEST_H, BufferedImage.TYPE_INT_RGB);
206
Graphics2D g = (Graphics2D)destBI.getGraphics();
207
g.setComposite(AlphaComposite.Src);
208
g.setColor(Color.blue);
209
g.fillRect(0, 0, TEST_W, TEST_H);
210
return destBI;
211
}
212
213
public void runTestOnImage(String desc, BufferedImage bi,
214
Rectangle srcROI)
215
{
216
217
if (srcROI == null) {
218
srcROI = new Rectangle(0, 0, TEST_W, TEST_H);
219
}
220
221
VolatileImage testVI = accelerateImage(bi);
222
223
ImageCapabilities ic =
224
bi.getCapabilities(f.getGraphicsConfiguration());
225
boolean accelerated = ic.isAccelerated();
226
227
System.err.println("Testing: " + desc +
228
" -- bi.isAccelerated(): " + accelerated );
229
230
BufferedImage snapshot = testVI.getSnapshot();
231
if (showRes) {
232
showRes(desc, snapshot);
233
}
234
235
for (int y = 0; y < srcROI.height; y++) {
236
for (int x = 0; x < srcROI.width; x++) {
237
int destRGB = snapshot.getRGB(x, y);
238
if (destRGB != testRGB && destRGB != 0xfffe0000) {
239
failed = true;
240
System.err.printf("Test failed at %dx%d pixel=%x\n",
241
x, y, snapshot.getRGB(x, y));
242
if (!showRes) {
243
showRes(desc, snapshot);
244
}
245
break;
246
}
247
}
248
}
249
}
250
251
static int startX = 64, startY = 0;
252
static int frameX = startX, frameY = startY;
253
private static void showRes(String desc, final BufferedImage src) {
254
final int w = src.getWidth();
255
final int h = src.getHeight();
256
257
Frame f = new Frame(desc+": dbl-click to exit");
258
Component c;
259
f.add(c = new Component() {
260
public Dimension getPreferredSize() {
261
return new Dimension(w,h);
262
}
263
264
public void paint(Graphics g) {
265
g.clearRect(0, 0, getWidth(), getHeight());
266
g.drawImage(src, 0,0, null);
267
}
268
});
269
c.addMouseListener(new MouseAdapter() {
270
public void mouseClicked(MouseEvent e) {
271
if (e.getClickCount() > 1) {
272
System.exit(0);
273
}
274
}
275
});
276
f.pack();
277
synchronized (JPEGsNotAcceleratedTest.class) {
278
f.setLocation(frameX, frameY);
279
frameX += f.getWidth();
280
if ((frameX + f.getWidth()) >
281
f.getGraphicsConfiguration().getBounds().width)
282
{
283
frameY += TEST_H;
284
if ((frameY + f.getHeight()) >
285
f.getGraphicsConfiguration().getBounds().height)
286
{
287
startY += 30;
288
startX += 30;
289
frameY = startY;
290
}
291
frameX = startX;
292
}
293
};
294
f.setVisible(true);
295
}
296
297
public static void usage() {
298
System.err.println("Usage: java Test [file name] [-write][-show][-low]");
299
System.exit(0);
300
}
301
302
public static void main(String[] args) {
303
System.setProperty("sun.java2d.pmoffscreen", "true");
304
System.setProperty("sun.java2d.ddforcevram", "true");
305
String name = "red.jpg";
306
307
f = new Frame();
308
f.pack();
309
310
if (f.getGraphicsConfiguration().getColorModel().getPixelSize() < 16) {
311
System.err.println("8-bit display mode detected, dithering issues possible, "+
312
"considering test passed.");
313
f.dispose();
314
return;
315
}
316
317
318
for (String arg : args) {
319
if (arg.equals("-write")) {
320
writeTestImage(name);
321
System.exit(0);
322
} else if (arg.equals("-show")) {
323
showRes = true;
324
} else if (arg.equals("-low")) {
325
lowCompression = true;
326
name ="red_low.jpg";
327
System.err.println("Using low jpeg compression");
328
} else if (arg.equals("-help")) {
329
usage();
330
} else {
331
final String filename = arg;
332
testsStarted++;
333
new Thread(new Runnable() {
334
public void run() {
335
new JPEGsNotAcceleratedTest(filename);
336
}
337
}).start();
338
}
339
}
340
341
if (testsStarted == 0) {
342
writeTestImage(name);
343
testsStarted++;
344
new JPEGsNotAcceleratedTest(name);
345
}
346
347
348
synchronized (JPEGsNotAcceleratedTest.class) {
349
while (testsFinished < testsStarted) {
350
try {
351
JPEGsNotAcceleratedTest.class.wait(100);
352
} catch (InterruptedException e) {
353
failed = true; break;
354
}
355
}
356
}
357
358
f.dispose();
359
if (failed) {
360
throw new RuntimeException("Test failed");
361
}
362
363
System.err.println("Passed.");
364
}
365
}
366
367