package benchmark;
import com.sun.cldchi.jvm.JVM;
import java.io.InputStream;
import java.io.IOException;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.SocketConnection;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Graphics;
// This needs to be a midlet in order to have access to the J2ME socket API.
public class SocketStressBench extends MIDlet {
static class BouncyColors extends Canvas {
int x = 0;
int y = 0;
int dx = 3;
int dy = 5;
public void paint(Graphics g) {
int z = 0;
if ((x + dx) < 0 || (x + dx) > 200) {
dx *= -1;
}
if ((y + dy) < 0 || (y + dy) > 200) {
dy *= -1;
}
x += dx;
y += dy;
g.setColor(255, 255, 255);
g.fillRect(0, 0, 300, 300);
g.setColor((z + x) & 0xff, (z + y) & 0xff, (x + y) & 0xff);
g.fillRect(x, y, 10, 10);
}
}
static class Worker implements Runnable {
void benchmarkLargeRead() throws IOException {
SocketConnection client = (SocketConnection)Connector.open("socket://localhost:8000");
OutputStream os = client.openOutputStream();
os.write(("GET /bench/benchmark.jar HTTP/1.1\r\n" +
"Host: localhost\r\n" +
"Connection: close\r\n" +
"\r\n").getBytes());
os.close();
InputStream is = client.openInputStream();
byte[] data = new byte[1024];
int len;
long start = JVM.monotonicTimeMillis();
do {
len = is.read(data);
} while (len != -1);
System.out.println("large read time: " + (JVM.monotonicTimeMillis() - start));
is.close();
client.close();
}
public void run() {
while (true) {
try {
benchmarkLargeRead();
} catch (IOException e) {
System.out.println("error benchmarking large read: " + e);
}
}
}
}
void runBenchmark() {
Display display = Display.getDisplay(this);
BouncyColors bouncyColors = new BouncyColors();
display.setCurrent(bouncyColors);
for (int i = 0; i < 16; i++) {
Thread thread = new Thread(new Worker(), "T" + i);
thread.setPriority(Thread.MIN_PRIORITY);
thread.start();
}
Thread current = Thread.currentThread();
current.setPriority(Thread.MAX_PRIORITY);
while (true) {
bouncyColors.repaint();
try {
Thread.sleep(16);
} catch (InterruptedException e) {}
}
}
public static void main(String args[]) {
System.out.println("Run the SocketStressBench benchmark as a midlet: midletClassName=benchmark.SocketStressBench");
}
public void startApp() {
runBenchmark();
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
}