From af5014a6f70de0512be33262611ff5da8468f4f9 Mon Sep 17 00:00:00 2001
From: Vojtech Moravec <vojtech.moravec.st@vsb.cz>
Date: Tue, 21 Jan 2020 11:38:09 +0100
Subject: [PATCH] Added plane times to verbose output

---
 .../azgracompress/compression/SQImageCompressor.java   | 10 ++++++++--
 .../azgracompress/compression/SQImageDecompressor.java |  7 +++++--
 .../azgracompress/compression/VQImageCompressor.java   | 10 +++++++++-
 .../azgracompress/compression/VQImageDecompressor.java |  7 +++++--
 .../quantization/vector/LBGVectorQuantizer.java        |  2 +-
 src/main/java/azgracompress/utilities/Stopwatch.java   |  3 ++-
 6 files changed, 30 insertions(+), 9 deletions(-)

diff --git a/src/main/java/azgracompress/compression/SQImageCompressor.java b/src/main/java/azgracompress/compression/SQImageCompressor.java
index cc52ed9..2181a7a 100644
--- a/src/main/java/azgracompress/compression/SQImageCompressor.java
+++ b/src/main/java/azgracompress/compression/SQImageCompressor.java
@@ -7,6 +7,7 @@ import azgracompress.io.OutBitStream;
 import azgracompress.io.RawDataIO;
 import azgracompress.quantization.scalar.LloydMaxU16ScalarQuantization;
 import azgracompress.quantization.scalar.ScalarQuantizer;
+import azgracompress.utilities.Stopwatch;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -55,19 +56,23 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
      */
     public void compress(DataOutputStream compressStream) throws Exception {
         ScalarQuantizer quantizer = null;
+        Stopwatch stopwatch = new Stopwatch();
         if (options.hasReferencePlaneIndex()) {
+            stopwatch.restart();
             final ImageU16 referencePlane = RawDataIO.loadImageU16(options.getInputFile(),
                                                                    options.getImageDimension(),
                                                                    options.getReferencePlaneIndex());
 
             Log(String.format("Training scalar quantizer from reference plane %d.", options.getReferencePlaneIndex()));
             quantizer = trainScalarQuantizerFromData(referencePlane.getData());
+            stopwatch.stop();
             writeCodebookToOutputStream(quantizer, compressStream);
+            Log("Reference codebook created in: " + stopwatch.getElapsedTimeString());
         }
 
         final int[] planeIndices = getPlaneIndicesForCompression();
-
         for (final int planeIndex : planeIndices) {
+            stopwatch.restart();
             Log(String.format("Loading plane %d.", planeIndex));
             final ImageU16 plane = RawDataIO.loadImageU16(options.getInputFile(),
                                                           options.getImageDimension(),
@@ -89,7 +94,8 @@ public class SQImageCompressor extends CompressorDecompressorBase implements IIm
             } catch (IOException ioEx) {
                 ioEx.printStackTrace();
             }
-
+            stopwatch.stop();
+            Log("Plane time: " + stopwatch.getElapsedTimeString());
             Log(String.format("Finished processing of plane %d", planeIndex));
         }
     }
diff --git a/src/main/java/azgracompress/compression/SQImageDecompressor.java b/src/main/java/azgracompress/compression/SQImageDecompressor.java
index d12566d..0c6cbea 100644
--- a/src/main/java/azgracompress/compression/SQImageDecompressor.java
+++ b/src/main/java/azgracompress/compression/SQImageDecompressor.java
@@ -3,6 +3,7 @@ package azgracompress.compression;
 import azgracompress.cli.ParsedCliOptions;
 import azgracompress.fileformat.QCMPFileHeader;
 import azgracompress.io.InBitStream;
+import azgracompress.utilities.Stopwatch;
 import azgracompress.utilities.TypeConverter;
 
 import java.io.DataInputStream;
@@ -57,8 +58,9 @@ public class SQImageDecompressor extends CompressorDecompressorBase implements I
             quantizationValues = readScalarQuantizationValues(compressedStream, codebookSize);
         }
 
-
+        Stopwatch stopwatch = new Stopwatch();
         for (int planeIndex = 0; planeIndex < planeCountForDecompression; planeIndex++) {
+            stopwatch.restart();
             if (header.isCodebookPerPlane()) {
                 Log("Loading plane codebook...");
                 quantizationValues = readScalarQuantizationValues(compressedStream, codebookSize);
@@ -78,7 +80,8 @@ public class SQImageDecompressor extends CompressorDecompressorBase implements I
             final byte[] decompressedPlaneData = TypeConverter.unsignedShortArrayToByteArray(decompressedValues, false);
 
             decompressStream.write(decompressedPlaneData);
-            Log(String.format("Decompressed plane %d.", planeIndex));
+            stopwatch.stop();
+            Log(String.format("Decompressed plane %d in %s.", planeIndex, stopwatch.getElapsedTimeString()));
         }
 
     }
diff --git a/src/main/java/azgracompress/compression/VQImageCompressor.java b/src/main/java/azgracompress/compression/VQImageCompressor.java
index 853b617..312cb18 100644
--- a/src/main/java/azgracompress/compression/VQImageCompressor.java
+++ b/src/main/java/azgracompress/compression/VQImageCompressor.java
@@ -10,6 +10,7 @@ import azgracompress.quantization.vector.CodebookEntry;
 import azgracompress.quantization.vector.LBGResult;
 import azgracompress.quantization.vector.LBGVectorQuantizer;
 import azgracompress.quantization.vector.VectorQuantizer;
