Skip to content
Snippets Groups Projects
Commit e5e53660 authored by Vojtech Moravec's avatar Vojtech Moravec
Browse files

Use more precise time measurement in Stopwatch.

parent 388810b4
No related branches found
No related tags found
No related merge requests found
......@@ -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);
......
......@@ -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;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment