BackpressureDrainManager.smali
.class public final Lrx/internal/util/BackpressureDrainManager;
.super Ljava/util/concurrent/atomic/AtomicLong;
.source "BackpressureDrainManager.java"
# interfaces
.implements Lrx/Producer;
# annotations
.annotation system Ldalvik/annotation/MemberClasses;
value = {
Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;
}
.end annotation
# static fields
.field private static final serialVersionUID:J = 0x2738d34f11cd4869L
# instance fields
.field final actual:Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;
.field emitting:Z
.field exception:Ljava/lang/Throwable;
.field volatile terminated:Z
# direct methods
.method public constructor <init>(Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;)V
.registers 2
.line 1
invoke-direct {p0}, Ljava/util/concurrent/atomic/AtomicLong;-><init>()V
.line 2
iput-object p1, p0, Lrx/internal/util/BackpressureDrainManager;->actual:Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;
return-void
.end method
# virtual methods
.method public drain()V
.registers 14
.line 1
monitor-enter p0
.line 2
:try_start_1
iget-boolean v0, p0, Lrx/internal/util/BackpressureDrainManager;->emitting:Z
if-eqz v0, :cond_7
.line 3
monitor-exit p0
return-void
:cond_7
const/4 v0, 0x1
.line 4
iput-boolean v0, p0, Lrx/internal/util/BackpressureDrainManager;->emitting:Z
.line 5
iget-boolean v1, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
.line 6
monitor-exit p0
:try_end_d
.catchall {:try_start_1 .. :try_end_d} :catchall_93
.line 7
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v2
const/4 v4, 0x0
.line 8
:try_start_12
iget-object v5, p0, Lrx/internal/util/BackpressureDrainManager;->actual:Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;
:goto_14
const/4 v6, 0x0
:goto_15
const-wide/16 v7, 0x0
cmp-long v9, v2, v7
if-gtz v9, :cond_1d
if-eqz v1, :cond_38
:cond_1d
if-eqz v1, :cond_32
.line 9
invoke-interface {v5}, Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;->peek()Ljava/lang/Object;
move-result-object v9
:try_end_23
.catchall {:try_start_12 .. :try_end_23} :catchall_86
if-nez v9, :cond_2d
.line 10
:try_start_25
iget-object v1, p0, Lrx/internal/util/BackpressureDrainManager;->exception:Ljava/lang/Throwable;
.line 11
invoke-interface {v5, v1}, Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;->complete(Ljava/lang/Throwable;)V
:try_end_2a
.catchall {:try_start_25 .. :try_end_2a} :catchall_2b
return-void
:catchall_2b
move-exception v1
goto :goto_88
:cond_2d
cmp-long v9, v2, v7
if-nez v9, :cond_32
goto :goto_38
.line 12
:cond_32
:try_start_32
invoke-interface {v5}, Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;->poll()Ljava/lang/Object;
move-result-object v9
if-nez v9, :cond_79
.line 13
:cond_38
:goto_38
monitor-enter p0
:try_end_39
.catchall {:try_start_32 .. :try_end_39} :catchall_86
.line 14
:try_start_39
iget-boolean v1, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
.line 15
invoke-interface {v5}, Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;->peek()Ljava/lang/Object;
move-result-object v2
if-eqz v2, :cond_43
const/4 v2, 0x1
goto :goto_44
:cond_43
const/4 v2, 0x0
.line 16
:goto_44
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v9
:try_end_48
.catchall {:try_start_39 .. :try_end_48} :catchall_73
const-wide v11, 0x7fffffffffffffffL
cmp-long v3, v9, v11
if-nez v3, :cond_5b
if-nez v2, :cond_59
if-nez v1, :cond_59
.line 17
:try_start_55
iput-boolean v4, p0, Lrx/internal/util/BackpressureDrainManager;->emitting:Z
.line 18
monitor-exit p0
:try_end_58
.catchall {:try_start_55 .. :try_end_58} :catchall_77
return-void
:cond_59
move-wide v2, v11
goto :goto_6d
:cond_5b
neg-int v3, v6
int-to-long v9, v3
.line 19
:try_start_5d
invoke-virtual {p0, v9, v10}, Ljava/util/concurrent/atomic/AtomicLong;->addAndGet(J)J
move-result-wide v9
cmp-long v3, v9, v7
if-eqz v3, :cond_67
if-nez v2, :cond_6c
:cond_67
if-eqz v1, :cond_6f
if-eqz v2, :cond_6c
goto :goto_6f
:cond_6c
move-wide v2, v9
.line 20
:goto_6d
monitor-exit p0
:try_end_6e
.catchall {:try_start_5d .. :try_end_6e} :catchall_73
goto :goto_14
.line 21
:cond_6f
:goto_6f
:try_start_6f
iput-boolean v4, p0, Lrx/internal/util/BackpressureDrainManager;->emitting:Z
.line 22
monitor-exit p0
return-void
:catchall_73
move-exception v1
const/4 v0, 0x0
.line 23
:goto_75
monitor-exit p0
:try_end_76
.catchall {:try_start_6f .. :try_end_76} :catchall_77
:try_start_76
throw v1
:try_end_77
.catchall {:try_start_76 .. :try_end_77} :catchall_2b
:catchall_77
move-exception v1
goto :goto_75
.line 24
:cond_79
:try_start_79
invoke-interface {v5, v9}, Lrx/internal/util/BackpressureDrainManager$BackpressureQueueCallback;->accept(Ljava/lang/Object;)Z
move-result v7
:try_end_7d
.catchall {:try_start_79 .. :try_end_7d} :catchall_86
if-eqz v7, :cond_80
return-void
:cond_80
const-wide/16 v7, 0x1
sub-long/2addr v2, v7
add-int/lit8 v6, v6, 0x1
goto :goto_15
:catchall_86
move-exception v1
const/4 v0, 0x0
:goto_88
if-nez v0, :cond_92
.line 25
monitor-enter p0
.line 26
:try_start_8b
iput-boolean v4, p0, Lrx/internal/util/BackpressureDrainManager;->emitting:Z
.line 27
monitor-exit p0
goto :goto_92
:catchall_8f
move-exception v0
monitor-exit p0
:try_end_91
.catchall {:try_start_8b .. :try_end_91} :catchall_8f
throw v0
:cond_92
:goto_92
throw v1
:catchall_93
move-exception v0
.line 28
:try_start_94
monitor-exit p0
:try_end_95
.catchall {:try_start_94 .. :try_end_95} :catchall_93
goto :goto_97
:goto_96
throw v0
:goto_97
goto :goto_96
.end method
.method public isTerminated()Z
.registers 2
.line 1
iget-boolean v0, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
return v0
.end method
.method public request(J)V
.registers 13
const-wide/16 v0, 0x0
cmp-long v2, p1, v0
if-nez v2, :cond_7
return-void
.line 1
:cond_7
invoke-virtual {p0}, Ljava/util/concurrent/atomic/AtomicLong;->get()J
move-result-wide v2
const/4 v4, 0x1
cmp-long v5, v2, v0
if-nez v5, :cond_12
const/4 v5, 0x1
goto :goto_13
:cond_12
const/4 v5, 0x0
:goto_13
const-wide v6, 0x7fffffffffffffffL
cmp-long v8, v2, v6
if-nez v8, :cond_1d
goto :goto_33
:cond_1d
cmp-long v8, p1, v6
if-nez v8, :cond_24
move-wide v6, p1
const/4 v5, 0x1
goto :goto_2d
:cond_24
sub-long v8, v6, p1
cmp-long v4, v2, v8
if-lez v4, :cond_2b
goto :goto_2d
:cond_2b
add-long v6, v2, p1
.line 2
:goto_2d
invoke-virtual {p0, v2, v3, v6, v7}, Ljava/util/concurrent/atomic/AtomicLong;->compareAndSet(JJ)Z
move-result v2
if-eqz v2, :cond_7
:goto_33
if-eqz v5, :cond_38
.line 3
invoke-virtual {p0}, Lrx/internal/util/BackpressureDrainManager;->drain()V
:cond_38
return-void
.end method
.method public terminate()V
.registers 2
const/4 v0, 0x1
.line 1
iput-boolean v0, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
return-void
.end method
.method public terminate(Ljava/lang/Throwable;)V
.registers 3
.line 2
iget-boolean v0, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
if-nez v0, :cond_9
.line 3
iput-object p1, p0, Lrx/internal/util/BackpressureDrainManager;->exception:Ljava/lang/Throwable;
const/4 p1, 0x1
.line 4
iput-boolean p1, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
:cond_9
return-void
.end method
.method public terminateAndDrain()V
.registers 2
const/4 v0, 0x1
.line 1
iput-boolean v0, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
.line 2
invoke-virtual {p0}, Lrx/internal/util/BackpressureDrainManager;->drain()V
return-void
.end method
.method public terminateAndDrain(Ljava/lang/Throwable;)V
.registers 3
.line 3
iget-boolean v0, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
if-nez v0, :cond_c
.line 4
iput-object p1, p0, Lrx/internal/util/BackpressureDrainManager;->exception:Ljava/lang/Throwable;
const/4 p1, 0x1
.line 5
iput-boolean p1, p0, Lrx/internal/util/BackpressureDrainManager;->terminated:Z
.line 6
invoke-virtual {p0}, Lrx/internal/util/BackpressureDrainManager;->drain()V
:cond_c
return-void
.end method