abstract class com.google.common.util.concurrent.SmoothRateLimiter extends com.google.common.util.concurrent.RateLimiter
{
double storedPermits;
double maxPermits;
double stableIntervalMicros;
private long nextFreeTicketMicros;
private void <init>(com.google.common.util.concurrent.RateLimiter$SleepingStopwatch)
{
com.google.common.util.concurrent.RateLimiter$SleepingStopwatch v;
com.google.common.util.concurrent.SmoothRateLimiter v;
v := @this: com.google.common.util.concurrent.SmoothRateLimiter;
v := @parameter: com.google.common.util.concurrent.RateLimiter$SleepingStopwatch;
specialinvoke v.<com.google.common.util.concurrent.RateLimiter: void <init>(com.google.common.util.concurrent.RateLimiter$SleepingStopwatch)>(v);
v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros> = 0L;
return;
}
final void doSetRate(double, long)
{
java.util.concurrent.TimeUnit v;
long v, v;
com.google.common.util.concurrent.SmoothRateLimiter v;
double v, v;
v := @this: com.google.common.util.concurrent.SmoothRateLimiter;
v := @parameter: double;
v := @parameter: long;
virtualinvoke v.<com.google.common.util.concurrent.SmoothRateLimiter: void resync(long)>(v);
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit SECONDS>;
v = virtualinvoke v.<java.util.concurrent.TimeUnit: long toMicros(long)>(1L);
v = v / v;
v.<com.google.common.util.concurrent.SmoothRateLimiter: double stableIntervalMicros> = v;
virtualinvoke v.<com.google.common.util.concurrent.SmoothRateLimiter: void doSetRate(double,double)>(v, v);
return;
}
abstract void doSetRate(double, double);
final double doGetRate()
{
java.util.concurrent.TimeUnit v;
long v;
com.google.common.util.concurrent.SmoothRateLimiter v;
double v, v;
v := @this: com.google.common.util.concurrent.SmoothRateLimiter;
v = <java.util.concurrent.TimeUnit: java.util.concurrent.TimeUnit SECONDS>;
v = virtualinvoke v.<java.util.concurrent.TimeUnit: long toMicros(long)>(1L);
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: double stableIntervalMicros>;
v = v / v;
return v;
}
final long queryEarliestAvailable(long)
{
long v, v;
com.google.common.util.concurrent.SmoothRateLimiter v;
v := @this: com.google.common.util.concurrent.SmoothRateLimiter;
v := @parameter: long;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros>;
return v;
}
final long reserveEarliestAvailable(int, long)
{
long v, v, v, v, v, v;
com.google.common.util.concurrent.SmoothRateLimiter v;
int v;
double v, v, v, v, v, v, v, v;
v := @this: com.google.common.util.concurrent.SmoothRateLimiter;
v := @parameter: int;
v := @parameter: long;
virtualinvoke v.<com.google.common.util.concurrent.SmoothRateLimiter: void resync(long)>(v);
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros>;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: double storedPermits>;
v = staticinvoke <java.lang.Math: double min(double,double)>(v, v);
v = v - v;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: double storedPermits>;
v = virtualinvoke v.<com.google.common.util.concurrent.SmoothRateLimiter: long storedPermitsToWaitTime(double,double)>(v, v);
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: double stableIntervalMicros>;
v = v * v;
v = v + v;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros>;
v = staticinvoke <com.google.common.math.LongMath: long saturatedAdd(long,long)>(v, v);
v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros> = v;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: double storedPermits>;
v = v - v;
v.<com.google.common.util.concurrent.SmoothRateLimiter: double storedPermits> = v;
return v;
}
abstract long storedPermitsToWaitTime(double, double);
abstract double coolDownIntervalMicros();
void resync(long)
{
long v, v, v, v;
com.google.common.util.concurrent.SmoothRateLimiter v;
byte v;
double v, v, v, v, v, v;
v := @this: com.google.common.util.concurrent.SmoothRateLimiter;
v := @parameter: long;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros>;
v = v cmp v;
if v <= 0 goto label;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros>;
v = v - v;
v = virtualinvoke v.<com.google.common.util.concurrent.SmoothRateLimiter: double coolDownIntervalMicros()>();
v = v / v;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: double maxPermits>;
v = v.<com.google.common.util.concurrent.SmoothRateLimiter: double storedPermits>;
v = v + v;
v = staticinvoke <java.lang.Math: double min(double,double)>(v, v);
v.<com.google.common.util.concurrent.SmoothRateLimiter: double storedPermits> = v;
v.<com.google.common.util.concurrent.SmoothRateLimiter: long nextFreeTicketMicros> = v;
label:
return;
}
}