From 43a97878ce14b72f0981164f87f2e35e14151312 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 11:22:09 +0200 Subject: Adding upstream version 110.0.1. Signed-off-by: Daniel Baumann --- .../web-platform/tests/animation-worklet/common.js | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 testing/web-platform/tests/animation-worklet/common.js (limited to 'testing/web-platform/tests/animation-worklet/common.js') diff --git a/testing/web-platform/tests/animation-worklet/common.js b/testing/web-platform/tests/animation-worklet/common.js new file mode 100644 index 0000000000..ceb430b718 --- /dev/null +++ b/testing/web-platform/tests/animation-worklet/common.js @@ -0,0 +1,61 @@ +'use strict'; + +function registerPassthroughAnimator() { + return runInAnimationWorklet(` + registerAnimator('passthrough', class { + animate(currentTime, effect) { + effect.localTime = currentTime; + } + }); + `); +} + +function registerConstantLocalTimeAnimator(localTime) { + return runInAnimationWorklet(` + registerAnimator('constant_time', class { + animate(currentTime, effect) { effect.localTime = ${localTime}; } + }); + `); +} + +function runInAnimationWorklet(code) { + return CSS.animationWorklet.addModule( + URL.createObjectURL(new Blob([code], {type: 'text/javascript'})) + ); +} + +function approxEquals(actual, expected){ + // precision in ms + const epsilon = 0.005; + const lowerBound = (expected - epsilon) < actual; + const upperBound = (expected + epsilon) > actual; + return lowerBound && upperBound; +} + +function waitForAsyncAnimationFrames(count) { + // In Chrome, waiting for N+1 main thread frames guarantees that compositor has produced + // at least N frames. + // TODO(majidvp): re-evaluate this choice once other browsers have implemented + // AnimationWorklet. + return waitForAnimationFrames(count + 1); +} + +async function waitForAnimationFrameWithCondition(condition) { + do { + await new Promise(window.requestAnimationFrame); + } while (!condition()) +} + +async function waitForDocumentTimelineAdvance() { + const timeAtStart = document.timeline.currentTime; + do { + await new Promise(window.requestAnimationFrame); + } while (timeAtStart === document.timeline.currentTime) +} + +// Wait until animation's effect has a non-null localTime. +async function waitForNotNullLocalTime(animation) { + await waitForAnimationFrameWithCondition(_ => { + return animation.effect.getComputedTiming().localTime !== null; + }); +} \ No newline at end of file -- cgit v1.2.3