public class oadd.com.codahale.metrics.ExponentiallyDecayingReservoir extends java.lang.Object implements oadd.com.codahale.metrics.Reservoir
{
private static final int DEFAULT_SIZE;
private static final double DEFAULT_ALPHA;
private static final long RESCALE_THRESHOLD;
private final java.util.concurrent.ConcurrentSkipListMap values;
private final java.util.concurrent.locks.ReentrantReadWriteLock lock;
private final double alpha;
private final int size;
private final java.util.concurrent.atomic.AtomicLong count;
private volatile long startTime;
private final java.util.concurrent.atomic.AtomicLong lastScaleTick;
private final oadd.com.codahale.metrics.Clock clock;
public void <init>()
{
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void <init>(int,double)>(1028, 0.015);
return;
}
public void <init>(int, double)
{
oadd.com.codahale.metrics.Clock v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
int v;
double v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v := @parameter: int;
v := @parameter: double;
v = staticinvoke <oadd.com.codahale.metrics.Clock: oadd.com.codahale.metrics.Clock defaultClock()>();
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void <init>(int,double,oadd.com.codahale.metrics.Clock)>(v, v, v);
return;
}
public void <init>(int, double, oadd.com.codahale.metrics.Clock)
{
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
long v, v;
java.util.concurrent.locks.ReentrantReadWriteLock v;
java.util.concurrent.atomic.AtomicLong v, v;
oadd.com.codahale.metrics.Clock v;
java.util.concurrent.ConcurrentSkipListMap v;
int v;
double v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v := @parameter: int;
v := @parameter: double;
v := @parameter: oadd.com.codahale.metrics.Clock;
specialinvoke v.<java.lang.Object: void <init>()>();
v = new java.util.concurrent.ConcurrentSkipListMap;
specialinvoke v.<java.util.concurrent.ConcurrentSkipListMap: void <init>()>();
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values> = v;
v = new java.util.concurrent.locks.ReentrantReadWriteLock;
specialinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock: void <init>()>();
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.locks.ReentrantReadWriteLock lock> = v;
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: double alpha> = v;
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: int size> = v;
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: oadd.com.codahale.metrics.Clock clock> = v;
v = new java.util.concurrent.atomic.AtomicLong;
specialinvoke v.<java.util.concurrent.atomic.AtomicLong: void <init>(long)>(0L);
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.atomic.AtomicLong count> = v;
v = specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long currentTimeInSeconds()>();
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long startTime> = v;
v = new java.util.concurrent.atomic.AtomicLong;
v = virtualinvoke v.<oadd.com.codahale.metrics.Clock: long getTick()>();
specialinvoke v.<java.util.concurrent.atomic.AtomicLong: void <init>(long)>(v);
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.atomic.AtomicLong lastScaleTick> = v;
return;
}
public int size()
{
java.util.concurrent.atomic.AtomicLong v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
int v;
long v, v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: int size>;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.atomic.AtomicLong count>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
v = staticinvoke <java.lang.Math: long min(long,long)>(v, v);
return v;
}
public void update(long)
{
long v, v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v := @parameter: long;
v = specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long currentTimeInSeconds()>();
virtualinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void update(long,long)>(v, v);
return;
}
public void update(long, long)
{
java.lang.Throwable v;
java.lang.Double v, v;
long v, v, v, v, v;
byte v, v;
java.util.concurrent.ThreadLocalRandom v;
int v;
boolean v;
double v, v, v, v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
java.util.concurrent.atomic.AtomicLong v;
java.util.concurrent.ConcurrentSkipListMap v, v, v, v, v, v;
oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample v;
java.lang.Object v, v, v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v := @parameter: long;
v := @parameter: long;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void rescaleIfNeeded()>();
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void lockForRegularUsage()>();
label:
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long startTime>;
v = v - v;
v = specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: double weight(long)>(v);
v = new oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample;
specialinvoke v.<oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample: void <init>(long,double)>(v, v);
v = staticinvoke <java.util.concurrent.ThreadLocalRandom: java.util.concurrent.ThreadLocalRandom current()>();
v = virtualinvoke v.<java.util.concurrent.ThreadLocalRandom: double nextDouble()>();
v = v / v;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.atomic.AtomicLong count>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long incrementAndGet()>();
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: int size>;
v = v cmp v;
if v <= 0 goto label;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: boolean isEmpty()>();
if v == 0 goto label;
label:
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = staticinvoke <java.lang.Double: java.lang.Double valueOf(double)>(v);
virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
goto label;
label:
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.lang.Object firstKey()>();
v = virtualinvoke v.<java.lang.Double: double doubleValue()>();
v = v cmpg v;
if v >= 0 goto label;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = staticinvoke <java.lang.Double: java.lang.Double valueOf(double)>(v);
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.lang.Object putIfAbsent(java.lang.Object,java.lang.Object)>(v, v);
if v != null goto label;
label:
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.lang.Object remove(java.lang.Object)>(v);
if v != null goto label;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.lang.Object firstKey()>();
goto label;
label:
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void unlockForRegularUsage()>();
goto label;
label:
v := @caughtexception;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void unlockForRegularUsage()>();
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
private void rescaleIfNeeded()
{
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
long v, v, v, v;
java.util.concurrent.atomic.AtomicLong v;
oadd.com.codahale.metrics.Clock v;
byte v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: oadd.com.codahale.metrics.Clock clock>;
v = virtualinvoke v.<oadd.com.codahale.metrics.Clock: long getTick()>();
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.atomic.AtomicLong lastScaleTick>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: long get()>();
v = v - v;
v = <oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long RESCALE_THRESHOLD>;
v = v cmp v;
if v < 0 goto label;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void rescale(long,long)>(v, v);
label:
return;
}
public oadd.com.codahale.metrics.Snapshot getSnapshot()
{
java.lang.Throwable v;
java.util.concurrent.ConcurrentSkipListMap v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
oadd.com.codahale.metrics.WeightedSnapshot v;
java.util.Collection v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void rescaleIfNeeded()>();
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void lockForRegularUsage()>();
label:
v = new oadd.com.codahale.metrics.WeightedSnapshot;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.util.Collection values()>();
specialinvoke v.<oadd.com.codahale.metrics.WeightedSnapshot: void <init>(java.util.Collection)>(v);
label:
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void unlockForRegularUsage()>();
return v;
label:
v := @caughtexception;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void unlockForRegularUsage()>();
throw v;
catch java.lang.Throwable from label to label with label;
}
private long currentTimeInSeconds()
{
java.util.concurrent.TimeUnit v;
oadd.com.codahale.metrics.Clock v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
long v, v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit MILLISECONDS>;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: oadd.com.codahale.metrics.Clock clock>;
v = virtualinvoke v.<oadd.com.codahale.metrics.Clock: long getTime()>();
v = virtualinvoke v.<java.util.concurrent.TimeUnit: long toSeconds(long)>(v);
return v;
}
private double weight(long)
{
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
long v;
double v, v, v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v := @parameter: long;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: double alpha>;
v = v * v;
v = staticinvoke <java.lang.Math: double exp(double)>(v);
return v;
}
private void rescale(long, long)
{
boolean v, v;
java.util.NavigableSet v;
java.lang.Throwable v;
java.lang.Double v;
long v, v, v, v, v, v, v;
java.util.ArrayList v;
int v, v, v;
double v, v, v, v, v, v, v, v, v;
java.util.Iterator v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
java.util.concurrent.atomic.AtomicLong v, v;
java.util.concurrent.ConcurrentSkipListMap v, v, v, v, v;
oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample v;
java.lang.Object v, v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v := @parameter: long;
v := @parameter: long;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void lockForRescale()>();
label:
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.atomic.AtomicLong lastScaleTick>;
v = virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: boolean compareAndSet(long,long)>(v, v);
if v == 0 goto label;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long startTime>;
v = specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long currentTimeInSeconds()>();
v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long startTime> = v;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: double alpha>;
v = neg v;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long startTime>;
v = v - v;
v = v * v;
v = staticinvoke <java.lang.Math: double exp(double)>(v);
v = staticinvoke <java.lang.Double: int compare(double,double)>(v, 0.0);
if v != 0 goto label;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: void clear()>();
goto label;
label:
v = new java.util.ArrayList;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.util.NavigableSet keySet()>();
specialinvoke v.<java.util.ArrayList: void <init>(java.util.Collection)>(v);
v = virtualinvoke v.<java.util.ArrayList: java.util.Iterator iterator()>();
label:
v = interfaceinvoke v.<java.util.Iterator: boolean hasNext()>();
if v == 0 goto label;
v = interfaceinvoke v.<java.util.Iterator: java.lang.Object next()>();
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.lang.Object remove(java.lang.Object)>(v);
v = new oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample;
v = v.<oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample: long value>;
v = v.<oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample: double weight>;
v = v * v;
specialinvoke v.<oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample: void <init>(long,double)>(v, v);
v = v.<oadd.com.codahale.metrics.WeightedSnapshot$WeightedSample: double weight>;
v = staticinvoke <java.lang.Double: int compare(double,double)>(v, 0.0);
if v == 0 goto label;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.lang.Double: double doubleValue()>();
v = v * v;
v = staticinvoke <java.lang.Double: java.lang.Double valueOf(double)>(v);
virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: java.lang.Object put(java.lang.Object,java.lang.Object)>(v, v);
goto label;
label:
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.atomic.AtomicLong count>;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.ConcurrentSkipListMap values>;
v = virtualinvoke v.<java.util.concurrent.ConcurrentSkipListMap: int size()>();
virtualinvoke v.<java.util.concurrent.atomic.AtomicLong: void set(long)>(v);
label:
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void unlockForRescale()>();
goto label;
label:
v := @caughtexception;
specialinvoke v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: void unlockForRescale()>();
throw v;
label:
return;
catch java.lang.Throwable from label to label with label;
}
private void unlockForRescale()
{
java.util.concurrent.locks.ReentrantReadWriteLock v;
java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.locks.ReentrantReadWriteLock lock>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock: java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock writeLock()>();
virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock: void unlock()>();
return;
}
private void lockForRescale()
{
java.util.concurrent.locks.ReentrantReadWriteLock v;
java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.locks.ReentrantReadWriteLock lock>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock: java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock writeLock()>();
virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock: void lock()>();
return;
}
private void lockForRegularUsage()
{
java.util.concurrent.locks.ReentrantReadWriteLock v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.locks.ReentrantReadWriteLock lock>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock: java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock readLock()>();
virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock: void lock()>();
return;
}
private void unlockForRegularUsage()
{
java.util.concurrent.locks.ReentrantReadWriteLock v;
oadd.com.codahale.metrics.ExponentiallyDecayingReservoir v;
java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock v;
v := @this: oadd.com.codahale.metrics.ExponentiallyDecayingReservoir;
v = v.<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: java.util.concurrent.locks.ReentrantReadWriteLock lock>;
v = virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock: java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock readLock()>();
virtualinvoke v.<java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock: void unlock()>();
return;
}
static void <clinit>()
{
java.util.concurrent.TimeUnit v;
long v;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit HOURS>;
v = virtualinvoke v.<java.util.concurrent.TimeUnit: long toNanos(long)>(1L);
<oadd.com.codahale.metrics.ExponentiallyDecayingReservoir: long RESCALE_THRESHOLD> = v;
return;
}
}