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

Report decompression speed in verbose mode.

parent a103e1eb
No related branches found
No related tags found
No related merge requests found
...@@ -3,6 +3,7 @@ package azgracompress.compression; ...@@ -3,6 +3,7 @@ package azgracompress.compression;
import azgracompress.cli.ParsedCliOptions; import azgracompress.cli.ParsedCliOptions;
import azgracompress.compression.exception.ImageDecompressionException; import azgracompress.compression.exception.ImageDecompressionException;
import azgracompress.fileformat.QCMPFileHeader; import azgracompress.fileformat.QCMPFileHeader;
import azgracompress.utilities.Stopwatch;
import java.io.*; import java.io.*;
...@@ -101,7 +102,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -101,7 +102,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
logBuilder.append("Codebook:\t\t").append(header.isCodebookPerPlane() ? "one per plane\n" : "one for " + logBuilder.append("Codebook:\t\t").append(header.isCodebookPerPlane() ? "one per plane\n" : "one for " +
"all\n"); "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("Codebook size:\t\t").append(codebookSize).append('\n');
logBuilder.append("Image size X:\t\t").append(header.getImageSizeX()).append('\n'); logBuilder.append("Image size X:\t\t").append(header.getImageSizeX()).append('\n');
...@@ -126,9 +127,9 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -126,9 +127,9 @@ public class ImageDecompressor extends CompressorDecompressorBase {
((fileSize / 1000) / 1000))); ((fileSize / 1000) / 1000)));
logBuilder.append("Data size:\t\t").append(dataSize).append(" Bytes ").append(dataSize == expectedDataSize ? "(correct)\n" : "(INVALID)\n"); 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 long uncompressedSize = header.getImageDims().multiplyTogether() * 2;
final double compressionRatio = (double)fileSize / (double)uncompressedSize; final double compressionRatio = (double) fileSize / (double) uncompressedSize;
logBuilder.append(String.format("Compression ratio:\t%.5f\n", compressionRatio)); logBuilder.append(String.format("Compression ratio:\t%.5f\n", compressionRatio));
} }
} }
...@@ -138,11 +139,12 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -138,11 +139,12 @@ public class ImageDecompressor extends CompressorDecompressorBase {
public boolean decompress() { public boolean decompress() {
final Stopwatch decompressionStopwatch = Stopwatch.startNew();
final long decompressedFileSize;
try (FileInputStream fileInputStream = new FileInputStream(options.getInputFile()); try (FileInputStream fileInputStream = new FileInputStream(options.getInputFile());
DataInputStream dataInputStream = new DataInputStream(fileInputStream)) { DataInputStream dataInputStream = new DataInputStream(fileInputStream)) {
final QCMPFileHeader header = readQCMPFileHeader(dataInputStream); final QCMPFileHeader header = readQCMPFileHeader(dataInputStream);
if (header == null) { if (header == null) {
System.err.println("Failed to read QCMPFile header"); System.err.println("Failed to read QCMPFile header");
return false; return false;
...@@ -151,6 +153,7 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -151,6 +153,7 @@ public class ImageDecompressor extends CompressorDecompressorBase {
System.err.println("QCMPFile header is invalid"); System.err.println("QCMPFile header is invalid");
return false; return false;
} }
decompressedFileSize = header.getImageDims().multiplyTogether();
IImageDecompressor imageDecompressor = getImageDecompressor(header); IImageDecompressor imageDecompressor = getImageDecompressor(header);
if (imageDecompressor == null) { if (imageDecompressor == null) {
...@@ -180,6 +183,11 @@ public class ImageDecompressor extends CompressorDecompressorBase { ...@@ -180,6 +183,11 @@ public class ImageDecompressor extends CompressorDecompressorBase {
ioEx.printStackTrace(); ioEx.printStackTrace();
return false; 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; return true;
} }
......
...@@ -53,8 +53,8 @@ public class Stopwatch { ...@@ -53,8 +53,8 @@ public class Stopwatch {
return elapsed.toMillis(); return elapsed.toMillis();
} }
public long totalElapsedSeconds() { public double totalElapsedSeconds() {
return elapsed.toSeconds(); return (elapsed.toNanos() / 1_000_000_000.0);
} }
public String getElapsedTimeString() { public String getElapsedTimeString() {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment