HardwareConfigState.smali
.class public final Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
.super Ljava/lang/Object;
.source "HardwareConfigState.java"
# static fields
.field public static final DEFAULT_MAXIMUM_FDS_FOR_HARDWARE_CONFIGS:I = 0x2bc
.field public static final DEFAULT_MIN_HARDWARE_DIMENSION:I = 0x80
.field private static final FD_SIZE_LIST:Ljava/io/File;
.field private static final MINIMUM_DECODES_BETWEEN_FD_CHECKS:I = 0x32
.field private static volatile fdSizeLimit:I
.field private static volatile instance:Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
.field private static volatile minHardwareDimension:I
# instance fields
.field private decodesSinceLastFdCheck:I
.field private isFdSizeBelowHardwareLimit:Z
.field private final isHardwareConfigAllowedByDeviceModel:Z
# direct methods
.method static constructor <clinit>()V
.registers 2
.line 41
new-instance v0, Ljava/io/File;
const-string v1, "/proc/self/fd"
invoke-direct {v0, v1}, Ljava/io/File;-><init>(Ljava/lang/String;)V
sput-object v0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->FD_SIZE_LIST:Ljava/io/File;
.line 60
const/16 v0, 0x2bc
sput v0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->fdSizeLimit:I
.line 61
const/16 v0, 0x80
sput v0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->minHardwareDimension:I
return-void
.end method
.method constructor <init>()V
.registers 2
.line 85
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
.line 70
const/4 v0, 0x1
iput-boolean v0, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isFdSizeBelowHardwareLimit:Z
.line 86
invoke-static {}, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isHardwareConfigAllowedByDeviceModel()Z
move-result v0
iput-boolean v0, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isHardwareConfigAllowedByDeviceModel:Z
.line 88
return-void
.end method
.method public static getInstance()Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
.registers 2
.line 74
sget-object v0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->instance:Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
if-nez v0, :cond_17
.line 75
const-class v0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
monitor-enter v0
.line 76
:try_start_7
sget-object v1, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->instance:Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
if-nez v1, :cond_12
.line 77
new-instance v1, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
invoke-direct {v1}, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;-><init>()V
sput-object v1, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->instance:Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
.line 79
:cond_12
monitor-exit v0
goto :goto_17
:catchall_14
move-exception v1
monitor-exit v0
:try_end_16
.catchall {:try_start_7 .. :try_end_16} :catchall_14
throw v1
.line 81
:cond_17
:goto_17
sget-object v0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->instance:Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
return-object v0
.end method
.method private declared-synchronized isFdSizeBelowHardwareLimit()Z
.registers 5
monitor-enter p0
.line 151
:try_start_1
iget v0, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->decodesSinceLastFdCheck:I
const/4 v1, 0x1
add-int/2addr v0, v1
iput v0, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->decodesSinceLastFdCheck:I
const/16 v2, 0x32
if-lt v0, v2, :cond_48
.line 152
const/4 v0, 0x0
iput v0, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->decodesSinceLastFdCheck:I
.line 153
sget-object v2, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->FD_SIZE_LIST:Ljava/io/File;
invoke-virtual {v2}, Ljava/io/File;->list()[Ljava/lang/String;
move-result-object v2
array-length v2, v2
.line 154
.local v2, "currentFds":I
sget v3, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->fdSizeLimit:I
if-ge v2, v3, :cond_1a
goto :goto_1b
:cond_1a
const/4 v1, 0x0
:goto_1b
iput-boolean v1, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isFdSizeBelowHardwareLimit:Z
.line 156
if-nez v1, :cond_48
const-string v0, "Downsampler"
const/4 v1, 0x5
invoke-static {v0, v1}, Landroid/util/Log;->isLoggable(Ljava/lang/String;I)Z
move-result v0
if-eqz v0, :cond_48
.line 157
const-string v0, "Downsampler"
new-instance v1, Ljava/lang/StringBuilder;
invoke-direct {v1}, Ljava/lang/StringBuilder;-><init>()V
const-string v3, "Excluding HARDWARE bitmap config because we\'re over the file descriptor limit, file descriptors "
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
invoke-virtual {v1, v2}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
const-string v3, ", limit "
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder;
sget v3, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->fdSizeLimit:I
invoke-virtual {v1, v3}, Ljava/lang/StringBuilder;->append(I)Ljava/lang/StringBuilder;
invoke-virtual {v1}, Ljava/lang/StringBuilder;->toString()Ljava/lang/String;
move-result-object v1
invoke-static {v0, v1}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
.line 167
.end local v2 # "currentFds":I
.end local p0 # "this":Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;
:cond_48
iget-boolean v0, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isFdSizeBelowHardwareLimit:Z
:try_end_4a
.catchall {:try_start_1 .. :try_end_4a} :catchall_4c
monitor-exit p0
return v0
.line 150
:catchall_4c
move-exception v0
monitor-exit p0
throw v0
.end method
.method private static isHardwareConfigAllowedByDeviceModel()Z
.registers 5
.line 126
sget-object v0, Landroid/os/Build;->MODEL:Ljava/lang/String;
const/4 v1, 0x1
if-eqz v0, :cond_71
sget-object v0, Landroid/os/Build;->MODEL:Ljava/lang/String;
invoke-virtual {v0}, Ljava/lang/String;->length()I
move-result v0
const/4 v2, 0x7
if-ge v0, v2, :cond_f
goto :goto_71
.line 129
:cond_f
sget-object v0, Landroid/os/Build;->MODEL:Ljava/lang/String;
const/4 v3, 0x0
invoke-virtual {v0, v3, v2}, Ljava/lang/String;->substring(II)Ljava/lang/String;
move-result-object v0
const/4 v2, -0x1
invoke-virtual {v0}, Ljava/lang/String;->hashCode()I
move-result v4
sparse-switch v4, :sswitch_data_72
:cond_1e
goto :goto_64
:sswitch_1f
const-string v4, "SM-N935"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
const/4 v2, 0x0
goto :goto_64
:sswitch_29
const-string v4, "SM-J720"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
const/4 v2, 0x1
goto :goto_64
:sswitch_33
const-string v4, "SM-G965"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
const/4 v2, 0x3
goto :goto_64
:sswitch_3d
const-string v4, "SM-G960"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
const/4 v2, 0x2
goto :goto_64
:sswitch_47
const-string v4, "SM-G935"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
const/4 v2, 0x4
goto :goto_64
:sswitch_51
const-string v4, "SM-G930"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
const/4 v2, 0x5
goto :goto_64
:sswitch_5b
const-string v4, "SM-A520"
invoke-virtual {v0, v4}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z
move-result v0
if-eqz v0, :cond_1e
const/4 v2, 0x6
:goto_64
packed-switch v2, :pswitch_data_90
.line 146
return v1
.line 144
:pswitch_68
sget v0, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x1a
if-eq v0, v2, :cond_6f
goto :goto_70
:cond_6f
const/4 v1, 0x0
:goto_70
return v1
.line 127
:cond_71
:goto_71
return v1
:sswitch_data_72
.sparse-switch
-0x535d271b -> :sswitch_5b
-0x535a5dbe -> :sswitch_51
-0x535a5db9 -> :sswitch_47
-0x535a5d61 -> :sswitch_3d
-0x535a5d5c -> :sswitch_33
-0x53590842 -> :sswitch_29
-0x53572f20 -> :sswitch_1f
.end sparse-switch
:pswitch_data_90
.packed-switch 0x0
:pswitch_68
:pswitch_68
:pswitch_68
:pswitch_68
:pswitch_68
:pswitch_68
:pswitch_68
.end packed-switch
.end method
# virtual methods
.method public isHardwareConfigAllowed(IIZZ)Z
.registers 8
.param p1, "targetWidth" # I
.param p2, "targetHeight" # I
.param p3, "isHardwareConfigAllowed" # Z
.param p4, "isExifOrientationRequired" # Z
.line 95
const/4 v0, 0x0
if-eqz p3, :cond_22
iget-boolean v1, p0, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isHardwareConfigAllowedByDeviceModel:Z
if-eqz v1, :cond_22
sget v1, Landroid/os/Build$VERSION;->SDK_INT:I
const/16 v2, 0x1a
if-lt v1, v2, :cond_22
if-eqz p4, :cond_10
goto :goto_22
.line 102
:cond_10
sget v1, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->minHardwareDimension:I
if-lt p1, v1, :cond_20
sget v1, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->minHardwareDimension:I
if-lt p2, v1, :cond_20
.line 105
invoke-direct {p0}, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isFdSizeBelowHardwareLimit()Z
move-result v1
if-eqz v1, :cond_20
const/4 v0, 0x1
goto :goto_21
:cond_20
nop
.line 102
:goto_21
return v0
.line 99
:cond_22
:goto_22
return v0
.end method
.method setHardwareConfigIfAllowed(IILandroid/graphics/BitmapFactory$Options;ZZ)Z
.registers 8
.param p1, "targetWidth" # I
.param p2, "targetHeight" # I
.param p3, "optionsWithScaling" # Landroid/graphics/BitmapFactory$Options;
.param p4, "isHardwareConfigAllowed" # Z
.param p5, "isExifOrientationRequired" # Z
.line 115
nop
.line 116
invoke-virtual {p0, p1, p2, p4, p5}, Lcom/bumptech/glide/load/resource/bitmap/HardwareConfigState;->isHardwareConfigAllowed(IIZZ)Z
move-result v0
.line 118
.local v0, "result":Z
if-eqz v0, :cond_e
.line 119
sget-object v1, Landroid/graphics/Bitmap$Config;->HARDWARE:Landroid/graphics/Bitmap$Config;
iput-object v1, p3, Landroid/graphics/BitmapFactory$Options;->inPreferredConfig:Landroid/graphics/Bitmap$Config;
.line 120
const/4 v1, 0x0
iput-boolean v1, p3, Landroid/graphics/BitmapFactory$Options;->inMutable:Z
.line 122
:cond_e
return v0
.end method