sec commit
This commit is contained in:
55
node_modules/framesync/lib/create-render-step.js
generated
vendored
Normal file
55
node_modules/framesync/lib/create-render-step.js
generated
vendored
Normal file
@@ -0,0 +1,55 @@
|
||||
export function createRenderStep(runNextFrame) {
|
||||
let toRun = [];
|
||||
let toRunNextFrame = [];
|
||||
let numToRun = 0;
|
||||
let isProcessing = false;
|
||||
let flushNextFrame = false;
|
||||
const toKeepAlive = new WeakSet();
|
||||
const step = {
|
||||
schedule: (callback, keepAlive = false, immediate = false) => {
|
||||
const addToCurrentFrame = immediate && isProcessing;
|
||||
const buffer = addToCurrentFrame ? toRun : toRunNextFrame;
|
||||
if (keepAlive)
|
||||
toKeepAlive.add(callback);
|
||||
if (buffer.indexOf(callback) === -1) {
|
||||
buffer.push(callback);
|
||||
if (addToCurrentFrame && isProcessing)
|
||||
numToRun = toRun.length;
|
||||
}
|
||||
return callback;
|
||||
},
|
||||
cancel: (callback) => {
|
||||
const index = toRunNextFrame.indexOf(callback);
|
||||
if (index !== -1)
|
||||
toRunNextFrame.splice(index, 1);
|
||||
toKeepAlive.delete(callback);
|
||||
},
|
||||
process: (frameData) => {
|
||||
if (isProcessing) {
|
||||
flushNextFrame = true;
|
||||
return;
|
||||
}
|
||||
isProcessing = true;
|
||||
[toRun, toRunNextFrame] = [toRunNextFrame, toRun];
|
||||
toRunNextFrame.length = 0;
|
||||
numToRun = toRun.length;
|
||||
if (numToRun) {
|
||||
for (let i = 0; i < numToRun; i++) {
|
||||
const callback = toRun[i];
|
||||
callback(frameData);
|
||||
if (toKeepAlive.has(callback)) {
|
||||
step.schedule(callback);
|
||||
runNextFrame();
|
||||
}
|
||||
}
|
||||
}
|
||||
isProcessing = false;
|
||||
if (flushNextFrame) {
|
||||
flushNextFrame = false;
|
||||
step.process(frameData);
|
||||
}
|
||||
},
|
||||
};
|
||||
return step;
|
||||
}
|
||||
//# sourceMappingURL=create-render-step.js.map
|
||||
Reference in New Issue
Block a user