Source code
Revision control
Copy as Markdown
Other Tools
const very_long_frame_duration = 360;
function busy_wait(ms_delay = very_long_frame_duration) {
const deadline = performance.now() + ms_delay;
while (performance.now() < deadline) {
}
}
function generate_long_animation_frame(duration = very_long_frame_duration) {
busy_wait(duration / 2);
const reference_time = performance.now();
busy_wait(duration / 2);
return new Promise(
resolve => new PerformanceObserver((entries, observer) => {
const entry = entries.getEntries().find(
e => ((e.startTime < reference_time) &&
(reference_time < (e.startTime + e.duration))));
if (entry) {
observer.disconnect();
resolve(entry);
}
}).observe({type: 'long-animation-frame'}));
}