diff --git a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java index 23503fa0c24dbf333f23a9e9e5998dd2b64561fc..74bea24b64a633547663bef3388561a91b791c97 100644 --- a/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java +++ b/src/main/java/cz/it4i/qcmp/compression/ImageDecompressor.java @@ -11,6 +11,7 @@ import org.jetbrains.annotations.Nullable; import java.io.*; import java.util.Optional; +import java.util.concurrent.TimeUnit; @SuppressWarnings("DuplicatedCode") @@ -232,7 +233,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { return false; } decompressionStopwatch.stop(); - final double seconds = decompressionStopwatch.totalElapsedSeconds(); + final double seconds = decompressionStopwatch.getElapsedInUnit(TimeUnit.SECONDS); final double MBSize = ((double) decompressedFileSize / 1000.0) / 1000.0; final double MBPerSec = MBSize / seconds; reportStatusToListeners("Decompression speed: %.4f MB/s", MBPerSec); diff --git a/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java b/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java index e09e195e85b95e2c21676822f4164853ce219ed1..1557591352000afa155ab75add3727900af2cdb6 100644 --- a/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java +++ b/src/main/java/cz/it4i/qcmp/utilities/Stopwatch.java @@ -2,14 +2,14 @@ package cz.it4i.qcmp.utilities; import org.jetbrains.annotations.NotNull; -import java.time.Duration; -import java.time.Instant; +import java.util.concurrent.TimeUnit; public class Stopwatch { private final String name; - private Instant start; - Duration elapsed; + private boolean isMeasuring = false; + private long startTick; + private long elapsedTicks; @NotNull public static Stopwatch startNew(final String name) { @@ -32,36 +32,36 @@ public class Stopwatch { } public void start() { - start = Instant.now(); + isMeasuring = true; + startTick = System.nanoTime(); } public void stop() { - final Instant end = Instant.now(); - elapsed = Duration.between(start, end); + final long endTick = System.nanoTime(); + isMeasuring = false; + elapsedTicks += endTick - startTick; } - public void restart() { - elapsed = null; - start = Instant.now(); - } - - public long totalElapsedNanoseconds() { - return elapsed.toNanos(); + public void reset() { + isMeasuring = false; + elapsedTicks = 0; } - public long totalElapsedMilliseconds() { - return elapsed.toMillis(); + public void restart() { + isMeasuring = true; + elapsedTicks = 0; + startTick = System.nanoTime(); } - public double totalElapsedSeconds() { - return (elapsed.toNanos() / 1_000_000_000.0); + public long getElapsedInUnit(final TimeUnit timeUnit) { + return timeUnit.convert(elapsedTicks, TimeUnit.NANOSECONDS); } public String getElapsedTimeString() { - if (elapsed == null) { + if (isMeasuring || (elapsedTicks == 0)) { return "No time measured yet."; } - double MS = (double) elapsed.toMillis(); + double MS = (double) getElapsedInUnit(TimeUnit.MILLISECONDS); double M = 0; double S = 0; double H = 0;