From f160e3f1b7802b6caa86a0c11e7ce9bb5906b1dd Mon Sep 17 00:00:00 2001 From: Chris Laprun Date: Sat, 11 Nov 2023 19:40:14 +0100 Subject: [PATCH] fix: adjust sampling frequency to account for processing time --- .../macos/powermetrics/MacOSPowermetricsSensor.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/runtime/src/main/java/io/quarkiverse/power/runtime/sensors/macos/powermetrics/MacOSPowermetricsSensor.java b/runtime/src/main/java/io/quarkiverse/power/runtime/sensors/macos/powermetrics/MacOSPowermetricsSensor.java index 53eee42..4cc3de8 100644 --- a/runtime/src/main/java/io/quarkiverse/power/runtime/sensors/macos/powermetrics/MacOSPowermetricsSensor.java +++ b/runtime/src/main/java/io/quarkiverse/power/runtime/sensors/macos/powermetrics/MacOSPowermetricsSensor.java @@ -48,8 +48,7 @@ AppleSiliconMeasure extractPowerMeasure(InputStream powerMeasureInput, long pid) true); } - AppleSiliconMeasure extractPowerMeasure(OngoingPowerMeasure ongoingMeasure, - InputStream powerMeasureInput, + AppleSiliconMeasure extractPowerMeasure(OngoingPowerMeasure ongoingMeasure, InputStream powerMeasureInput, String paddedPIDAsString, boolean returnCurrent) { try { // Should not be closed since it closes the process @@ -124,10 +123,10 @@ private static double extractAttributedMeasure(String line, double attributionRa @Override public OngoingPowerMeasure start(long duration, long frequency) throws Exception { - final var freq = Long.toString(Math.round(frequency)); + // it takes some time for the external process in addition to the sampling time so adjust the sampling frequency to account for this so that at most one measure occurs during the sampling time window + final var freq = Long.toString(frequency - 50); powermetrics = Runtime.getRuntime() - .exec("sudo powermetrics --samplers cpu_power,tasks --show-process-samp-norm --show-process-gpu -i " - + freq); + .exec("sudo powermetrics --samplers cpu_power,tasks --show-process-samp-norm --show-process-gpu -i " + freq); accumulatedCPUShareDiff = 0.0; return new OngoingPowerMeasure(AppleSiliconMeasure.METADATA); }