.class public Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; .super Ljava/lang/Object; .source "SourceFile" # annotations .annotation system Ldalvik/annotation/EnclosingClass; value = Lcom/google/firebase/perf/transport/RateLimiter; .end annotation .annotation system Ldalvik/annotation/InnerClass; accessFlags = 0x9 name = "RateLimiterImpl" .end annotation # static fields .field public static final MICROS_IN_A_SECOND:J .field public static final logger:Lcom/google/firebase/perf/logging/AndroidLogger; # instance fields .field public backgroundCapacity:J .field public backgroundRate:Lcom/google/firebase/perf/util/Rate; .field public capacity:J .field public final clock:Lcom/google/firebase/perf/util/Clock; .field public foregroundCapacity:J .field public foregroundRate:Lcom/google/firebase/perf/util/Rate; .field public final isLogcatEnabled:Z .field public lastTimeTokenReplenished:Lcom/google/firebase/perf/util/Timer; .field public rate:Lcom/google/firebase/perf/util/Rate; .field public tokenCount:D # direct methods .method static constructor ()V .locals 3 .line 254 invoke-static {}, Lcom/google/firebase/perf/logging/AndroidLogger;->getInstance()Lcom/google/firebase/perf/logging/AndroidLogger; move-result-object v0 sput-object v0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->logger:Lcom/google/firebase/perf/logging/AndroidLogger; .line 255 sget-object v0, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit; const-wide/16 v1, 0x1 invoke-virtual {v0, v1, v2}, Ljava/util/concurrent/TimeUnit;->toMicros(J)J move-result-wide v0 sput-wide v0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->MICROS_IN_A_SECOND:J return-void .end method .method public constructor (Lcom/google/firebase/perf/util/Rate;JLcom/google/firebase/perf/util/Clock;Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;Z)V .locals 0 .line 282 invoke-direct {p0}, Ljava/lang/Object;->()V iput-object p4, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->clock:Lcom/google/firebase/perf/util/Clock; iput-wide p2, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->capacity:J iput-object p1, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->rate:Lcom/google/firebase/perf/util/Rate; long-to-double p1, p2 iput-wide p1, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->tokenCount:D .line 287 invoke-virtual {p4}, Lcom/google/firebase/perf/util/Clock;->getTime()Lcom/google/firebase/perf/util/Timer; move-result-object p1 iput-object p1, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->lastTimeTokenReplenished:Lcom/google/firebase/perf/util/Timer; .line 288 invoke-virtual {p0, p5, p6, p7}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->setRateByReadingRemoteConfigValues(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;Z)V iput-boolean p7, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->isLogcatEnabled:Z return-void .end method .method public static getBlimitEvents(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J .locals 1 const-string v0, "Trace" if-ne p1, v0, :cond_0 .line 391 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getTraceEventCountBackground()J move-result-wide p0 return-wide p0 .line 393 :cond_0 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getNetworkEventCountBackground()J move-result-wide p0 return-wide p0 .end method .method public static getBlimitSec(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J .locals 1 const-string v0, "Trace" if-ne p1, v0, :cond_0 .line 383 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getRateLimitSec()J move-result-wide p0 return-wide p0 .line 385 :cond_0 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getRateLimitSec()J move-result-wide p0 return-wide p0 .end method .method public static getFlimitEvents(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J .locals 1 const-string v0, "Trace" if-ne p1, v0, :cond_0 .line 375 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getTraceEventCountForeground()J move-result-wide p0 return-wide p0 .line 377 :cond_0 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getNetworkEventCountForeground()J move-result-wide p0 return-wide p0 .end method .method public static getFlimitSec(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J .locals 1 const-string v0, "Trace" if-ne p1, v0, :cond_0 .line 367 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getRateLimitSec()J move-result-wide p0 return-wide p0 .line 369 :cond_0 invoke-virtual {p0}, Lcom/google/firebase/perf/config/ConfigResolver;->getRateLimitSec()J move-result-wide p0 return-wide p0 .end method # virtual methods .method public declared-synchronized changeRate(Z)V .locals 2 monitor-enter p0 if-eqz p1, :cond_0 :try_start_0 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->foregroundRate:Lcom/google/firebase/perf/util/Rate; goto :goto_0 :catchall_0 move-exception p1 goto :goto_2 :cond_0 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->backgroundRate:Lcom/google/firebase/perf/util/Rate; :goto_0 iput-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->rate:Lcom/google/firebase/perf/util/Rate; if-eqz p1, :cond_1 iget-wide v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->foregroundCapacity:J goto :goto_1 :cond_1 iget-wide v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->backgroundCapacity:J :goto_1 iput-wide v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->capacity:J :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 328 monitor-exit p0 return-void :goto_2 monitor-exit p0 throw p1 .end method .method public declared-synchronized check(Lcom/google/firebase/perf/v1/PerfMetric;)Z .locals 4 monitor-enter p0 :try_start_0 iget-object p1, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->clock:Lcom/google/firebase/perf/util/Clock; .line 301 invoke-virtual {p1}, Lcom/google/firebase/perf/util/Clock;->getTime()Lcom/google/firebase/perf/util/Timer; move-result-object p1 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->lastTimeTokenReplenished:Lcom/google/firebase/perf/util/Timer; .line 303 invoke-virtual {v0, p1}, Lcom/google/firebase/perf/util/Timer;->getDurationMicros(Lcom/google/firebase/perf/util/Timer;)J move-result-wide v0 long-to-double v0, v0 iget-object v2, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->rate:Lcom/google/firebase/perf/util/Rate; .line 304 invoke-virtual {v2}, Lcom/google/firebase/perf/util/Rate;->getTokensPerSeconds()D move-result-wide v2 mul-double/2addr v0, v2 sget-wide v2, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->MICROS_IN_A_SECOND:J long-to-double v2, v2 div-double/2addr v0, v2 const-wide/16 v2, 0x0 cmpl-double v2, v0, v2 if-lez v2, :cond_0 iget-wide v2, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->tokenCount:D add-double/2addr v2, v0 iget-wide v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->capacity:J long-to-double v0, v0 .line 307 invoke-static {v2, v3, v0, v1}, Ljava/lang/Math;->min(DD)D move-result-wide v0 iput-wide v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->tokenCount:D iput-object p1, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->lastTimeTokenReplenished:Lcom/google/firebase/perf/util/Timer; goto :goto_0 :catchall_0 move-exception p1 goto :goto_1 :cond_0 :goto_0 iget-wide v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->tokenCount:D const-wide/high16 v2, 0x3ff0000000000000L # 1.0 cmpl-double p1, v0, v2 if-ltz p1, :cond_1 sub-double/2addr v0, v2 iput-wide v0, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->tokenCount:D :try_end_0 .catchall {:try_start_0 .. :try_end_0} :catchall_0 .line 312 monitor-exit p0 const/4 p1, 0x1 return p1 :cond_1 :try_start_1 iget-boolean p1, p0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->isLogcatEnabled:Z if-eqz p1, :cond_2 sget-object p1, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->logger:Lcom/google/firebase/perf/logging/AndroidLogger; const-string v0, "Exceeded log rate limit, dropping the log." .line 315 invoke-virtual {p1, v0}, Lcom/google/firebase/perf/logging/AndroidLogger;->warn(Ljava/lang/String;)V :try_end_1 .catchall {:try_start_1 .. :try_end_1} :catchall_0 .line 317 :cond_2 monitor-exit p0 const/4 p1, 0x0 return p1 :goto_1 monitor-exit p0 throw p1 .end method .method public final setRateByReadingRemoteConfigValues(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;Z)V .locals 17 move-object/from16 v0, p0 move-object/from16 v1, p2 .line 341 invoke-static/range {p1 .. p2}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->getFlimitSec(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J move-result-wide v5 .line 342 invoke-static/range {p1 .. p2}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->getFlimitEvents(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J move-result-wide v8 .line 344 new-instance v10, Lcom/google/firebase/perf/util/Rate; sget-object v16, Ljava/util/concurrent/TimeUnit;->SECONDS:Ljava/util/concurrent/TimeUnit; move-object v2, v10 move-wide v3, v8 move-object/from16 v7, v16 invoke-direct/range {v2 .. v7}, Lcom/google/firebase/perf/util/Rate;->(JJLjava/util/concurrent/TimeUnit;)V iput-object v10, v0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->foregroundRate:Lcom/google/firebase/perf/util/Rate; iput-wide v8, v0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->foregroundCapacity:J if-eqz p3, :cond_0 sget-object v2, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->logger:Lcom/google/firebase/perf/logging/AndroidLogger; .line 349 invoke-static {v8, v9}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v3 filled-new-array {v1, v10, v3}, [Ljava/lang/Object; move-result-object v3 const-string v4, "Foreground %s logging rate:%f, burst capacity:%d" .line 347 invoke-virtual {v2, v4, v3}, Lcom/google/firebase/perf/logging/AndroidLogger;->debug(Ljava/lang/String;[Ljava/lang/Object;)V .line 353 :cond_0 invoke-static/range {p1 .. p2}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->getBlimitSec(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J move-result-wide v14 .line 354 invoke-static/range {p1 .. p2}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->getBlimitEvents(Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;)J move-result-wide v2 .line 356 new-instance v4, Lcom/google/firebase/perf/util/Rate; move-object v11, v4 move-wide v12, v2 invoke-direct/range {v11 .. v16}, Lcom/google/firebase/perf/util/Rate;->(JJLjava/util/concurrent/TimeUnit;)V iput-object v4, v0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->backgroundRate:Lcom/google/firebase/perf/util/Rate; iput-wide v2, v0, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->backgroundCapacity:J if-eqz p3, :cond_1 sget-object v5, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->logger:Lcom/google/firebase/perf/logging/AndroidLogger; .line 360 invoke-static {v2, v3}, Ljava/lang/Long;->valueOf(J)Ljava/lang/Long; move-result-object v2 filled-new-array {v1, v4, v2}, [Ljava/lang/Object; move-result-object v1 const-string v2, "Background %s logging rate:%f, capacity:%d" .line 359 invoke-virtual {v5, v2, v1}, Lcom/google/firebase/perf/logging/AndroidLogger;->debug(Ljava/lang/String;[Ljava/lang/Object;)V :cond_1 return-void .end method