Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use LongAdder in CumulativeTimer and CumulativeDistributionSummary #4496

Merged
merged 1 commit into from
Dec 19, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@
import io.micrometer.core.instrument.distribution.TimeWindowMax;

import java.util.Arrays;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.DoubleAdder;
import java.util.concurrent.atomic.LongAdder;

/**
* Cumulative distribution summary.
Expand All @@ -35,7 +35,7 @@
*/
public class CumulativeDistributionSummary extends AbstractDistributionSummary {

private final AtomicLong count;
private final LongAdder count;

private final DoubleAdder total;

Expand All @@ -50,21 +50,21 @@ public CumulativeDistributionSummary(Id id, Clock clock, DistributionStatisticCo
public CumulativeDistributionSummary(Id id, Clock clock, DistributionStatisticConfig distributionStatisticConfig,
double scale, boolean supportsAggregablePercentiles) {
super(id, clock, distributionStatisticConfig, scale, supportsAggregablePercentiles);
this.count = new AtomicLong();
this.count = new LongAdder();
this.total = new DoubleAdder();
this.max = new TimeWindowMax(clock, distributionStatisticConfig);
}

@Override
protected void recordNonNegative(double amount) {
count.incrementAndGet();
count.increment();
total.add(amount);
max.record(amount);
}

@Override
public long count() {
return count.get();
return count.longValue();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,16 +23,16 @@
import io.micrometer.core.instrument.util.TimeUtils;

import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import java.util.concurrent.atomic.LongAdder;

/**
* @author Jon Schneider
*/
public class CumulativeTimer extends AbstractTimer {

private final AtomicLong count;
private final LongAdder count;

private final AtomicLong total;
private final LongAdder total;

private final TimeWindowMax max;

Expand All @@ -44,27 +44,27 @@ public CumulativeTimer(Id id, Clock clock, DistributionStatisticConfig distribut
public CumulativeTimer(Id id, Clock clock, DistributionStatisticConfig distributionStatisticConfig,
PauseDetector pauseDetector, TimeUnit baseTimeUnit, boolean supportsAggregablePercentiles) {
super(id, clock, distributionStatisticConfig, pauseDetector, baseTimeUnit, supportsAggregablePercentiles);
this.count = new AtomicLong();
this.total = new AtomicLong();
this.count = new LongAdder();
this.total = new LongAdder();
this.max = new TimeWindowMax(clock, distributionStatisticConfig);
}

@Override
protected void recordNonNegative(long amount, TimeUnit unit) {
long nanoAmount = (long) TimeUtils.convert(amount, unit, TimeUnit.NANOSECONDS);
count.getAndAdd(1);
total.getAndAdd(nanoAmount);
count.increment();
total.add(nanoAmount);
max.record(nanoAmount, TimeUnit.NANOSECONDS);
}

@Override
public long count() {
return count.get();
return count.longValue();
}

@Override
public double totalTime(TimeUnit unit) {
return TimeUtils.nanosToUnit(total.get(), unit);
return TimeUtils.nanosToUnit(total.doubleValue(), unit);
}

@Override
Expand Down