Files
bsky-social-app/patches/react-native-worklets@0.11.3.patch
T
Oleksii Bulenok fca34e27b9 fixes after rebase
2026-08-17 11:50:37 +02:00

89 lines
2.6 KiB
Diff

diff --git a/lib/module/threads.js b/lib/module/threads.js
index c17e314..71f3cf7 100644
--- a/lib/module/threads.js
+++ b/lib/module/threads.js
@@ -1,7 +1,6 @@
'use strict';
import { IS_JEST } from './platformChecker';
-import { mockedRequestAnimationFrame } from "./runLoop/uiRuntime/mockedRequestAnimationFrame.js";
export function scheduleOnUI(worklet, ...args) {
enqueueUI(worklet, args);
}
@@ -23,38 +22,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;
-//# sourceMappingURL=threads.js.map
\ No newline at end of file
+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