From 3669450773e734d49fbdf5200deddaedeb5ae37a Mon Sep 17 00:00:00 2001 From: Jade Turner Date: Mon, 29 Jul 2024 11:56:47 +0800 Subject: [PATCH 1/4] [epilogue] Allow configuring logging period and logging period offset --- .../epilogue/processor/EpilogueGenerator.java | 12 ++++++- .../processor/EpilogueGeneratorTest.java | 34 +++++++++++++++++-- .../first/epilogue/EpilogueConfiguration.java | 8 +++++ 3 files changed, 50 insertions(+), 4 deletions(-) diff --git a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java index 54050026a67..af60541bf8e 100644 --- a/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java +++ b/epilogue-processor/src/main/java/edu/wpi/first/epilogue/processor/EpilogueGenerator.java @@ -52,6 +52,9 @@ public void writeEpilogueFile( out.println("package edu.wpi.first.epilogue;"); out.println(); + out.println("import static edu.wpi.first.units.Units.Seconds;"); + out.println(); + loggerClassNames.stream() .sorted() .forEach( @@ -152,13 +155,20 @@ public static boolean shouldLog(Logged.Importance importance) { out.println(" public static void bind(" + robotClassName + " robot) {"); out.println(" robot.addPeriodic(() -> {"); out.println(" long start = System.nanoTime();"); + out.println(" if (config.loggingPeriod == null) {"); + out.println(" config.loggingPeriod = Seconds.of(robot.getPeriod());"); + out.println(" }"); + out.println(" if (config.loggingPeriodOffset == null) {"); + out.println(" config.loggingPeriodOffset = config.loggingPeriod.divide(2);"); + out.println(" }"); out.println( " " + StringUtils.loggerFieldName(mainRobotClass) + ".tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler);"); out.println( " edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry(\"Epilogue/Stats/Last Run\").setDouble((System.nanoTime() - start) / 1e6);"); - out.println(" }, robot.getPeriod(), robot.getPeriod() / 2);"); + out.println( + " }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds));"); out.println(" }"); } } diff --git a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java index bf1c94049ef..838b1fe857a 100644 --- a/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java +++ b/epilogue-processor/src/test/java/edu/wpi/first/epilogue/processor/EpilogueGeneratorTest.java @@ -30,6 +30,8 @@ class Example { """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; public final class Epilogue { @@ -77,6 +79,8 @@ public void endCompetition() {} """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; public final class Epilogue { @@ -119,6 +123,8 @@ class Example extends edu.wpi.first.wpilibj.TimedRobot { """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; public final class Epilogue { @@ -152,9 +158,15 @@ public static boolean shouldLog(Logged.Importance importance) { public static void bind(edu.wpi.first.epilogue.Example robot) { robot.addPeriodic(() -> { long start = System.nanoTime(); + if (config.loggingPeriod == null) { + config.loggingPeriod = Seconds.of(robot.getPeriod()); + } + if (config.loggingPeriodOffset == null) { + config.loggingPeriodOffset = config.loggingPeriod.divide(2); + } exampleLogger.tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler); edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry("Epilogue/Stats/Last Run").setDouble((System.nanoTime() - start) / 1e6); - }, robot.getPeriod(), robot.getPeriod() / 2); + }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds)); } } """; @@ -179,6 +191,8 @@ class BetaBot extends edu.wpi.first.wpilibj.TimedRobot { } """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.AlphaBotLogger; import edu.wpi.first.epilogue.BetaBotLogger; @@ -214,9 +228,15 @@ public static boolean shouldLog(Logged.Importance importance) { public static void bind(edu.wpi.first.epilogue.AlphaBot robot) { robot.addPeriodic(() -> { long start = System.nanoTime(); + if (config.loggingPeriod == null) { + config.loggingPeriod = Seconds.of(robot.getPeriod()); + } + if (config.loggingPeriodOffset == null) { + config.loggingPeriodOffset = config.loggingPeriod.divide(2); + } alphaBotLogger.tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler); edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry("Epilogue/Stats/Last Run").setDouble((System.nanoTime() - start) / 1e6); - }, robot.getPeriod(), robot.getPeriod() / 2); + }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds)); } /** @@ -230,9 +250,15 @@ public static void bind(edu.wpi.first.epilogue.AlphaBot robot) { public static void bind(edu.wpi.first.epilogue.BetaBot robot) { robot.addPeriodic(() -> { long start = System.nanoTime(); + if (config.loggingPeriod == null) { + config.loggingPeriod = Seconds.of(robot.getPeriod()); + } + if (config.loggingPeriodOffset == null) { + config.loggingPeriodOffset = config.loggingPeriod.divide(2); + } betaBotLogger.tryUpdate(config.dataLogger.getSubLogger(config.root), robot, config.errorHandler); edu.wpi.first.networktables.NetworkTableInstance.getDefault().getEntry("Epilogue/Stats/Last Run").setDouble((System.nanoTime() - start) / 1e6); - }, robot.getPeriod(), robot.getPeriod() / 2); + }, config.loggingPeriod.in(Seconds), config.loggingPeriodOffset.in(Seconds)); } } """; @@ -272,6 +298,8 @@ class Example { """ package edu.wpi.first.epilogue; + import static edu.wpi.first.units.Units.Seconds; + import edu.wpi.first.epilogue.ExampleLogger; import edu.wpi.first.epilogue.CustomLogger; diff --git a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java index e9a9813023c..ab39c02ef6c 100644 --- a/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java +++ b/epilogue-runtime/src/main/java/edu/wpi/first/epilogue/EpilogueConfiguration.java @@ -9,6 +9,8 @@ import edu.wpi.first.epilogue.logging.errors.ErrorHandler; import edu.wpi.first.epilogue.logging.errors.ErrorPrinter; import edu.wpi.first.networktables.NetworkTableInstance; +import edu.wpi.first.units.Measure; +import edu.wpi.first.units.Time; /** * A configuration object to be used by the generated {@code Epilogue} class to customize its @@ -23,6 +25,12 @@ public class EpilogueConfiguration { */ public DataLogger dataLogger = new NTDataLogger(NetworkTableInstance.getDefault()); + /** The period Epilogue will log at. */ + public Measure