mirror of
https://github.com/apache/activemq-artemis.git
synced 2025-02-21 01:15:50 +00:00
ARTEMIS-3522 Improve next fire time computation using double period
This commit is contained in:
parent
d744668270
commit
a51916447e
@ -16,7 +16,6 @@
|
||||
*/
|
||||
package org.apache.activemq.artemis.cli.commands.messages.perf;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.function.BooleanSupplier;
|
||||
|
||||
import io.netty.util.concurrent.OrderedEventExecutor;
|
||||
@ -24,7 +23,9 @@ import org.HdrHistogram.SingleWriterRecorder;
|
||||
|
||||
public final class ProducerTargetRateLoadGenerator extends SkeletalProducerLoadGenerator {
|
||||
|
||||
private final long usPeriod;
|
||||
private final double usPeriod;
|
||||
private long startLoadMicros;
|
||||
private long fireCount;
|
||||
private long fireTimeMicros;
|
||||
private boolean started;
|
||||
|
||||
@ -39,7 +40,7 @@ public final class ProducerTargetRateLoadGenerator extends SkeletalProducerLoadG
|
||||
final SingleWriterRecorder waitLatencies) {
|
||||
super(producer, executor, timeProvider, keepOnSending, group, msgContent, sendCompletedLatencies, waitLatencies);
|
||||
this.fireTimeMicros = 0;
|
||||
this.usPeriod = TimeUnit.NANOSECONDS.toMicros(nsPeriod);
|
||||
this.usPeriod = nsPeriod / 1000d;
|
||||
this.started = false;
|
||||
}
|
||||
|
||||
@ -51,6 +52,7 @@ public final class ProducerTargetRateLoadGenerator extends SkeletalProducerLoadG
|
||||
final long now = timeProvider.now();
|
||||
if (!started) {
|
||||
started = true;
|
||||
startLoadMicros = now;
|
||||
fireTimeMicros = now;
|
||||
}
|
||||
if (!trySend(fireTimeMicros, now)) {
|
||||
@ -61,7 +63,8 @@ public final class ProducerTargetRateLoadGenerator extends SkeletalProducerLoadG
|
||||
stopLoad = true;
|
||||
return;
|
||||
}
|
||||
fireTimeMicros += usPeriod;
|
||||
fireCount++;
|
||||
fireTimeMicros = startLoadMicros + (long) (fireCount * usPeriod);
|
||||
final long delay = fireTimeMicros - timeProvider.now();
|
||||
final long usToNextFireTime = Math.max(0, delay);
|
||||
asyncContinue(usToNextFireTime);
|
||||
|
Loading…
x
Reference in New Issue
Block a user