From 01510bc8aaf26a80570488bd84ad69a4e693ea39 Mon Sep 17 00:00:00 2001 From: rusefi Date: Sun, 7 Oct 2018 19:35:07 -0400 Subject: [PATCH] reducing code duplication --- .../ClosedLoopControlQualityMetric.java | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/java_console/ui/src/com/rusefi/ui/widgets/ClosedLoopControlQualityMetric.java b/java_console/ui/src/com/rusefi/ui/widgets/ClosedLoopControlQualityMetric.java index e4373bc526..96fc6cf0c5 100644 --- a/java_console/ui/src/com/rusefi/ui/widgets/ClosedLoopControlQualityMetric.java +++ b/java_console/ui/src/com/rusefi/ui/widgets/ClosedLoopControlQualityMetric.java @@ -1,11 +1,12 @@ package com.rusefi.ui.widgets; +import com.rusefi.CyclicBuffer; +import com.rusefi.DataBuffer; import com.rusefi.core.Sensor; import com.rusefi.core.SensorCentral; import com.rusefi.core.SensorStats; import com.rusefi.core.ValueSource; -import java.util.LinkedList; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -19,25 +20,24 @@ import java.util.concurrent.TimeUnit; * @see SensorStats */ public class ClosedLoopControlQualityMetric { + private static final int BUFFER_SIZE = 100; private final ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); private final ValueSource target; private final ValueSource result; private final Sensor destination; - private int maxSize = 100; /** - * Last maxSize number of error measurements + * Buffer of recent error measurements * GuardedBy(this) */ - private LinkedList errors = new LinkedList<>(); + private DataBuffer errors = new CyclicBuffer(BUFFER_SIZE); /** * @param target what value are we trying to achieve * @param result what value do we actually have */ public ClosedLoopControlQualityMetric(ValueSource target, ValueSource result, Sensor destination) { - this.target = target; this.result = result; this.destination = destination; @@ -56,16 +56,10 @@ public class ClosedLoopControlQualityMetric { } private synchronized double getStandardDeviation() { - float sum = 0; - for (Double error : errors) { - sum += error * error; - } - return Math.sqrt(sum / errors.size()); + return DataBuffer.getStandardDeviation(errors.getValues()); } private synchronized void rememberCurrentError(double error) { - if (errors.size() == maxSize) - errors.removeFirst(); errors.add(error); } }