+import azgracompress.utilities.Stopwatch;
 
 import java.io.DataOutputStream;
 import java.io.IOException;
@@ -79,7 +80,9 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
      */
     public void compress(DataOutputStream compressStream) throws Exception {
         VectorQuantizer quantizer = null;
+        Stopwatch stopwatch = new Stopwatch();
         if (options.hasReferencePlaneIndex()) {
+            stopwatch.restart();
             final ImageU16 referencePlane = RawDataIO.loadImageU16(options.getInputFile(),
                                                                    options.getImageDimension(),
                                                                    options.getReferencePlaneIndex());
@@ -88,12 +91,15 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
             final int[][] refPlaneVectors = getPlaneVectors(referencePlane);
             quantizer = trainVectorQuantizerFromPlaneVectors(refPlaneVectors);
             writeQuantizerToCompressStream(quantizer, compressStream);
-            Log("Wrote reference codebook.");
+            stopwatch.stop();
+            Log("Reference codebook created in: " + stopwatch.getElapsedTimeString());
         }
 
         final int[] planeIndices = getPlaneIndicesForCompression();
 
+
         for (final int planeIndex : planeIndices) {
+            stopwatch.restart();
             Log(String.format("Loading plane %d.", planeIndex));
             final ImageU16 plane = RawDataIO.loadImageU16(options.getInputFile(),
                                                           options.getImageDimension(),
@@ -118,6 +124,8 @@ public class VQImageCompressor extends CompressorDecompressorBase implements IIm
             } catch (IOException ioEx) {
                 ioEx.printStackTrace();
             }
+            stopwatch.stop();
+            Log("Plane time: " + stopwatch.getElapsedTimeString());
             Log(String.format("Finished processing of plane %d.", planeIndex));
         }
     }
diff --git a/src/main/java/azgracompress/compression/VQImageDecompressor.java b/src/main/java/azgracompress/compression/VQImageDecompressor.java
index 03913c9..c124cba 100644
--- a/src/main/java/azgracompress/compression/VQImageDecompressor.java
+++ b/src/main/java/azgracompress/compression/VQImageDecompressor.java
@@ -4,6 +4,7 @@ import azgracompress.cli.ParsedCliOptions;
 import azgracompress.data.*;
 import azgracompress.fileformat.QCMPFileHeader;
 import azgracompress.io.InBitStream;
+import azgracompress.utilities.Stopwatch;
 import azgracompress.utilities.TypeConverter;
 
 import java.io.DataInputStream;
@@ -103,8 +104,9 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
             quantizationVectors = readCodebookVectors(compressedStream, codebookSize, vectorSize);
         }
 
-
+        Stopwatch stopwatch = new Stopwatch();
         for (int planeIndex = 0; planeIndex < planeCountForDecompression; planeIndex++) {
+            stopwatch.restart();
             if (header.isCodebookPerPlane()) {
                 Log("Loading plane codebook...");
                 quantizationVectors = readCodebookVectors(compressedStream, codebookSize, vectorSize);
@@ -134,7 +136,8 @@ public class VQImageDecompressor extends CompressorDecompressorBase implements I
                     decompressedPlane.getData(),
                     false);
             decompressStream.write(decompressedPlaneData);
-            Log(String.format("Decompressed plane %d.", planeIndex));
+            stopwatch.stop();
+            Log(String.format("Decompressed plane %d in %s.", planeIndex, stopwatch.getElapsedTimeString()));
         }
 
     }
diff --git a/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java b/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java
index 71d8f4e..a927146 100644
--- a/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java
+++ b/src/main/java/azgracompress/quantization/vector/LBGVectorQuantizer.java
@@ -316,7 +316,7 @@ public class LBGVectorQuantizer {
         biggestPartition.removeTrainingVectorAndDistance(randomIndex);
 
         // Redistribute biggest partition training vectors
-        @SuppressWarnings("unchecked") final ArrayList<int[]> partitionVectors =
+        final ArrayList<int[]> partitionVectors =
                 (ArrayList<int[]>) biggestPartition.getTrainingVectors().clone();
 
         biggestPartition.clearTrainingData();
diff --git a/src/main/java/azgracompress/utilities/Stopwatch.java b/src/main/java/azgracompress/utilities/Stopwatch.java
index 53692fa..fc695d0 100644
--- a/src/main/java/azgracompress/utilities/Stopwatch.java
+++ b/src/main/java/azgracompress/utilities/Stopwatch.java
@@ -41,7 +41,8 @@ public class Stopwatch {
         if (elapsed == null) {
             return "No time measured yet.";
         }
-        return String.format("%dH %dMin %d Sec %d Ms", elapsed.toHoursPart(), elapsed.toMinutesPart(), elapsed.toSecondsPart(), elapsed.toMillisPart());
+        return String.format("%dH %dmin %dsec %dms %dns", elapsed.toHoursPart(), elapsed.toMinutesPart(), elapsed.toSecondsPart(), elapsed.toMillisPart(), elapsed.toNanosPart());
+
     }
 
     @Override
-- 
GitLab