LeastRecentlyUsedCacheEvictor.smali
.class public final Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;
.super Ljava/lang/Object;
.source "LeastRecentlyUsedCacheEvictor.java"
# interfaces
.implements Lcom/google/android/exoplayer2/upstream/cache/CacheEvictor;
.implements Ljava/util/Comparator;
# annotations
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/lang/Object;",
"Lcom/google/android/exoplayer2/upstream/cache/CacheEvictor;",
"Ljava/util/Comparator<",
"Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;",
">;"
}
.end annotation
# instance fields
.field private currentSize:J
.field private final leastRecentlyUsed:Ljava/util/TreeSet;
.annotation system Ldalvik/annotation/Signature;
value = {
"Ljava/util/TreeSet<",
"Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;",
">;"
}
.end annotation
.end field
.field private final maxBytes:J
# direct methods
.method static constructor <clinit>()V
.registers 1
return-void
.end method
.method public constructor <init>(J)V
.registers 4
.param p1, "maxBytes" # J
.line 33
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 34
iput-wide p1, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->maxBytes:J
.line 35
new-instance v0, Ljava/util/TreeSet;
invoke-direct {v0, p0}, Ljava/util/TreeSet;-><init>(Ljava/util/Comparator;)V
iput-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->leastRecentlyUsed:Ljava/util/TreeSet;
.line 36
return-void
.end method
.method private evictCache(Lcom/google/android/exoplayer2/upstream/cache/Cache;J)V
.registers 9
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "requiredSpace" # J
.line 80
:goto_0
iget-wide v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->currentSize:J
add-long/2addr v0, p2
iget-wide v2, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->maxBytes:J
cmp-long v4, v0, v2
if-lez v4, :cond_1f
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->leastRecentlyUsed:Ljava/util/TreeSet;
invoke-virtual {v0}, Ljava/util/TreeSet;->isEmpty()Z
move-result v0
if-nez v0, :cond_1f
.line 82
:try_start_11
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->leastRecentlyUsed:Ljava/util/TreeSet;
invoke-virtual {v0}, Ljava/util/TreeSet;->first()Ljava/lang/Object;
move-result-object v0
check-cast v0, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
invoke-interface {p1, v0}, Lcom/google/android/exoplayer2/upstream/cache/Cache;->removeSpan(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
:try_end_1c
.catch Lcom/google/android/exoplayer2/upstream/cache/Cache$CacheException; {:try_start_11 .. :try_end_1c} :catch_1d
goto :goto_1e
.line 83
:catch_1d
move-exception v0
.line 85
:goto_1e
goto :goto_0
.line 87
:cond_1f
return-void
.end method
# virtual methods
.method public compare(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)I
.registers 10
.param p1, "lhs" # Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.param p2, "rhs" # Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.line 71
iget-wide v0, p1, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->lastAccessTimestamp:J
iget-wide v2, p2, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->lastAccessTimestamp:J
sub-long/2addr v0, v2
.line 72
.local v0, "lastAccessTimestampDelta":J
const-wide/16 v2, 0x0
cmp-long v4, v0, v2
if-nez v4, :cond_10
.line 74
invoke-virtual {p1, p2}, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->compareTo(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)I
move-result v2
return v2
.line 76
:cond_10
iget-wide v2, p1, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->lastAccessTimestamp:J
iget-wide v4, p2, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->lastAccessTimestamp:J
cmp-long v6, v2, v4
if-gez v6, :cond_1a
const/4 v2, -0x1
goto :goto_1b
:cond_1a
const/4 v2, 0x1
:goto_1b
return v2
.end method
.method public bridge synthetic compare(Ljava/lang/Object;Ljava/lang/Object;)I
.registers 3
.line 26
check-cast p1, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
check-cast p2, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->compare(Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)I
move-result p1
return p1
.end method
.method public onCacheInitialized()V
.registers 1
.line 41
return-void
.end method
.method public onSpanAdded(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.registers 7
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "span" # Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.line 52
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->leastRecentlyUsed:Ljava/util/TreeSet;
invoke-virtual {v0, p2}, Ljava/util/TreeSet;->add(Ljava/lang/Object;)Z
.line 53
iget-wide v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->currentSize:J
iget-wide v2, p2, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->length:J
add-long/2addr v0, v2
iput-wide v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->currentSize:J
.line 54
const-wide/16 v0, 0x0
invoke-direct {p0, p1, v0, v1}, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->evictCache(Lcom/google/android/exoplayer2/upstream/cache/Cache;J)V
.line 55
return-void
.end method
.method public onSpanRemoved(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.registers 7
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "span" # Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.line 59
iget-object v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->leastRecentlyUsed:Ljava/util/TreeSet;
invoke-virtual {v0, p2}, Ljava/util/TreeSet;->remove(Ljava/lang/Object;)Z
.line 60
iget-wide v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->currentSize:J
iget-wide v2, p2, Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;->length:J
sub-long/2addr v0, v2
iput-wide v0, p0, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->currentSize:J
.line 61
return-void
.end method
.method public onSpanTouched(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.registers 4
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "oldSpan" # Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.param p3, "newSpan" # Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;
.line 65
invoke-virtual {p0, p1, p2}, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->onSpanRemoved(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.line 66
invoke-virtual {p0, p1, p3}, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->onSpanAdded(Lcom/google/android/exoplayer2/upstream/cache/Cache;Lcom/google/android/exoplayer2/upstream/cache/CacheSpan;)V
.line 67
return-void
.end method
.method public onStartFile(Lcom/google/android/exoplayer2/upstream/cache/Cache;Ljava/lang/String;JJ)V
.registers 10
.param p1, "cache" # Lcom/google/android/exoplayer2/upstream/cache/Cache;
.param p2, "key" # Ljava/lang/String;
.param p3, "position" # J
.param p5, "length" # J
.line 45
const-wide/16 v0, -0x1
cmp-long v2, p5, v0
if-eqz v2, :cond_9
.line 46
invoke-direct {p0, p1, p5, p6}, Lcom/google/android/exoplayer2/upstream/cache/LeastRecentlyUsedCacheEvictor;->evictCache(Lcom/google/android/exoplayer2/upstream/cache/Cache;J)V
.line 48
:cond_9
return-void
.end method