mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-11-12 06:08:24 +02:00
Automatic update from web-platform-tests
[animation-worklet] Basic pause implementation (reland)
Pausing worklet animation now holds the time. This works as expected for main
thread animations. Implementing this for composited worklet animations will be
done in a follow up patch.
Major changes:
- Add and expose pause() method pausing the animation.
- Introduce hold_time that is used when animation is paused.
- Rework how current time is computed, it is now closer to
regular animations i.e., we either compute it based on "start time and
timeline.currentTime" or use "hold time".
- Instead of setting start time we now set the current time
which then works backward to compute either the start time or the hold time
based on the animation state.
- When transitioning animation play state, we now always set
the current time. Previously this was adhoc and inconsistent.
- Introduce has_started_ to differentiate when playing an
animation for the first time vs playing it from pause.
- Update playback_rate related calculation to use new logic.
Relanding: Original CL was reverted here [1]. Took the following steps to
address this:
- Address flakiness in unit test by using more accurate error
value matching other tests.
- Fix flakiness in layout test (worklet-animation-pause.https.html)
by using startTime and waiting for time to actually advance working around
pre-existing animation clock issue [2]. Also got rid of an invalid state
transition from pause->idle.
[1] https://chromium-review.googlesource.com/c/chromium/src/+/1434815
[2] http://crbug.com/785940
TEST:
- wpt/animation-worklet/worklet-animation-pause.https.html: js test for basic
current time calculations
- wpt/animation-worklet/worklet-animation-pause-immediately.https.html:
reftest for basic pause
- wpt/animation-worklet/worklet-animation-pause-result.https.html: reftest for
pause/resume.
- WorkletAnimationTest.PausePlay: unit test for basic state
transition and time calc
Bug: 821910,
Change-Id: I11fd2960443081be81055904d6d56a2abc3282f5
Reviewed-on: https://chromium-review.googlesource.com/c/1456640
Reviewed-by: Majid Valipour <majidvp@chromium.org>
Reviewed-by: Yi Gu <yigu@chromium.org>
Commit-Queue: Majid Valipour <majidvp@chromium.org>
Cr-Commit-Position: refs/heads/master@{#630548}
--
wpt-commits: 345300fad3945a5f1441fb2b2001109ca48f36e8
wpt-pr: 15279
37 lines
1.1 KiB
HTML
37 lines
1.1 KiB
HTML
<!DOCTYPE html>
|
|
<html class="reftest-wait">
|
|
<title>Verify that calling pause immediately after playing works as expected</title>
|
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
|
<link rel="match" href="references/translated-box-ref.html">
|
|
|
|
<script src="/common/reftest-wait.js"></script>
|
|
<script src="/web-animations/testcommon.js"></script>
|
|
<script src="common.js"></script>
|
|
<style>
|
|
#box {
|
|
width: 100px;
|
|
height: 100px;
|
|
background-color: green;
|
|
}
|
|
</style>
|
|
|
|
<div id="box"></div>
|
|
|
|
<script>
|
|
registerPassthroughAnimator().then(async _ => {
|
|
const box = document.getElementById('box');
|
|
const effect = new KeyframeEffect(box,
|
|
{ transform: ['translateY(100px)', 'translateY(200px)'] },
|
|
{ duration: 100, iterations: 1 }
|
|
);
|
|
|
|
const animation = new WorkletAnimation('passthrough', effect);
|
|
animation.play();
|
|
// Immediately pausing animation should freeze the current time at 0.
|
|
animation.pause();
|
|
// Wait at least one frame to ensure a paused animation actually freezes.
|
|
await waitForAsyncAnimationFrames(1);
|
|
takeScreenshot();
|
|
});
|
|
</script>
|
|
</html>
|