package ij.plugin;
import java.awt.*;
import ij.*;
/**ImageJ plugin for measuring the speed of various Java operations.*/
public class Timer implements PlugIn {
int j=0;
long startTime, nullLoopTime;
int numLoops;
public void run(String arg) {
int j=0, k;
int[] a = new int[10];
long endTime;
/*
startTime = System.currentTimeMillis();
//for (int i=0; i<100; i++) IJ.wait(10);
for (int i=0; i<100; i++) Thread.yield();
long elapsedTime = System.currentTimeMillis() - startTime;
IJ.write(elapsedTime + " ms");
*/
numLoops = 10000;
do {
numLoops = (int)(numLoops*1.33);
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {}
nullLoopTime = System.currentTimeMillis() - startTime;
//IJ.write("loops=" + numLoops + ", nullLoopTime=" + nullLoopTime);
} while (nullLoopTime<250);
IJ.write("");
IJ.write("Timer: " + numLoops + " iterations (" + nullLoopTime + "ms)");
Timer2 o = new Timer2();
// null loop
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {}
showTime("null loop");
// i = o.getJ()
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {k = o.getJ();}
showTime("i=o.getJ()");
// i = o.getJFinal()
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {k = o.getJFinal();}
showTime("i=o.getJ() (final)");
// i = o.getJClass()
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {k = o.getJClass();}
showTime("i=o.getJ() (static)");
// i=o.j
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {k = o.j;}
showTime("i=o.j");
// i=o.jStatic
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {k = Timer2.k;}
showTime("i=o.j (static)");
// i=j
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {k = j;}
showTime("i=j");
// i=a[j]
startTime = System.currentTimeMillis();
for (int i=0; i<numLoops; i++) {k = a[j];}
showTime("i=a[j]");
/*
long startTime = System.currentTimeMillis();
for (int i=0; i<=numLoops; i++) {
IJ.wait(51);
if (i%50 == 0 )
IJ.showProgress(i/(double)numLoops);
}
long endTime = System.currentTimeMillis();
IJ.write(" showProgress(): " + (endTime - startTime) + "msecs");
startTime = System.currentTimeMillis();
for (int i=0; i<=numLoops; i++) {
long time = System.currentTimeMillis();
}
endTime = System.currentTimeMillis();
IJ.write(" System.currentTimeMillis(): " + (endTime - startTime) + "msecs");
*/
}
void showTime(String s) {
long elapsedTime = System.currentTimeMillis() - startTime - nullLoopTime;
IJ.write(" " + s + ": " + (elapsedTime*1000000)/numLoops + " ns");
}
/*
void test() {
//IJ.showMessage("Available for testing");
//timer();
//barTest();
new Main();
}
void memoryTest() {
int i=0;
MemTest foo=null;
try {
while (true) {
foo=new MemTest(foo,100000);
i++;
}
} catch (OutOfMemoryError e) {
IJ.log("out of memory at "+i);
}
}
*/
}
class Timer2 {
int j=0;
static int k=0;
public int getJ() {return j;}
public final int getJFinal() {return j;}
public static int getJClass() {return k;}
}
/*
class MemTest{
MemTest last; //to keep last one from being garbage collected
byte[] buf;
public MemTest(MemTest last, int size) {
this.last=last;
buf=new byte[size];
}
}
class Main extends Frame {
Main() {
super("Dialog Example");
add("West", new Button("Modal"));
add("East", new Button("Modeless"));
pack();
show();
}
public boolean action(Event evt, Object what) {
if ("Modal".equals(what)) {
new MainDialog(this, true);
return true;
} else if ("Modeless".equals(what)) {
new MainDialog(this, false);
return true;
}
return false;
}
static public void main(String[] args) {
new Main();
}
}
class MainDialog extends Dialog {
// These two integers hold the location of the last window.
// New windows are created at an offset to the previous one.
static int offsetX, offsetY;
MainDialog(Frame frame, boolean modal) {
super(frame, modal);
setTitle(isModal() ? "Modal" : "Modeless");
add("Center", new Button("Quit"));
offsetX += 20;
offsetY += 20;
setLocation(offsetX, offsetY);
pack();
show();
}
public boolean action(Event evt, Object what) {
if ("Quit".equals(what)) {
dispose();
return true;
}
return false;
}
}
*/