From 3a547be1a8d3f912c46a666987a16a3a30f4259a Mon Sep 17 00:00:00 2001 From: Vojtech Moravec <vojtech.moravec.st@vsb.cz> Date: Wed, 25 Mar 2020 15:17:40 +0100 Subject: [PATCH] Report decompression speed in verbose mode. --- .../compression/ImageDecompressor.java | 18 +++++++++++++----- .../azgracompress/utilities/Stopwatch.java | 4 ++-- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/azgracompress/compression/ImageDecompressor.java b/src/main/java/azgracompress/compression/ImageDecompressor.java index 8c9efe1..36d60cc 100644 --- a/src/main/java/azgracompress/compression/ImageDecompressor.java +++ b/src/main/java/azgracompress/compression/ImageDecompressor.java @@ -3,6 +3,7 @@ package azgracompress.compression; import azgracompress.cli.ParsedCliOptions; import azgracompress.compression.exception.ImageDecompressionException; import azgracompress.fileformat.QCMPFileHeader; +import azgracompress.utilities.Stopwatch; import java.io.*; @@ -101,7 +102,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { logBuilder.append("Codebook:\t\t").append(header.isCodebookPerPlane() ? "one per plane\n" : "one for " + "all\n"); - final int codebookSize = (int)Math.pow(2, header.getBitsPerPixel()); + final int codebookSize = (int) Math.pow(2, header.getBitsPerPixel()); logBuilder.append("Codebook size:\t\t").append(codebookSize).append('\n'); logBuilder.append("Image size X:\t\t").append(header.getImageSizeX()).append('\n'); @@ -126,9 +127,9 @@ public class ImageDecompressor extends CompressorDecompressorBase { ((fileSize / 1000) / 1000))); logBuilder.append("Data size:\t\t").append(dataSize).append(" Bytes ").append(dataSize == expectedDataSize ? "(correct)\n" : "(INVALID)\n"); - final long uncompressedSize = header.getImageDims().multiplyTogether() * 2; - final double compressionRatio = (double)fileSize / (double)uncompressedSize; - logBuilder.append(String.format("Compression ratio:\t%.5f\n", compressionRatio)); + final long uncompressedSize = header.getImageDims().multiplyTogether() * 2; + final double compressionRatio = (double) fileSize / (double) uncompressedSize; + logBuilder.append(String.format("Compression ratio:\t%.5f\n", compressionRatio)); } } @@ -138,11 +139,12 @@ public class ImageDecompressor extends CompressorDecompressorBase { public boolean decompress() { + final Stopwatch decompressionStopwatch = Stopwatch.startNew(); + final long decompressedFileSize; try (FileInputStream fileInputStream = new FileInputStream(options.getInputFile()); DataInputStream dataInputStream = new DataInputStream(fileInputStream)) { final QCMPFileHeader header = readQCMPFileHeader(dataInputStream); - if (header == null) { System.err.println("Failed to read QCMPFile header"); return false; @@ -151,6 +153,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { System.err.println("QCMPFile header is invalid"); return false; } + decompressedFileSize = header.getImageDims().multiplyTogether(); IImageDecompressor imageDecompressor = getImageDecompressor(header); if (imageDecompressor == null) { @@ -180,6 +183,11 @@ public class ImageDecompressor extends CompressorDecompressorBase { ioEx.printStackTrace(); return false; } + decompressionStopwatch.stop(); + final double seconds = decompressionStopwatch.totalElapsedSeconds(); + final double MBSize = ((double) decompressedFileSize / 1000.0) / 1000.0; + final double MBPerSec = MBSize / seconds; + Log("Decompression speed: %.4f MB/s", MBPerSec); return true; } diff --git a/src/main/java/azgracompress/utilities/Stopwatch.java b/src/main/java/azgracompress/utilities/Stopwatch.java index 9554171..2fb4571 100644 --- a/src/main/java/azgracompress/utilities/Stopwatch.java +++ b/src/main/java/azgracompress/utilities/Stopwatch.java @@ -53,8 +53,8 @@ public class Stopwatch { return elapsed.toMillis(); } - public long totalElapsedSeconds() { - return elapsed.toSeconds(); + public double totalElapsedSeconds() { + return (elapsed.toNanos() / 1_000_000_000.0); } public String getElapsedTimeString() { -- GitLab