package benchmark;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.IOException;
import javax.microedition.io.Connector;
import javax.microedition.io.file.FileConnection;
import com.nokia.mid.s40.io.LocalMessageProtocolMessage;
import com.nokia.mid.s40.io.LocalMessageProtocolConnection;
import com.nokia.mid.s40.codec.DataEncoder;
import com.nokia.mid.s40.codec.DataDecoder;
import gnu.testlet.TestUtils;
import org.mozilla.MemorySampler;
import com.sun.cldchi.jvm.JVM;
public class ImageProcessingBench {
LocalMessageProtocolConnection client;
String scaleImage() throws IOException {
DataEncoder dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "Scale");
dataEncoder.put(2, "trans_id", 42);
dataEncoder.put(11, "filename", "test.jpg");
dataEncoder.putStart(15, "limits");
dataEncoder.put(5, "max_hres", 100);
dataEncoder.put(5, "max_vres", 100);
dataEncoder.putEnd(15, "limits");
dataEncoder.put(10, "aspect", "FullImage");
dataEncoder.put(2, "quality", 80);
dataEncoder.putEnd(14, "event");
byte[] sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
LocalMessageProtocolMessage msg = client.newMessage(null);
client.receive(msg);
byte[] clientData = msg.getData();
DataDecoder dataDecoder = new DataDecoder("Conv-BEB", clientData, 0, clientData.length);
dataDecoder.getStart(14);
dataDecoder.getString(13);
dataDecoder.getInteger(2);
dataDecoder.getString(10);
return "file:////" + dataDecoder.getString(11);
}
void runBenchmark() {
try {
long start, time = 0;
client = (LocalMessageProtocolConnection)Connector.open("localmsg://nokia.image-processing");
DataEncoder dataEncoder = new DataEncoder("Conv-BEB");
dataEncoder.putStart(14, "event");
dataEncoder.put(13, "name", "Common");
dataEncoder.putStart(14, "message");
dataEncoder.put(13, "name", "ProtocolVersion");
dataEncoder.put(10, "version", "1.[0-10]");
dataEncoder.putEnd(14, "message");
dataEncoder.putEnd(14, "event");
byte[] sendData = dataEncoder.getData();
client.send(sendData, 0, sendData.length);
LocalMessageProtocolMessage msg = client.newMessage(null);
client.receive(msg);
FileConnection originalImage = (FileConnection)Connector.open("file:////test.jpg", Connector.READ_WRITE);
if (!originalImage.exists()) {
originalImage.create();
}
OutputStream os = originalImage.openDataOutputStream();
InputStream is = getClass().getResourceAsStream("/org/mozilla/io/test.jpg");
os.write(TestUtils.read(is));
os.close();
MemorySampler.sampleMemory("Memory before nokia.image-processing benchmark");
for (int i = 0; i < 1000; i++) {
start = JVM.monotonicTimeMillis();
String path = scaleImage();
time += JVM.monotonicTimeMillis() - start;
FileConnection file = (FileConnection)Connector.open(path);
file.delete();
file.close();
}
System.out.println("scaleImage: " + time);
MemorySampler.sampleMemory("Memory after nokia.image-processing benchmark");
originalImage.delete();
originalImage.close();
client.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String args[]) {
ImageProcessingBench bench = new ImageProcessingBench();
bench.runBenchmark();
}
}