jimu-decompiled/sources/com/squareup/leakcanary/AndroidWatchExecutor.java
2025-05-13 19:24:51 +02:00

67 lines
2.7 KiB
Java

package com.squareup.leakcanary;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.MessageQueue;
import com.squareup.leakcanary.Retryable;
/* loaded from: classes.dex */
public final class AndroidWatchExecutor implements WatchExecutor {
static final String LEAK_CANARY_THREAD_NAME = "LeakCanary-Heap-Dump";
private final Handler backgroundHandler;
private final long initialDelayMillis;
private final Handler mainHandler = new Handler(Looper.getMainLooper());
private final long maxBackoffFactor;
public AndroidWatchExecutor(long j) {
HandlerThread handlerThread = new HandlerThread(LEAK_CANARY_THREAD_NAME);
handlerThread.start();
this.backgroundHandler = new Handler(handlerThread.getLooper());
this.initialDelayMillis = j;
this.maxBackoffFactor = Long.MAX_VALUE / j;
}
/* JADX INFO: Access modifiers changed from: private */
public void postToBackgroundWithDelay(final Retryable retryable, final int i) {
this.backgroundHandler.postDelayed(new Runnable() { // from class: com.squareup.leakcanary.AndroidWatchExecutor.3
@Override // java.lang.Runnable
public void run() {
if (retryable.run() == Retryable.Result.RETRY) {
AndroidWatchExecutor.this.postWaitForIdle(retryable, i + 1);
}
}
}, this.initialDelayMillis * ((long) Math.min(Math.pow(2.0d, i), this.maxBackoffFactor)));
}
/* JADX INFO: Access modifiers changed from: private */
public void postWaitForIdle(final Retryable retryable, final int i) {
this.mainHandler.post(new Runnable() { // from class: com.squareup.leakcanary.AndroidWatchExecutor.1
@Override // java.lang.Runnable
public void run() {
AndroidWatchExecutor.this.waitForIdle(retryable, i);
}
});
}
/* JADX INFO: Access modifiers changed from: private */
public void waitForIdle(final Retryable retryable, final int i) {
Looper.myQueue().addIdleHandler(new MessageQueue.IdleHandler() { // from class: com.squareup.leakcanary.AndroidWatchExecutor.2
@Override // android.os.MessageQueue.IdleHandler
public boolean queueIdle() {
AndroidWatchExecutor.this.postToBackgroundWithDelay(retryable, i);
return false;
}
});
}
@Override // com.squareup.leakcanary.WatchExecutor
public void execute(Retryable retryable) {
if (Looper.getMainLooper().getThread() == Thread.currentThread()) {
waitForIdle(retryable, 0);
} else {
postWaitForIdle(retryable, 0);
}
}
}