From 79c5eaae693c459ebb6fd2de4d206d5834a68caa Mon Sep 17 00:00:00 2001 From: rusefillc Date: Sat, 12 Nov 2022 12:29:20 -0500 Subject: [PATCH] nicer package structure --- .../can/ConvertTrcToMegaLogViewerWithDBC.java | 1 + src/main/java/com/rusefi/can/TrcToMlq.java | 1 + .../can/{ => analysis}/ByteRateOfChange.java | 21 +++++-- .../can/analysis/ByteRateOfChangeReports.java | 61 +++++++++++++++++++ .../com/rusefi/can/reader/dbc/DbcFile.java | 2 +- .../rusefi/{can => mlv}/LoggingContext.java | 10 +-- .../rusefi/{can => mlv}/LoggingStrategy.java | 5 +- .../rusefi/can/ByteRateOfChangeSandbox.java | 57 +---------------- .../can/reader/impl/GetValueFromTrc.java | 2 +- .../reader/impl/ParseDBCWithCommentTest.java | 2 +- .../can/reader/impl/TrcToMlqSandbox.java | 2 +- 11 files changed, 95 insertions(+), 69 deletions(-) rename src/main/java/com/rusefi/can/{ => analysis}/ByteRateOfChange.java (88%) create mode 100644 src/main/java/com/rusefi/can/analysis/ByteRateOfChangeReports.java rename src/main/java/com/rusefi/{can => mlv}/LoggingContext.java (77%) rename src/main/java/com/rusefi/{can => mlv}/LoggingStrategy.java (95%) diff --git a/src/main/java/com/rusefi/can/ConvertTrcToMegaLogViewerWithDBC.java b/src/main/java/com/rusefi/can/ConvertTrcToMegaLogViewerWithDBC.java index 9334f6b..3c262b5 100644 --- a/src/main/java/com/rusefi/can/ConvertTrcToMegaLogViewerWithDBC.java +++ b/src/main/java/com/rusefi/can/ConvertTrcToMegaLogViewerWithDBC.java @@ -2,6 +2,7 @@ package com.rusefi.can; import com.rusefi.can.reader.CANLineReader; import com.rusefi.can.reader.dbc.DbcFile; +import com.rusefi.mlv.LoggingStrategy; import com.rusefi.util.FolderUtil; import java.io.File; diff --git a/src/main/java/com/rusefi/can/TrcToMlq.java b/src/main/java/com/rusefi/can/TrcToMlq.java index 37fd2d5..88308f6 100644 --- a/src/main/java/com/rusefi/can/TrcToMlq.java +++ b/src/main/java/com/rusefi/can/TrcToMlq.java @@ -2,6 +2,7 @@ package com.rusefi.can; import com.rusefi.can.reader.ReaderType; import com.rusefi.can.reader.dbc.DbcFile; +import com.rusefi.mlv.LoggingStrategy; import java.io.IOException; import java.util.List; diff --git a/src/main/java/com/rusefi/can/ByteRateOfChange.java b/src/main/java/com/rusefi/can/analysis/ByteRateOfChange.java similarity index 88% rename from src/main/java/com/rusefi/can/ByteRateOfChange.java rename to src/main/java/com/rusefi/can/analysis/ByteRateOfChange.java index 4981737..6d12db4 100644 --- a/src/main/java/com/rusefi/can/ByteRateOfChange.java +++ b/src/main/java/com/rusefi/can/analysis/ByteRateOfChange.java @@ -1,5 +1,8 @@ -package com.rusefi.can; +package com.rusefi.can.analysis; +import com.rusefi.can.CANPacket; +import com.rusefi.mlv.LoggingContext; +import com.rusefi.mlv.LoggingStrategy; import com.rusefi.can.reader.CANLineReader; import com.rusefi.sensor_logs.BinaryLogEntry; import com.rusefi.sensor_logs.BinarySensorLog; @@ -39,7 +42,9 @@ public class ByteRateOfChange { ps.close(); - TraceReport traceReport = new TraceReport(simpleFileName, statistics); + double duration = packets.isEmpty() ? 0 : packets.get(packets.size() - 1).getTimeStamp() - packets.get(0).getTimeStamp(); + + TraceReport traceReport = new TraceReport(simpleFileName, statistics, duration); traceReport.createMegaLogViewer(packets); return traceReport; } @@ -48,7 +53,7 @@ public class ByteRateOfChange { return String.format("%d/0x%x", sid, sid); } - static class ByteStatistics { + public static class ByteStatistics { HashSet uniqueValues = new HashSet<>(); private final ByteId key; @@ -70,7 +75,7 @@ public class ByteRateOfChange { } - static class ByteId { + public static class ByteId { final int sid; final int index; @@ -105,10 +110,16 @@ public class ByteRateOfChange { public static class TraceReport extends HashMap { private final String simpleFileName; private final HashMap statistics; + private double duration; - public TraceReport(String simpleFileName, HashMap statistics) { + public TraceReport(String simpleFileName, HashMap statistics, double duration) { this.simpleFileName = simpleFileName; this.statistics = statistics; + this.duration = duration; + } + + String getSummary() { + return getSimpleFileName() + " (duration=" + (int)(duration / 1000) + "secs)"; } public String getSimpleFileName() { diff --git a/src/main/java/com/rusefi/can/analysis/ByteRateOfChangeReports.java b/src/main/java/com/rusefi/can/analysis/ByteRateOfChangeReports.java new file mode 100644 index 0000000..d51d115 --- /dev/null +++ b/src/main/java/com/rusefi/can/analysis/ByteRateOfChangeReports.java @@ -0,0 +1,61 @@ +package com.rusefi.can.analysis; + +import java.io.PrintStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class ByteRateOfChangeReports { + /** + * sweet baby O(n^2) + */ + public static void compareEachReportAgainstAllOthers(List reports) { + for (int i = 0; i < reports.size(); i++) { + for (int j = i + 1; j < reports.size(); j++) + compareTwoReports(reports.get(i), reports.get(j)); + } + } + + private static void compareTwoReports(ByteRateOfChange.TraceReport traceReport1, ByteRateOfChange.TraceReport traceReport2) { + Set allKeys = new HashSet<>(); + allKeys.addAll(traceReport1.getStatistics().keySet()); + allKeys.addAll(traceReport2.getStatistics().keySet()); + + PrintStream report = System.out; + + report.println("Comparing unique value count per byte " + traceReport1.getSummary() + " and " + traceReport2.getSummary()); + + List differences = new ArrayList<>(); + + for (ByteRateOfChange.ByteId id : allKeys) { + ByteRateOfChange.ByteStatistics s1 = traceReport1.getStatistics().computeIfAbsent(id, ByteRateOfChange.ByteStatistics::new); + ByteRateOfChange.ByteStatistics s2 = traceReport2.getStatistics().computeIfAbsent(id, ByteRateOfChange.ByteStatistics::new); + + if (s1.getUniqueValues() != s2.getUniqueValues()) { + String msg = id + ": " + s1.getUniqueValues() + " vs " + s2.getUniqueValues(); + differences.add(new ByteVariationDifference(Math.abs(s1.getUniqueValues() - s2.getUniqueValues()), msg)); + } + } + differences.sort((o1, o2) -> o2.deltaCount - o1.deltaCount); + + for (ByteVariationDifference difference : differences) + report.println(difference.msg); + + report.println(differences.size() + " total differences"); + report.println(); + report.println(); + report.println(); + report.println(); + } + + static class ByteVariationDifference { + private final int deltaCount; + private final String msg; + + public ByteVariationDifference(int deltaCount, String msg) { + this.deltaCount = deltaCount; + this.msg = msg; + } + } +} diff --git a/src/main/java/com/rusefi/can/reader/dbc/DbcFile.java b/src/main/java/com/rusefi/can/reader/dbc/DbcFile.java index 8a32bc6..40e610a 100644 --- a/src/main/java/com/rusefi/can/reader/dbc/DbcFile.java +++ b/src/main/java/com/rusefi/can/reader/dbc/DbcFile.java @@ -1,6 +1,6 @@ package com.rusefi.can.reader.dbc; -import com.rusefi.can.LoggingStrategy; +import com.rusefi.mlv.LoggingStrategy; import com.rusefi.sensor_logs.BinaryLogEntry; import java.io.BufferedReader; diff --git a/src/main/java/com/rusefi/can/LoggingContext.java b/src/main/java/com/rusefi/mlv/LoggingContext.java similarity index 77% rename from src/main/java/com/rusefi/can/LoggingContext.java rename to src/main/java/com/rusefi/mlv/LoggingContext.java index a8e7b98..59fee3f 100644 --- a/src/main/java/com/rusefi/can/LoggingContext.java +++ b/src/main/java/com/rusefi/mlv/LoggingContext.java @@ -1,5 +1,7 @@ -package com.rusefi.can; +package com.rusefi.mlv; +import com.rusefi.can.CANPacket; +import com.rusefi.mlv.LoggingStrategy; import com.rusefi.sensor_logs.BinaryLogEntry; import com.rusefi.sensor_logs.BinarySensorLog; @@ -9,11 +11,11 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicReference; -class LoggingContext { - Map values = new HashMap<>(); +public class LoggingContext { + public Map values = new HashMap<>(); AtomicReference time = new AtomicReference<>(); - BinarySensorLog getBinaryLogEntryBinarySensorLog(Collection entries, String outputFileName) { + public BinarySensorLog getBinaryLogEntryBinarySensorLog(Collection entries, String outputFileName) { return new BinarySensorLog<>(o -> { Double value = this.values.get(o.getName()); if (value == null) diff --git a/src/main/java/com/rusefi/can/LoggingStrategy.java b/src/main/java/com/rusefi/mlv/LoggingStrategy.java similarity index 95% rename from src/main/java/com/rusefi/can/LoggingStrategy.java rename to src/main/java/com/rusefi/mlv/LoggingStrategy.java index 8d8f321..24a0bd7 100644 --- a/src/main/java/com/rusefi/can/LoggingStrategy.java +++ b/src/main/java/com/rusefi/mlv/LoggingStrategy.java @@ -1,5 +1,6 @@ -package com.rusefi.can; +package com.rusefi.mlv; +import com.rusefi.can.CANPacket; import com.rusefi.can.reader.dbc.DbcField; import com.rusefi.can.reader.dbc.DbcFile; import com.rusefi.can.reader.dbc.DbcPacket; @@ -45,7 +46,7 @@ public class LoggingStrategy { context.processPackets(packets, log, logger); } - interface PacketLogger { + public interface PacketLogger { boolean takeValues(CANPacket packetContent); } diff --git a/src/test/java/com/rusefi/can/ByteRateOfChangeSandbox.java b/src/test/java/com/rusefi/can/ByteRateOfChangeSandbox.java index 7f9072b..7fb90eb 100644 --- a/src/test/java/com/rusefi/can/ByteRateOfChangeSandbox.java +++ b/src/test/java/com/rusefi/can/ByteRateOfChangeSandbox.java @@ -1,13 +1,13 @@ package com.rusefi.can; +import com.rusefi.can.analysis.ByteRateOfChange; +import com.rusefi.can.analysis.ByteRateOfChangeReports; import com.rusefi.can.reader.ReaderType; import com.rusefi.util.FolderUtil; import java.io.File; import java.io.IOException; -import java.io.PrintStream; import java.util.*; -import java.util.function.Function; public class ByteRateOfChangeSandbox { public static void main(String[] args) throws IOException { @@ -27,57 +27,6 @@ public class ByteRateOfChangeSandbox { }, "pcan.trc"); - for (int i = 0; i < reports.size(); i++) { - for (int j = i + 1; j < reports.size(); j++) - compare(reports.get(i), reports.get(j)); - } + ByteRateOfChangeReports.compareEachReportAgainstAllOthers(reports); } - - private static void compare(ByteRateOfChange.TraceReport traceReport1, ByteRateOfChange.TraceReport traceReport2) { - Set allKeys = new HashSet<>(); - allKeys.addAll(traceReport1.getStatistics().keySet()); - allKeys.addAll(traceReport2.getStatistics().keySet()); - - PrintStream report = System.out; - - report.println("Comparing " + traceReport1.getSimpleFileName() + " and " + traceReport2.getSimpleFileName()); - - List differences = new ArrayList<>(); - - for (ByteRateOfChange.ByteId id : allKeys) { - ByteRateOfChange.ByteStatistics s1 = traceReport1.getStatistics().computeIfAbsent(id, byteId -> new ByteRateOfChange.ByteStatistics(byteId)); - ByteRateOfChange.ByteStatistics s2 = traceReport2.getStatistics().computeIfAbsent(id, byteId -> new ByteRateOfChange.ByteStatistics(byteId)); - - if (s1.getUniqueValues() != s2.getUniqueValues()) { - String msg = id + ": " + s1.getUniqueValues() + " vs " + s2.getUniqueValues(); - differences.add(new ByteVariationDifference(Math.abs(s1.getUniqueValues() - s2.getUniqueValues()), msg)); - } - } - differences.sort(new Comparator() { - @Override - public int compare(ByteVariationDifference o1, ByteVariationDifference o2) { - return o2.deltaCount - o1.deltaCount; - } - }); - - for (ByteVariationDifference difference : differences) - report.println(difference.msg); - - report.println(differences.size() + " total differences"); - report.println(); - report.println(); - report.println(); - report.println(); - } - - static class ByteVariationDifference { - private int deltaCount; - private String msg; - - public ByteVariationDifference(int deltaCount, String msg) { - this.deltaCount = deltaCount; - this.msg = msg; - } - } - } diff --git a/src/test/java/com/rusefi/can/reader/impl/GetValueFromTrc.java b/src/test/java/com/rusefi/can/reader/impl/GetValueFromTrc.java index 87d9157..c02a65c 100644 --- a/src/test/java/com/rusefi/can/reader/impl/GetValueFromTrc.java +++ b/src/test/java/com/rusefi/can/reader/impl/GetValueFromTrc.java @@ -1,7 +1,7 @@ package com.rusefi.can.reader.impl; import com.rusefi.can.CANPacket; -import com.rusefi.can.LoggingStrategy; +import com.rusefi.mlv.LoggingStrategy; import com.rusefi.can.reader.dbc.DbcField; import com.rusefi.can.reader.dbc.DbcFile; import org.junit.Test; diff --git a/src/test/java/com/rusefi/can/reader/impl/ParseDBCWithCommentTest.java b/src/test/java/com/rusefi/can/reader/impl/ParseDBCWithCommentTest.java index 89f47c8..0b6cb41 100644 --- a/src/test/java/com/rusefi/can/reader/impl/ParseDBCWithCommentTest.java +++ b/src/test/java/com/rusefi/can/reader/impl/ParseDBCWithCommentTest.java @@ -1,6 +1,6 @@ package com.rusefi.can.reader.impl; -import com.rusefi.can.LoggingStrategy; +import com.rusefi.mlv.LoggingStrategy; import com.rusefi.can.reader.dbc.DbcField; import com.rusefi.can.reader.dbc.DbcFile; import com.rusefi.can.reader.dbc.DbcPacket; diff --git a/src/test/java/com/rusefi/can/reader/impl/TrcToMlqSandbox.java b/src/test/java/com/rusefi/can/reader/impl/TrcToMlqSandbox.java index ac5112c..1e21848 100644 --- a/src/test/java/com/rusefi/can/reader/impl/TrcToMlqSandbox.java +++ b/src/test/java/com/rusefi/can/reader/impl/TrcToMlqSandbox.java @@ -1,7 +1,7 @@ package com.rusefi.can.reader.impl; import com.rusefi.can.CANPacket; -import com.rusefi.can.LoggingStrategy; +import com.rusefi.mlv.LoggingStrategy; import com.rusefi.can.reader.dbc.DbcFile; import java.io.BufferedReader;