import java.lang.System;
import lejos.nxt.*;
/**
* This program tests the performance with and without Listeners,
* speed as well as memory efficiency.
* Press Run repeatedly to obtain 8 values
* (the number of the value is shown in the program number):
*
* 1/3/5/7: time in ms for empty for loop of 10000 iterations
* 2/4/6/8: free memory
*
* 1/2: no listeners
* 3/4: one button listener
* 5/6: two button listeners
* 7/8: two button listeners and a sensor listener
*
*
* Note that this program is similar to the leJOS RCX version
* and can be used to compare the performance of leJOS on the
* NXT with leJOS on the RCX.
*
**/
public class PerformanceTest
{
public static void main (String[] arg)
throws InterruptedException
{
long t0;
long t1;
//showProgramNumber( 0);
//showNumber( (int)(Runtime.getRuntime().freeMemory())-10000);
//Button.ENTER.waitForPressAndRelease();
t0 = System.currentTimeMillis();
for( int i=0; i<10000; i++){};
t1 = System.currentTimeMillis();
showProgramNumber( 1);
showNumber( (int)t1-(int)t0);
Button.ENTER.waitForPressAndRelease();
showProgramNumber( 2);
showNumber( (int)(Runtime.getRuntime().freeMemory())-10000);
Button.ENTER.waitForPressAndRelease();
Button.LEFT.addButtonListener( new ButtonListener() {
private int count = 0;
public void buttonPressed( Button button) {
count++;
showProgramNumber( count);
}
public void buttonReleased( Button button) {
}
}
);
t0 = System.currentTimeMillis();
for( int i=0; i<10000; i++){};
t1 = System.currentTimeMillis();
showProgramNumber( 3);
showNumber( (int)t1-(int)t0);
Button.ENTER.waitForPressAndRelease();
showProgramNumber( 4);
showNumber( (int)(Runtime.getRuntime().freeMemory())-10000);
Button.ENTER.waitForPressAndRelease();
Button.RIGHT.addButtonListener( new ButtonListener() {
public void buttonPressed( Button button) {
}
public void buttonReleased( Button button) {
}
}
);
t0 = System.currentTimeMillis();
for( int i=0; i<10000; i++){};
t1 = System.currentTimeMillis();
showProgramNumber( 5);
showNumber( (int)t1-(int)t0);
Button.ENTER.waitForPressAndRelease();
showProgramNumber( 6);
showNumber( (int)(Runtime.getRuntime().freeMemory())-10000);
Button.ENTER.waitForPressAndRelease();
SensorPort.S1.addSensorPortListener( new SensorPortListener() {
public void stateChanged( SensorPort port, int oldValue, int newValue) {
}
}
);
t0 = System.currentTimeMillis();
for( int i=0; i<10000; i++){};
t1 = System.currentTimeMillis();
showProgramNumber( 7);
showNumber( (int)t1-(int)t0);
Button.ENTER.waitForPressAndRelease();
showProgramNumber( 8);
showNumber( (int)(Runtime.getRuntime().freeMemory())-10000);
Button.ENTER.waitForPressAndRelease();
}
static void showProgramNumber(int p)
{
LCD.clear();
LCD.drawInt(p,0,0);
LCD.refresh();
}
static void showNumber(int n)
{
LCD.drawInt(n,2,0);
LCD.refresh();
}
}