Something went wrong. Try again.
Bluesky app fork with some witchin' additions 💫
Something went wrong. Try again.
2.7 kB · 86 lines
at prod
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687diff --git a/lib/module/threads.js b/lib/module/threads.jsindex dd3a7f1ab12e5a8030af7f17b6a7a891e0b645d2..7d48ccbf95f00724db6b083a7155f25aadd6b8f5 100644--- a/lib/module/threads.js+++ b/lib/module/threads.js@@ -2,7 +2,6 @@ import { WorkletsError } from './debug/WorkletsError'; import { IS_JEST } from './platformChecker';-import { mockedRequestAnimationFrame } from './runLoop/uiRuntime/mockedRequestAnimationFrame'; export function scheduleOnUI(worklet, ...args) { enqueueUI(worklet, args); }@@ -24,38 +23,50 @@ export function scheduleOnRN(fun, ...args) { queueMicrotask(args.length ? () => fun(...args) : fun); } export function runOnUIAsync(worklet, ...args) {- return new Promise(resolve => {- enqueueUI(worklet, args, resolve);+ return new Promise((resolve, reject) => {+ enqueueUI(worklet, args, resolve, reject); }); } let runOnUIQueue = [];-function enqueueUI(worklet, args, resolve) {- if (IS_JEST) {- mockedRequestAnimationFrame(() => {- const result = worklet(...args);- resolve?.(result);- });- } else {- const job = [worklet, args, resolve];- runOnUIQueue.push(job);- if (runOnUIQueue.length === 1) {+function enqueueUI(worklet, args, resolve, reject) {+ const job = [worklet, args, resolve, reject];+ runOnUIQueue.push(job);+ if (runOnUIQueue.length === 1) {+ if (IS_JEST) { flushUIQueue();+ } else {+ queueMicrotask(flushUIQueue); } } }+let offset = 0; function flushUIQueue() {- queueMicrotask(() => {- const queue = runOnUIQueue;- runOnUIQueue = [];- requestAnimationFrameImpl(() => {- queue.forEach(([workletFunction, workletArgs, jobResolve]) => {- const result = workletFunction(...workletArgs);- if (jobResolve) {- jobResolve(result);+ const queue = runOnUIQueue;+ runOnUIQueue = [];+ requestAnimationFrame(() => {+ offset = 0;+ while (queue.length > offset) {+ try {+ drainUIQueue(queue);+ } catch (e) {+ const [, , , jobReject] = queue[offset - 1];+ if (jobReject) {+ jobReject(e);+ } else {+ console.error(e); }- });- });+ }+ } }); }-const requestAnimationFrameImpl = !globalThis.requestAnimationFrame ? mockedRequestAnimationFrame : globalThis.requestAnimationFrame;+function drainUIQueue(queue) {+ while (queue.length > offset) {+ const [workletFunction, workletArgs, jobResolve] = queue[offset];+ offset++;+ const result = workletFunction(...workletArgs);+ if (jobResolve) {+ jobResolve(result);+ }+ }+} //# sourceMappingURL=threads.js.map