@@ -21,15 +21,21 @@ public class OngoingPowerMeasure extends ProcessorAware implements PowerMeasure
2121 private final List <RegisteredSyntheticComponent > syntheticComponents ;
2222 private int samples ;
2323 private long [] timestamps ;
24+ private long samplePeriod ;
2425
2526 public OngoingPowerMeasure (SensorMetadata metadata , SyntheticComponent ... syntheticComponents ) {
27+ this (metadata , -1 , syntheticComponents );
28+ }
29+
30+ public OngoingPowerMeasure (SensorMetadata metadata , long samplePeriod , SyntheticComponent ... syntheticComponents ) {
2631 super (Processors .empty );
2732
2833 startedAt = System .currentTimeMillis ();
2934 final var numComponents = metadata .componentCardinality ();
3035 measures = new double [numComponents ][DEFAULT_SIZE ];
3136 nonZeroComponents = new BitSet (numComponents );
3237 timestamps = new long [DEFAULT_SIZE ];
38+ this .samplePeriod = samplePeriod ;
3339
3440 if (syntheticComponents != null ) {
3541 final var builder = SensorMetadata .from (metadata );
@@ -47,7 +53,7 @@ public OngoingPowerMeasure(SensorMetadata metadata, SyntheticComponent... synthe
4753 }
4854
4955 @ Override
50- public int numberOfSamples () {
56+ public synchronized int numberOfSamples () {
5157 return samples ;
5258 }
5359
@@ -57,19 +63,20 @@ public SensorMetadata metadata() {
5763 }
5864
5965 public void recordMeasure (double [] components ) {
60- samples ++;
6166 ensureArraysSize ();
6267
6368 final var timestamp = System .currentTimeMillis ();
64- timestamps [samples - 1 ] = timestamp ;
6569
66- for (int component = 0 ; component < components .length ; component ++) {
67- final var componentValue = components [component ];
68- // record that the value is not zero
69- if (componentValue != 0 ) {
70- nonZeroComponents .set (component );
70+ synchronized (this ) {
71+ timestamps [samples - 1 ] = timestamp ;
72+ for (int component = 0 ; component < components .length ; component ++) {
73+ final var componentValue = components [component ];
74+ // record that the value is not zero
75+ if (componentValue != 0 ) {
76+ nonZeroComponents .set (component );
77+ }
78+ measures [component ][samples - 1 ] = componentValue ;
7179 }
72- measures [component ][samples - 1 ] = componentValue ;
7380 }
7481
7582 final var processors = processors ();
@@ -82,7 +89,8 @@ public void recordMeasure(double[] components) {
8289 }
8390 }
8491
85- private void ensureArraysSize () {
92+ private synchronized void ensureArraysSize () {
93+ samples ++;
8694 final int currentSize = timestamps .length ;
8795 if (currentSize <= samples ) {
8896 final var newSize = currentSize * 2 ;
@@ -123,7 +131,7 @@ private static boolean targetComponentExistsAndIsRecorder(int component, Registe
123131 }
124132
125133 @ Override
126- public TimestampedMeasures getNthTimestampedMeasures (int n ) {
134+ public synchronized TimestampedMeasures getNthTimestampedMeasures (int n ) {
127135 n = Math .min (n , samples - 1 );
128136 final var result = new double [measures .length ];
129137 for (int i = 0 ; i < measures .length ; i ++) {
0 commit comments