blob: 86f1937fb7bd19bce1c71c86e395173678ae38c2 [file] [log] [blame]
/*
* Copyright (c) 2006, 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.
*/
package j2dbench.tests.iio;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.imageio.ImageIO;
import javax.imageio.spi.IIORegistry;
import javax.imageio.spi.ImageOutputStreamSpi;
import javax.imageio.stream.FileCacheImageOutputStream;
import javax.imageio.stream.FileImageOutputStream;
import javax.imageio.stream.ImageOutputStream;
import javax.imageio.stream.MemoryCacheImageOutputStream;
import j2dbench.Group;
import j2dbench.Option;
import j2dbench.Result;
import j2dbench.TestEnvironment;
abstract class OutputTests extends IIOTests {
protected static final int OUTPUT_FILE = 1;
protected static final int OUTPUT_ARRAY = 2;
protected static final int OUTPUT_FILECHANNEL = 3;
protected static ImageOutputStreamSpi fileChannelIOSSpi;
static {
if (hasImageIO) {
ImageIO.scanForPlugins();
IIORegistry registry = IIORegistry.getDefaultInstance();
java.util.Iterator spis =
registry.getServiceProviders(ImageOutputStreamSpi.class,
false);
while (spis.hasNext()) {
ImageOutputStreamSpi spi = (ImageOutputStreamSpi)spis.next();
String klass = spi.getClass().getName();
if (klass.endsWith("ChannelImageOutputStreamSpi")) {
fileChannelIOSSpi = spi;
break;
}
}
}
}
protected static Group outputRoot;
protected static Group outputOptRoot;
protected static Group generalOptRoot;
protected static Group.EnableSet generalDestRoot;
protected static Option destFileOpt;
protected static Option destByteArrayOpt;
protected static Group imageioGeneralOptRoot;
protected static Option destFileChannelOpt;
protected static Option useCacheTog;
public static void init() {
outputRoot = new Group(iioRoot, "output", "Output Benchmarks");
outputRoot.setTabbed();
// Options
outputOptRoot = new Group(outputRoot, "opts", "Options");
// General Options
generalOptRoot = new Group(outputOptRoot,
"general", "General Options");
generalDestRoot = new Group.EnableSet(generalOptRoot,
"dest", "Destintations");
destFileOpt = new OutputType("file", "File", OUTPUT_FILE);
destByteArrayOpt = new OutputType("byteArray", "byte[]", OUTPUT_ARRAY);
if (hasImageIO) {
// Image I/O Options
imageioGeneralOptRoot = new Group(outputOptRoot,
"imageio", "Image I/O Options");
if (fileChannelIOSSpi != null) {
destFileChannelOpt =
new OutputType("fileChannel", "FileChannel",
OUTPUT_FILECHANNEL);
}
useCacheTog = new Option.Toggle(imageioGeneralOptRoot, "useCache",
"ImageIO.setUseCache()",
Option.Toggle.Off);
}
OutputImageTests.init();
if (hasImageIO) {
OutputStreamTests.init();
}
}
protected OutputTests(Group parent, String nodeName, String description) {
super(parent, nodeName, description);
}
protected static class OutputType extends Option.Enable {
private int type;
public OutputType(String nodeName, String description, int type) {
super(generalDestRoot, nodeName, description, false);
this.type = type;
}
public int getType() {
return type;
}
public String getAbbreviatedModifierDescription(Object value) {
return getModifierValueName(value);
}
public String getModifierValueName(Object val) {
return getNodeName();
}
}
protected static abstract class Context {
int size;
Object output;
int outputType;
OutputStream origStream;
Context(TestEnvironment env, Result result) {
size = env.getIntValue(sizeList);
if (hasImageIO) {
if (env.getModifier(useCacheTog) != null) {
ImageIO.setUseCache(env.isEnabled(useCacheTog));
}
}
OutputType t = (OutputType)env.getModifier(generalDestRoot);
outputType = t.getType();
}
void initOutput() {
if ((outputType == OUTPUT_FILE) ||
(outputType == OUTPUT_FILECHANNEL))
{
try {
File outputfile = File.createTempFile("iio", ".tmp");
outputfile.deleteOnExit();
output = outputfile;
} catch (IOException e) {
System.err.println("error creating temp file");
e.printStackTrace();
}
}
}
ImageOutputStream createImageOutputStream() throws IOException {
ImageOutputStream ios;
switch (outputType) {
case OUTPUT_FILE:
ios = new FileImageOutputStream((File)output);
break;
case OUTPUT_ARRAY:
ByteArrayOutputStream baos = new ByteArrayOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(baos);
if (ImageIO.getUseCache()) {
ios = new FileCacheImageOutputStream(bos, null);
} else {
ios = new MemoryCacheImageOutputStream(bos);
}
break;
case OUTPUT_FILECHANNEL:
FileOutputStream fos = new FileOutputStream((File)output);
origStream = fos;
java.nio.channels.FileChannel fc = fos.getChannel();
ios = fileChannelIOSSpi.createOutputStreamInstance(fc, false,
null);
break;
default:
ios = null;
break;
}
return ios;
}
void closeOriginalStream() throws IOException {
if (origStream != null) {
origStream.close();
origStream = null;
}
}
void cleanup(TestEnvironment env) {
}
}
}