CpuMonitor$MovingAverage.smali

.class Lorg/webrtc/utils/CpuMonitor$MovingAverage;
.super Ljava/lang/Object;
.source "CpuMonitor.java"


# annotations
.annotation system Ldalvik/annotation/EnclosingClass;
    value = Lorg/webrtc/utils/CpuMonitor;
.end annotation

.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0xa
    name = "MovingAverage"
.end annotation


# instance fields
.field private circBuffer:[D

.field private circBufferIndex:I

.field private currentValue:D

.field private final size:I

.field private sum:D


# direct methods
.method static constructor <clinit>()V
    .registers 1

    return-void
.end method

.method public constructor <init>(I)V
    .registers 4
    .param p1, "size"    # I

    .line 121
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V

    .line 122
    if-lez p1, :cond_c

    .line 125
    iput p1, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->size:I

    .line 126
    new-array v0, p1, [D

    iput-object v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->circBuffer:[D

    .line 127
    return-void

    .line 123
    :cond_c
    new-instance v0, Ljava/lang/AssertionError;

    const-string v1, "Size value in MovingAverage ctor should be positive."

    invoke-direct {v0, v1}, Ljava/lang/AssertionError;-><init>(Ljava/lang/Object;)V

    throw v0
.end method


# virtual methods
.method public addValue(D)V
    .registers 9
    .param p1, "value"    # D

    .line 137
    iget-wide v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->sum:D

    iget-object v2, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->circBuffer:[D

    iget v3, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->circBufferIndex:I

    aget-wide v4, v2, v3

    sub-double/2addr v0, v4

    iput-wide v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->sum:D

    .line 138
    add-int/lit8 v4, v3, 0x1

    iput v4, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->circBufferIndex:I

    aput-wide p1, v2, v3

    .line 139
    iput-wide p1, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->currentValue:D

    .line 140
    add-double/2addr v0, p1

    iput-wide v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->sum:D

    .line 141
    iget v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->size:I

    if-lt v4, v0, :cond_1d

    .line 142
    const/4 v0, 0x0

    iput v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->circBufferIndex:I

    .line 144
    :cond_1d
    return-void
.end method

.method public getAverage()D
    .registers 5

    .line 151
    iget-wide v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->sum:D

    iget v2, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->size:I

    int-to-double v2, v2

    invoke-static {v2, v3}, Ljava/lang/Double;->isNaN(D)Z

    div-double/2addr v0, v2

    return-wide v0
.end method

.method public getCurrent()D
    .registers 3

    .line 147
    iget-wide v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->currentValue:D

    return-wide v0
.end method

.method public reset()V
    .registers 4

    .line 130
    iget-object v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->circBuffer:[D

    const-wide/16 v1, 0x0

    invoke-static {v0, v1, v2}, Ljava/util/Arrays;->fill([DD)V

    .line 131
    const/4 v0, 0x0

    iput v0, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->circBufferIndex:I

    .line 132
    iput-wide v1, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->sum:D

    .line 133
    iput-wide v1, p0, Lorg/webrtc/utils/CpuMonitor$MovingAverage;->currentValue:D

    .line 134
    return-void
.end method