[logback-dev] svn commit: r1594 - in logback/trunk/logback-core/src: main/java/ch/qos/logback/core test/java/ch/qos/logback/core
noreply.ceki at qos.ch
noreply.ceki at qos.ch
Thu Oct 4 11:44:10 CEST 2007
Author: ceki
Date: Thu Oct 4 11:44:09 2007
New Revision: 1594
Modified:
logback/trunk/logback-core/src/main/java/ch/qos/logback/core/StopWatch.java
logback/trunk/logback-core/src/test/java/ch/qos/logback/core/StopWatchTest.java
Log:
minor refactoring of the StopWatch class
Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/StopWatch.java
==============================================================================
--- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/StopWatch.java (original)
+++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/StopWatch.java Thu Oct 4 11:44:09 2007
@@ -4,30 +4,41 @@
public class StopWatch {
- private static final int STARTED = 1;
- private static final int STOPPED = 2;
- private static final int NANOS_IN_ONE_MICROSECOND = 1000;
- private static final int NANOS_IN_ONE_MILLISECOND = 1000*1000;
- private static final int NANOS_IN_ONE_SECOND = 1000*1000*1000;
private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("0.000");
+ static final long NANOS_IN_ONE_MICROSECOND = 1000;
+ static final long NANOS_IN_ONE_MILLISECOND = NANOS_IN_ONE_MICROSECOND * 1000;
+ static final long NANOS_IN_ONE_SECOND =NANOS_IN_ONE_MILLISECOND * 1000;
+
+ enum Status {
+ STARTED, STOPPED;
+ }
+
+ enum DurationUnit {
+ NANOSECOND, MICROSECOND, MILLISSECOND, SECOND;
+ }
+
final String name;
final long startTime;
long stopTime;
- int status;
+ Status status;
- StopWatch(String name) {
+ public StopWatch(String name) {
this.name = name;
this.startTime = System.nanoTime();
- this.status = STARTED;
+ this.status = Status.STARTED;
}
- StopWatch stop() {
- this.status = STOPPED;
- this.stopTime = System.nanoTime();
- return this;
+ public StopWatch stop() {
+ return stop(System.nanoTime());
}
+ public StopWatch stop(long stopTime) {
+ this.status = Status.STOPPED;
+ this.stopTime = stopTime;
+ return this;
+ }
+
@Override
public String toString() {
StringBuffer buf = new StringBuffer();
@@ -41,22 +52,24 @@
break;
case STOPPED:
buf.append("STOPPED at ");
- if(getResultInNanos() < 10*NANOS_IN_ONE_MICROSECOND) {
+ switch (selectDurationUnitForDisplay(getResultInNanos())) {
+ case NANOSECOND:
buf.append(getResultInNanos());
buf.append(" nanoseconds.");
- }
- else if (getResultInNanos() < 10*NANOS_IN_ONE_MILLISECOND) {
+ break;
+ case MICROSECOND:
buf.append(getResultInMicros());
buf.append(" microseconds.");
- } else if (getResultInNanos() < 5*NANOS_IN_ONE_SECOND) {
-
+ break;
+ case MILLISSECOND:
buf.append(getResultInMillis());
buf.append(" milliseconds.");
- } else {
+ break;
+ case SECOND:
double seconds = getResultInSeconds();
buf.append(DECIMAL_FORMAT.format(seconds));
buf.append(" seconds.");
-
+ break;
}
break;
default:
@@ -65,8 +78,20 @@
return buf.toString();
}
+ DurationUnit selectDurationUnitForDisplay(long durationInNanos) {
+ if (durationInNanos < 10L * NANOS_IN_ONE_MICROSECOND) {
+ return DurationUnit.NANOSECOND;
+ } else if (durationInNanos < 10L * NANOS_IN_ONE_MILLISECOND) {
+ return DurationUnit.MICROSECOND;
+ } else if (durationInNanos < 5L * NANOS_IN_ONE_SECOND) {
+ return DurationUnit.MILLISSECOND;
+ } else {
+ return DurationUnit.SECOND;
+ }
+ }
+
public final long getResultInNanos() {
- if (status == STARTED) {
+ if (status == Status.STARTED) {
return 0;
} else {
return stopTime - startTime;
@@ -80,7 +105,7 @@
public final long getResultInMillis() {
return getResultInNanos() / NANOS_IN_ONE_MILLISECOND;
}
-
+
public final double getResultInSeconds() {
return ((double) getResultInNanos() / NANOS_IN_ONE_SECOND);
}
Modified: logback/trunk/logback-core/src/test/java/ch/qos/logback/core/StopWatchTest.java
==============================================================================
--- logback/trunk/logback-core/src/test/java/ch/qos/logback/core/StopWatchTest.java (original)
+++ logback/trunk/logback-core/src/test/java/ch/qos/logback/core/StopWatchTest.java Thu Oct 4 11:44:09 2007
@@ -18,11 +18,50 @@
public void testBasic() throws InterruptedException {
StopWatch sw = new StopWatch("testBasic");
+
+ {
+ long d = sw.startTime+10;
+ String s = sw.stop(d).toString();
+ assertTrue(s.endsWith("10 nanoseconds."));
+ }
- Thread.sleep(55100);
- System.out.println(sw.stop().toString());
-
-
+ {
+ long d = sw.startTime+9*StopWatch.NANOS_IN_ONE_MICROSECOND;
+ String s = sw.stop(d).toString();
+ assertTrue(s.endsWith("9000 nanoseconds."));
+ }
+
+ {
+ long d = sw.startTime+11*StopWatch.NANOS_IN_ONE_MICROSECOND;
+ String s = sw.stop(d).toString();
+ assertTrue(s.endsWith("11 microseconds."));
+ }
+ {
+ long d = sw.startTime+9*StopWatch.NANOS_IN_ONE_MILLISECOND;
+ String s = sw.stop(d).toString();
+ assertTrue(s.endsWith("9000 microseconds."));
+ }
+ {
+ long d = sw.startTime+3*StopWatch.NANOS_IN_ONE_SECOND;
+ String s = sw.stop(d).toString();
+ assertTrue(s.endsWith("3000 milliseconds."));
+ }
+ {
+ long d = sw.startTime+6*StopWatch.NANOS_IN_ONE_SECOND;
+ String s = sw.stop(d).toString();
+ assertTrue(s.endsWith("6.000 milliseconds."));
+ }
}
+ public void testSelectDurationUnitForDisplay() throws InterruptedException {
+ StopWatch sw = new StopWatch("testBasic");
+ assertEquals(StopWatch.DurationUnit.NANOSECOND, sw.selectDurationUnitForDisplay(10));
+ assertEquals(StopWatch.DurationUnit.NANOSECOND, sw.selectDurationUnitForDisplay(9*StopWatch.NANOS_IN_ONE_MICROSECOND));
+ assertEquals(StopWatch.DurationUnit.MICROSECOND, sw.selectDurationUnitForDisplay(11*StopWatch.NANOS_IN_ONE_MICROSECOND));
+ assertEquals(StopWatch.DurationUnit.MICROSECOND, sw.selectDurationUnitForDisplay(9*StopWatch.NANOS_IN_ONE_MILLISECOND));
+ assertEquals(StopWatch.DurationUnit.MILLISSECOND, sw.selectDurationUnitForDisplay(11*StopWatch.NANOS_IN_ONE_MILLISECOND));
+ assertEquals(StopWatch.DurationUnit.MILLISSECOND, sw.selectDurationUnitForDisplay(3*StopWatch.NANOS_IN_ONE_SECOND));
+ assertEquals(StopWatch.DurationUnit.SECOND, sw.selectDurationUnitForDisplay(6*StopWatch.NANOS_IN_ONE_SECOND));
+ }
+
}
More information about the logback-dev
mailing list