.class public final Lcom/google/firebase/perf/transport/RateLimiter; .super Ljava/lang/Object; .source "SourceFile" # annotations .annotation system Ldalvik/annotation/MemberClasses; value = { Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; } .end annotation # instance fields .field public final configResolver:Lcom/google/firebase/perf/config/ConfigResolver; .field public final fragmentBucketId:D .field public isLogcatEnabled:Z .field public networkLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; .field public final samplingBucketId:D .field public traceLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; # direct methods .method public constructor (Landroid/content/Context;Lcom/google/firebase/perf/util/Rate;J)V .locals 10 .line 69 new-instance v4, Lcom/google/firebase/perf/util/Clock; invoke-direct {v4}, Lcom/google/firebase/perf/util/Clock;->()V .line 73 invoke-static {}, Lcom/google/firebase/perf/transport/RateLimiter;->getSamplingBucketId()D move-result-wide v5 .line 74 invoke-static {}, Lcom/google/firebase/perf/transport/RateLimiter;->getSamplingBucketId()D move-result-wide v7 .line 75 invoke-static {}, Lcom/google/firebase/perf/config/ConfigResolver;->getInstance()Lcom/google/firebase/perf/config/ConfigResolver; move-result-object v9 move-object v0, p0 move-object v1, p2 move-wide v2, p3 .line 69 invoke-direct/range {v0 .. v9}, Lcom/google/firebase/perf/transport/RateLimiter;->(Lcom/google/firebase/perf/util/Rate;JLcom/google/firebase/perf/util/Clock;DDLcom/google/firebase/perf/config/ConfigResolver;)V .line 76 invoke-static {p1}, Lcom/google/firebase/perf/util/Utils;->isDebugLoggingEnabled(Landroid/content/Context;)Z move-result p1 iput-boolean p1, p0, Lcom/google/firebase/perf/transport/RateLimiter;->isLogcatEnabled:Z return-void .end method .method public constructor (Lcom/google/firebase/perf/util/Rate;JLcom/google/firebase/perf/util/Clock;DDLcom/google/firebase/perf/config/ConfigResolver;)V .locals 15 move-object v0, p0 move-wide/from16 v1, p5 move-wide/from16 v3, p7 .line 91 invoke-direct {p0}, Ljava/lang/Object;->()V const/4 v5, 0x0 iput-object v5, v0, Lcom/google/firebase/perf/transport/RateLimiter;->traceLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; iput-object v5, v0, Lcom/google/firebase/perf/transport/RateLimiter;->networkLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; const/4 v5, 0x0 iput-boolean v5, v0, Lcom/google/firebase/perf/transport/RateLimiter;->isLogcatEnabled:Z const-wide/16 v6, 0x0 cmpg-double v8, v6, v1 const/4 v9, 0x1 const-wide/high16 v10, 0x3ff0000000000000L # 1.0 if-gtz v8, :cond_0 cmpg-double v8, v1, v10 if-gez v8, :cond_0 move v8, v9 goto :goto_0 :cond_0 move v8, v5 :goto_0 const-string v12, "Sampling bucket ID should be in range [0.0, 1.0)." .line 92 invoke-static {v8, v12}, Lcom/google/firebase/perf/util/Utils;->checkArgument(ZLjava/lang/String;)V cmpg-double v6, v6, v3 if-gtz v6, :cond_1 cmpg-double v6, v3, v10 if-gez v6, :cond_1 move v5, v9 :cond_1 const-string v6, "Fragment sampling bucket ID should be in range [0.0, 1.0)." .line 95 invoke-static {v5, v6}, Lcom/google/firebase/perf/util/Utils;->checkArgument(ZLjava/lang/String;)V iput-wide v1, v0, Lcom/google/firebase/perf/transport/RateLimiter;->samplingBucketId:D iput-wide v3, v0, Lcom/google/firebase/perf/transport/RateLimiter;->fragmentBucketId:D move-object/from16 v1, p9 iput-object v1, v0, Lcom/google/firebase/perf/transport/RateLimiter;->configResolver:Lcom/google/firebase/perf/config/ConfigResolver; .line 102 new-instance v2, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; const-string v13, "Trace" iget-boolean v14, v0, Lcom/google/firebase/perf/transport/RateLimiter;->isLogcatEnabled:Z move-object v7, v2 move-object/from16 v8, p1 move-wide/from16 v9, p2 move-object/from16 v11, p4 move-object/from16 v12, p9 invoke-direct/range {v7 .. v14}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->(Lcom/google/firebase/perf/util/Rate;JLcom/google/firebase/perf/util/Clock;Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;Z)V iput-object v2, v0, Lcom/google/firebase/perf/transport/RateLimiter;->traceLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; .line 105 new-instance v2, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; const-string v13, "Network" iget-boolean v14, v0, Lcom/google/firebase/perf/transport/RateLimiter;->isLogcatEnabled:Z move-object v7, v2 invoke-direct/range {v7 .. v14}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->(Lcom/google/firebase/perf/util/Rate;JLcom/google/firebase/perf/util/Clock;Lcom/google/firebase/perf/config/ConfigResolver;Ljava/lang/String;Z)V iput-object v2, v0, Lcom/google/firebase/perf/transport/RateLimiter;->networkLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; return-void .end method .method public static getSamplingBucketId()D .locals 2 .line 82 new-instance v0, Ljava/util/Random; invoke-direct {v0}, Ljava/util/Random;->()V invoke-virtual {v0}, Ljava/util/Random;->nextDouble()D move-result-wide v0 return-wide v0 .end method # virtual methods .method public changeRate(Z)V .locals 1 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter;->traceLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; .line 232 invoke-virtual {v0, p1}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->changeRate(Z)V iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter;->networkLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; .line 233 invoke-virtual {v0, p1}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->changeRate(Z)V return-void .end method .method public final hasVerboseSessions(Ljava/util/List;)Z .locals 2 .line 198 invoke-interface {p1}, Ljava/util/List;->size()I move-result v0 const/4 v1, 0x0 if-lez v0, :cond_0 invoke-interface {p1, v1}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object v0 check-cast v0, Lcom/google/firebase/perf/v1/PerfSession; invoke-virtual {v0}, Lcom/google/firebase/perf/v1/PerfSession;->getSessionVerbosityCount()I move-result v0 if-lez v0, :cond_0 .line 199 invoke-interface {p1, v1}, Ljava/util/List;->get(I)Ljava/lang/Object; move-result-object p1 check-cast p1, Lcom/google/firebase/perf/v1/PerfSession; invoke-virtual {p1, v1}, Lcom/google/firebase/perf/v1/PerfSession;->getSessionVerbosity(I)Lcom/google/firebase/perf/v1/SessionVerbosity; move-result-object p1 sget-object v0, Lcom/google/firebase/perf/v1/SessionVerbosity;->GAUGES_AND_SYSTEM_EVENTS:Lcom/google/firebase/perf/v1/SessionVerbosity; if-ne p1, v0, :cond_0 const/4 v1, 0x1 :cond_0 return v1 .end method .method public final isDeviceAllowedToSendFragmentScreenTraces()Z .locals 4 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter;->configResolver:Lcom/google/firebase/perf/config/ConfigResolver; .line 126 invoke-virtual {v0}, Lcom/google/firebase/perf/config/ConfigResolver;->getFragmentSamplingRate()D move-result-wide v0 iget-wide v2, p0, Lcom/google/firebase/perf/transport/RateLimiter;->fragmentBucketId:D cmpg-double v0, v2, v0 if-gez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public final isDeviceAllowedToSendNetworkEvents()Z .locals 4 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter;->configResolver:Lcom/google/firebase/perf/config/ConfigResolver; .line 117 invoke-virtual {v0}, Lcom/google/firebase/perf/config/ConfigResolver;->getNetworkRequestSamplingRate()D move-result-wide v0 iget-wide v2, p0, Lcom/google/firebase/perf/transport/RateLimiter;->samplingBucketId:D cmpg-double v0, v2, v0 if-gez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public final isDeviceAllowedToSendTraces()Z .locals 4 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter;->configResolver:Lcom/google/firebase/perf/config/ConfigResolver; .line 111 invoke-virtual {v0}, Lcom/google/firebase/perf/config/ConfigResolver;->getTraceSamplingRate()D move-result-wide v0 iget-wide v2, p0, Lcom/google/firebase/perf/transport/RateLimiter;->samplingBucketId:D cmpg-double v0, v2, v0 if-gez v0, :cond_0 const/4 v0, 0x1 goto :goto_0 :cond_0 const/4 v0, 0x0 :goto_0 return v0 .end method .method public isEventRateLimited(Lcom/google/firebase/perf/v1/PerfMetric;)Z .locals 2 .line 144 invoke-virtual {p0, p1}, Lcom/google/firebase/perf/transport/RateLimiter;->isRateLimitApplicable(Lcom/google/firebase/perf/v1/PerfMetric;)Z move-result v0 if-nez v0, :cond_0 const/4 p1, 0x0 return p1 .line 149 :cond_0 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->hasNetworkRequestMetric()Z move-result v0 const/4 v1, 0x1 if-eqz v0, :cond_1 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter;->networkLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; .line 150 invoke-virtual {v0, p1}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->check(Lcom/google/firebase/perf/v1/PerfMetric;)Z move-result p1 xor-int/2addr p1, v1 return p1 .line 151 :cond_1 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->hasTraceMetric()Z move-result v0 if-eqz v0, :cond_2 iget-object v0, p0, Lcom/google/firebase/perf/transport/RateLimiter;->traceLimiter:Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl; .line 152 invoke-virtual {v0, p1}, Lcom/google/firebase/perf/transport/RateLimiter$RateLimiterImpl;->check(Lcom/google/firebase/perf/v1/PerfMetric;)Z move-result p1 xor-int/2addr p1, v1 return p1 :cond_2 return v1 .end method .method public isEventSampled(Lcom/google/firebase/perf/v1/PerfMetric;)Z .locals 2 .line 167 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->hasTraceMetric()Z move-result v0 const/4 v1, 0x0 if-eqz v0, :cond_0 .line 168 invoke-virtual {p0}, Lcom/google/firebase/perf/transport/RateLimiter;->isDeviceAllowedToSendTraces()Z move-result v0 if-nez v0, :cond_0 .line 169 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getTraceMetric()Lcom/google/firebase/perf/v1/TraceMetric; move-result-object v0 invoke-virtual {v0}, Lcom/google/firebase/perf/v1/TraceMetric;->getPerfSessionsList()Ljava/util/List; move-result-object v0 invoke-virtual {p0, v0}, Lcom/google/firebase/perf/transport/RateLimiter;->hasVerboseSessions(Ljava/util/List;)Z move-result v0 if-nez v0, :cond_0 return v1 .line 173 :cond_0 invoke-virtual {p0, p1}, Lcom/google/firebase/perf/transport/RateLimiter;->isFragmentScreenTrace(Lcom/google/firebase/perf/v1/PerfMetric;)Z move-result v0 if-eqz v0, :cond_1 .line 174 invoke-virtual {p0}, Lcom/google/firebase/perf/transport/RateLimiter;->isDeviceAllowedToSendFragmentScreenTraces()Z move-result v0 if-nez v0, :cond_1 .line 175 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getTraceMetric()Lcom/google/firebase/perf/v1/TraceMetric; move-result-object v0 invoke-virtual {v0}, Lcom/google/firebase/perf/v1/TraceMetric;->getPerfSessionsList()Ljava/util/List; move-result-object v0 invoke-virtual {p0, v0}, Lcom/google/firebase/perf/transport/RateLimiter;->hasVerboseSessions(Ljava/util/List;)Z move-result v0 if-nez v0, :cond_1 return v1 .line 179 :cond_1 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->hasNetworkRequestMetric()Z move-result v0 if-eqz v0, :cond_2 .line 180 invoke-virtual {p0}, Lcom/google/firebase/perf/transport/RateLimiter;->isDeviceAllowedToSendNetworkEvents()Z move-result v0 if-nez v0, :cond_2 .line 181 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getNetworkRequestMetric()Lcom/google/firebase/perf/v1/NetworkRequestMetric; move-result-object p1 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/NetworkRequestMetric;->getPerfSessionsList()Ljava/util/List; move-result-object p1 invoke-virtual {p0, p1}, Lcom/google/firebase/perf/transport/RateLimiter;->hasVerboseSessions(Ljava/util/List;)Z move-result p1 if-nez p1, :cond_2 return v1 :cond_2 const/4 p1, 0x1 return p1 .end method .method public isFragmentScreenTrace(Lcom/google/firebase/perf/v1/PerfMetric;)Z .locals 2 .line 132 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->hasTraceMetric()Z move-result v0 if-eqz v0, :cond_0 .line 133 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getTraceMetric()Lcom/google/firebase/perf/v1/TraceMetric; move-result-object v0 invoke-virtual {v0}, Lcom/google/firebase/perf/v1/TraceMetric;->getName()Ljava/lang/String; move-result-object v0 const-string v1, "_st_" invoke-virtual {v0, v1}, Ljava/lang/String;->startsWith(Ljava/lang/String;)Z move-result v0 if-eqz v0, :cond_0 .line 134 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getTraceMetric()Lcom/google/firebase/perf/v1/TraceMetric; move-result-object p1 const-string v0, "Hosting_activity" invoke-virtual {p1, v0}, Lcom/google/firebase/perf/v1/TraceMetric;->containsCustomAttributes(Ljava/lang/String;)Z move-result p1 if-eqz p1, :cond_0 const/4 p1, 0x1 goto :goto_0 :cond_0 const/4 p1, 0x0 :goto_0 return p1 .end method .method public isRateLimitApplicable(Lcom/google/firebase/perf/v1/PerfMetric;)Z .locals 3 .line 213 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->hasTraceMetric()Z move-result v0 const/4 v1, 0x0 if-eqz v0, :cond_1 .line 215 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getTraceMetric()Lcom/google/firebase/perf/v1/TraceMetric; move-result-object v0 .line 216 invoke-virtual {v0}, Lcom/google/firebase/perf/v1/TraceMetric;->getName()Ljava/lang/String; move-result-object v0 sget-object v2, Lcom/google/firebase/perf/util/Constants$TraceNames;->FOREGROUND_TRACE_NAME:Lcom/google/firebase/perf/util/Constants$TraceNames; .line 217 invoke-virtual {v2}, Lcom/google/firebase/perf/util/Constants$TraceNames;->toString()Ljava/lang/String; move-result-object v2 invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-nez v0, :cond_0 .line 219 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getTraceMetric()Lcom/google/firebase/perf/v1/TraceMetric; move-result-object v0 .line 220 invoke-virtual {v0}, Lcom/google/firebase/perf/v1/TraceMetric;->getName()Ljava/lang/String; move-result-object v0 sget-object v2, Lcom/google/firebase/perf/util/Constants$TraceNames;->BACKGROUND_TRACE_NAME:Lcom/google/firebase/perf/util/Constants$TraceNames; .line 221 invoke-virtual {v2}, Lcom/google/firebase/perf/util/Constants$TraceNames;->toString()Ljava/lang/String; move-result-object v2 invoke-virtual {v0, v2}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v0 if-eqz v0, :cond_1 .line 222 :cond_0 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->getTraceMetric()Lcom/google/firebase/perf/v1/TraceMetric; move-result-object v0 invoke-virtual {v0}, Lcom/google/firebase/perf/v1/TraceMetric;->getCountersCount()I move-result v0 if-lez v0, :cond_1 return v1 .line 224 :cond_1 invoke-virtual {p1}, Lcom/google/firebase/perf/v1/PerfMetric;->hasGaugeMetric()Z move-result p1 if-eqz p1, :cond_2 return v1 :cond_2 const/4 p1, 0x1 return p1 .end method