@Override public long now(TimeUnit unit) { return super.now(unit) + unit.convert(drift, TimeUnit.NANOSECONDS); } };
@Override public void run() { decoratedRun.run(); if (!sd.isDisposed()) { long nextTick; long nowNanoseconds = now(TimeUnit.NANOSECONDS); // If the clock moved in a direction quite a bit, rebase the repetition period if (nowNanoseconds + CLOCK_DRIFT_TOLERANCE_NANOSECONDS < lastNowNanoseconds || nowNanoseconds >= lastNowNanoseconds + periodInNanoseconds + CLOCK_DRIFT_TOLERANCE_NANOSECONDS) { nextTick = nowNanoseconds + periodInNanoseconds; /* * Shift the start point back by the drift as if the whole thing * started count periods ago. */ startInNanoseconds = nextTick - (periodInNanoseconds * (++count)); } else { nextTick = startInNanoseconds + (++count * periodInNanoseconds); } lastNowNanoseconds = nowNanoseconds; long delay = nextTick - nowNanoseconds; sd.replace(schedule(this, delay, TimeUnit.NANOSECONDS)); } }
@Override public void run() { decoratedRun.run(); if (!sd.isDisposed()) { long nextTick; long nowNanoseconds = now(TimeUnit.NANOSECONDS); // If the clock moved in a direction quite a bit, rebase the repetition period if (nowNanoseconds + CLOCK_DRIFT_TOLERANCE_NANOSECONDS < lastNowNanoseconds || nowNanoseconds >= lastNowNanoseconds + periodInNanoseconds + CLOCK_DRIFT_TOLERANCE_NANOSECONDS) { nextTick = nowNanoseconds + periodInNanoseconds; /* * Shift the start point back by the drift as if the whole thing * started count periods ago. */ startInNanoseconds = nextTick - (periodInNanoseconds * (++count)); } else { nextTick = startInNanoseconds + (++count * periodInNanoseconds); } lastNowNanoseconds = nowNanoseconds; long delay = nextTick - nowNanoseconds; sd.replace(schedule(this, delay, TimeUnit.NANOSECONDS)); } }
@Override public long now(TimeUnit unit) { return worker.now(unit); }
@SuppressWarnings("unchecked") @Override public void onNext(T t) { T evicted = null; synchronized (this) { if (queue.size() == maxSizeDouble) { queue.poll(); evicted = (T)queue.poll(); } queue.offer(worker.now(unit)); queue.offer(t); } evict(evicted); worker.schedule(this, timeout, unit); drain(); }
@Override public long now(TimeUnit unit) { return worker.now(unit); }
@Override public long now(@NonNull TimeUnit unit) { return delegateWorker.now(unit); } };
@Override public void onComplete() { terminalEvent = this; long now = worker.now(TimeUnit.NANOSECONDS); worker.schedule(this, lastEvent - now - betweenSpan, TimeUnit.NANOSECONDS); }
@Override public void onError(Throwable t) { terminalEvent = t; if (delayError) { long now = worker.now(TimeUnit.NANOSECONDS); worker.schedule(this, lastEvent - now - betweenSpan, TimeUnit.NANOSECONDS); } else { worker.schedule(this); } }
@Override public long now() { return v2Worker.now(MILLISECONDS); }
@Override public long now(TimeUnit unit) { return worker.now(unit); }
@Test public void now() { TestScheduler test = new TestScheduler(); SharedScheduler scheduler = new SharedScheduler(test); assertEquals(0L, scheduler.now(TimeUnit.MILLISECONDS)); assertEquals(0L, scheduler.createWorker().now(TimeUnit.MILLISECONDS)); }
@Override public long now(TimeUnit unit) { return worker.now(unit); }
@Override public void onComplete() { terminalEvent = this; long now = worker.now(TimeUnit.NANOSECONDS); worker.schedule(this, lastEvent - now - betweenSpan, TimeUnit.NANOSECONDS); }
@Override public void onError(Throwable t) { terminalEvent = t; if (delayError) { long now = worker.now(TimeUnit.NANOSECONDS); worker.schedule(this, lastEvent - now - betweenSpan, TimeUnit.NANOSECONDS); } else { worker.schedule(this); } }
@Test public void workerNow() { Scheduler v2Scheduler = mock(Scheduler.class); rx.Scheduler v1Scheduler = RxJavaInterop.toV1Scheduler(v2Scheduler); Scheduler.Worker v2Worker = mock(Scheduler.Worker.class); when(v2Scheduler.createWorker()).thenReturn(v2Worker); rx.Scheduler.Worker v1Worker = v1Scheduler.createWorker(); when(v2Worker.now(MILLISECONDS)).thenReturn(123L); assertEquals(123L, v1Worker.now()); }
@Test public void workerNow() { rx.Scheduler v1Scheduler = mock(rx.Scheduler.class); io.reactivex.Scheduler v2Scheduler = RxJavaInterop.toV2Scheduler(v1Scheduler); rx.Scheduler.Worker v1Worker = mock(rx.Scheduler.Worker.class); when(v1Scheduler.createWorker()).thenReturn(v1Worker); io.reactivex.Scheduler.Worker v2Worker = v2Scheduler.createWorker(); when(v1Worker.now()).thenReturn(123L); assertEquals(123L, v2Worker.now(TimeUnit.MILLISECONDS)); }
@Override public long now() { return v2Worker.now(MILLISECONDS); }
final long firstNowNanoseconds = now(TimeUnit.NANOSECONDS); final long firstStartInNanoseconds = firstNowNanoseconds + unit.toNanos(initialDelay);
final long firstNowNanoseconds = now(TimeUnit.NANOSECONDS); final long firstStartInNanoseconds = firstNowNanoseconds + unit.toNanos(initialDelay);