hololake-system-architecture/product-source/hololake-platform/src/utils/sheetBrowserScheduling.ts

34 lines
1.1 KiB
TypeScript

export type IdleHandle =
| { kind: 'idle'; id: number }
| { kind: 'timeout'; id: ReturnType<typeof setTimeout> }
export function scheduleIdle(callback: () => void): IdleHandle {
const requestIdle = typeof window !== 'undefined' ? window.requestIdleCallback?.bind(window) : undefined
if (typeof requestIdle === 'function') return { kind: 'idle', id: requestIdle(callback) }
return { kind: 'timeout', id: setTimeout(callback, 0) }
}
export function cancelIdle(handle: IdleHandle): void {
if (handle.kind === 'idle') {
const cancelIdleFn = typeof window !== 'undefined' ? window.cancelIdleCallback?.bind(window) : undefined
if (typeof cancelIdleFn === 'function') cancelIdleFn(handle.id)
return
}
clearTimeout(handle.id)
}
export function requestFrame(callback: () => void): number {
return typeof window.requestAnimationFrame === 'function'
? window.requestAnimationFrame(callback)
: window.setTimeout(callback, 0)
}
export function cancelFrame(id: number): void {
if (typeof window.cancelAnimationFrame === 'function') {
window.cancelAnimationFrame(id)
return
}
window.clearTimeout(id)
}