1 line
5.2 KiB
Plaintext
1 line
5.2 KiB
Plaintext
{"version":3,"file":"batcher.mjs","sources":["../../../src/frameloop/batcher.ts"],"sourcesContent":["import { MotionGlobalConfig } from \"motion-utils\"\nimport { stepsOrder } from \"./order\"\nimport { createRenderStep } from \"./render-step\"\nimport { Batcher, FrameData, Process, Steps } from \"./types\"\n\nconst maxElapsed = 40\n\nexport function createRenderBatcher(\n scheduleNextBatch: (callback: Function) => void,\n allowKeepAlive: boolean\n) {\n let runNextFrame = false\n let useDefaultElapsed = true\n\n const state: FrameData = {\n delta: 0.0,\n timestamp: 0.0,\n isProcessing: false,\n }\n\n const flagRunNextFrame = () => (runNextFrame = true)\n\n const steps = stepsOrder.reduce((acc, key) => {\n acc[key] = createRenderStep(\n flagRunNextFrame,\n allowKeepAlive ? key : undefined\n )\n return acc\n }, {} as Steps)\n\n const {\n setup,\n read,\n resolveKeyframes,\n preUpdate,\n update,\n preRender,\n render,\n postRender,\n } = steps\n\n const processBatch = () => {\n const timestamp = MotionGlobalConfig.useManualTiming\n ? state.timestamp\n : performance.now()\n runNextFrame = false\n\n if (!MotionGlobalConfig.useManualTiming) {\n state.delta = useDefaultElapsed\n ? 1000 / 60\n : Math.max(Math.min(timestamp - state.timestamp, maxElapsed), 1)\n }\n\n state.timestamp = timestamp\n state.isProcessing = true\n\n // Unrolled render loop for better per-frame performance\n setup.process(state)\n read.process(state)\n resolveKeyframes.process(state)\n preUpdate.process(state)\n update.process(state)\n preRender.process(state)\n render.process(state)\n postRender.process(state)\n\n state.isProcessing = false\n\n if (runNextFrame && allowKeepAlive) {\n useDefaultElapsed = false\n scheduleNextBatch(processBatch)\n }\n }\n\n const wake = () => {\n runNextFrame = true\n useDefaultElapsed = true\n\n if (!state.isProcessing) {\n scheduleNextBatch(processBatch)\n }\n }\n\n const schedule = stepsOrder.reduce((acc, key) => {\n const step = steps[key]\n acc[key] = (process: Process, keepAlive = false, immediate = false) => {\n if (!runNextFrame) wake()\n\n return step.schedule(process, keepAlive, immediate)\n }\n return acc\n }, {} as Batcher)\n\n const cancel = (process: Process) => {\n for (let i = 0; i < stepsOrder.length; i++) {\n steps[stepsOrder[i]].cancel(process)\n }\n }\n\n return { schedule, cancel, state, steps }\n}\n"],"names":[],"mappings":"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"} |