gecko-dev/testing/web-platform/tests/web-animations/timing-model/animations/infinite-duration-animation.html
Kevin Ellis df82275f2b Bug 1620645 [wpt PR 22120] - Do not composite infinite duration animations., a=testonly
Automatic update from web-platform-tests
Do not composite infinite duration animations.

This patch prevents infinite duration animations from running on the
compositor. These animations are locked at progress = 0, and therefore
do not benefit from compositing.  Infinite duration animations are
properly handled when running as main thread animations.

Bug: 1057076
Change-Id: Ibe4d4d9939060aeb8f62f4b5d94ca3d941b07ba1
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2087225
Commit-Queue: Kevin Ellis <kevers@chromium.org>
Reviewed-by: Robert Flack <flackr@chromium.org>
Cr-Commit-Position: refs/heads/master@{#748299}

--

wpt-commits: e833607996b10df6297e56dead44d512e81d394c
wpt-pr: 22120
2020-03-13 16:46:33 +00:00

64 lines
1.5 KiB
HTML

<!DOCTYPE html>
<html class="reftest-wait">
<meta charset="UTF-8">
<title>Infinite duration animation</title>
<link rel="match" href="infinite-duration-animation-ref.html">
<script src="/common/reftest-wait.js"></script>
<script src="../../testcommon.js"></script>
<style>
#box-1, #box-2 {
border: 1px solid white;
height: 40px;
position: absolute;
top: 40px;
width: 40px;
}
#box-1 {
background: blue;
z-index: 1;
}
#box-2 {
background: white;
z-index: 2;
}
#notes {
position: absolute;
left: 0px;
top: 100px;
}
body {
background: white;
}
</style>
<body>
<div id="box-1"></div>
<div id="box-2"></div>
<p id="notes">
This test creates an infinite duration animations, which should be stuck at
a progress of 0. If any blue pixels appear in the screenshot, the test
fails.
</p>
</body>
<script>
onload = async function() {
// Double rAF to ensure that we are not bogged down during initialization
// and the compositor is ready.
waitForAnimationFrames(2).then(() => {
const elem = document.getElementById('box-1');
const keyframes = [
{ transform: 'translateX(0px)' },
{ transform: 'translateX(100px)' }
];
const effect =
new KeyframeEffect(elem, keyframes,
{iterations: 3, duration: Infinity});
const animation = new Animation(effect);
animation.play();
animation.ready.then(() => {
takeScreenshotDelayed(100);
});
});
};
</script>