jimu-decompiled/sources/io/reactivex/internal/schedulers/TrampolineScheduler.java
2025-05-13 19:24:51 +02:00

167 lines
5.3 KiB
Java

package io.reactivex.internal.schedulers;
import io.reactivex.Scheduler;
import io.reactivex.disposables.Disposable;
import io.reactivex.disposables.Disposables;
import io.reactivex.internal.disposables.EmptyDisposable;
import io.reactivex.internal.functions.ObjectHelper;
import io.reactivex.plugins.RxJavaPlugins;
import java.util.concurrent.PriorityBlockingQueue;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
/* loaded from: classes2.dex */
public final class TrampolineScheduler extends Scheduler {
private static final TrampolineScheduler b = new TrampolineScheduler();
static final class SleepingRunnable implements Runnable {
private final Runnable a;
private final TrampolineWorker b;
private final long c;
SleepingRunnable(Runnable runnable, TrampolineWorker trampolineWorker, long j) {
this.a = runnable;
this.b = trampolineWorker;
this.c = j;
}
@Override // java.lang.Runnable
public void run() {
if (this.b.d) {
return;
}
long a = this.b.a(TimeUnit.MILLISECONDS);
long j = this.c;
if (j > a) {
try {
Thread.sleep(j - a);
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
RxJavaPlugins.b(e);
return;
}
}
if (this.b.d) {
return;
}
this.a.run();
}
}
static final class TimedRunnable implements Comparable<TimedRunnable> {
final Runnable a;
final long b;
final int c;
volatile boolean d;
TimedRunnable(Runnable runnable, Long l, int i) {
this.a = runnable;
this.b = l.longValue();
this.c = i;
}
@Override // java.lang.Comparable
/* renamed from: a, reason: merged with bridge method [inline-methods] */
public int compareTo(TimedRunnable timedRunnable) {
int a = ObjectHelper.a(this.b, timedRunnable.b);
return a == 0 ? ObjectHelper.a(this.c, timedRunnable.c) : a;
}
}
static final class TrampolineWorker extends Scheduler.Worker implements Disposable {
final PriorityBlockingQueue<TimedRunnable> a = new PriorityBlockingQueue<>();
private final AtomicInteger b = new AtomicInteger();
final AtomicInteger c = new AtomicInteger();
volatile boolean d;
final class AppendToQueueTask implements Runnable {
final TimedRunnable a;
AppendToQueueTask(TimedRunnable timedRunnable) {
this.a = timedRunnable;
}
@Override // java.lang.Runnable
public void run() {
TimedRunnable timedRunnable = this.a;
timedRunnable.d = true;
TrampolineWorker.this.a.remove(timedRunnable);
}
}
TrampolineWorker() {
}
@Override // io.reactivex.Scheduler.Worker
public Disposable a(Runnable runnable) {
return a(runnable, a(TimeUnit.MILLISECONDS));
}
@Override // io.reactivex.disposables.Disposable
public void dispose() {
this.d = true;
}
@Override // io.reactivex.Scheduler.Worker
public Disposable a(Runnable runnable, long j, TimeUnit timeUnit) {
long a = a(TimeUnit.MILLISECONDS) + timeUnit.toMillis(j);
return a(new SleepingRunnable(runnable, this, a), a);
}
Disposable a(Runnable runnable, long j) {
if (this.d) {
return EmptyDisposable.INSTANCE;
}
TimedRunnable timedRunnable = new TimedRunnable(runnable, Long.valueOf(j), this.c.incrementAndGet());
this.a.add(timedRunnable);
if (this.b.getAndIncrement() == 0) {
int i = 1;
while (!this.d) {
TimedRunnable poll = this.a.poll();
if (poll == null) {
i = this.b.addAndGet(-i);
if (i == 0) {
return EmptyDisposable.INSTANCE;
}
} else if (!poll.d) {
poll.a.run();
}
}
this.a.clear();
return EmptyDisposable.INSTANCE;
}
return Disposables.a(new AppendToQueueTask(timedRunnable));
}
}
TrampolineScheduler() {
}
public static TrampolineScheduler b() {
return b;
}
@Override // io.reactivex.Scheduler
public Scheduler.Worker a() {
return new TrampolineWorker();
}
@Override // io.reactivex.Scheduler
public Disposable a(Runnable runnable) {
RxJavaPlugins.a(runnable).run();
return EmptyDisposable.INSTANCE;
}
@Override // io.reactivex.Scheduler
public Disposable a(Runnable runnable, long j, TimeUnit timeUnit) {
try {
timeUnit.sleep(j);
RxJavaPlugins.a(runnable).run();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
RxJavaPlugins.b(e);
}
return EmptyDisposable.INSTANCE;
}
}