fune/testing/web-platform/tests/scroll-animations/css/scroll-animation-initial-offset.html
Steve Kobes c3bb93064b Bug 1830968 [wpt PR 39810] - Force KeyframeModel::time_offset_ to be 0 for scroll-driven animations., a=testonly
Automatic update from web-platform-tests
Force KeyframeModel::time_offset_ to be 0 for scroll-driven animations.

KeyframeModel::CalculateActiveTime shifts all times by time_offset_,
which is initialized when we start the animation on the compositor.

But we don't want such shifting for scroll-driven animations, because
cc::Animation::Tick gives the KeyframeModel a pause_time_ based on
absolute progress (the current scroll position).

Fix by making Animation::ComputeCompositorTimeOffset return 0 during
Animation::StartAnimationOnCompositor, even if the scroll position is
non-zero from an earlier scroll.

Bug: 1431191
Change-Id: Ie2a2b7e099c12232e05900907231da1729ee6c34
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4498525
Commit-Queue: Steve Kobes <skobes@chromium.org>
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1138967}

--

wpt-commits: 797d2099e320aa895aae4c445ab3cefc9379b23c
wpt-pr: 39810
2023-05-21 22:44:03 +00:00

73 lines
1.6 KiB
HTML

<!DOCTYPE html>
<html class="reftest-wait">
<title>Composited scroll-linked animation with initial scroll offset</title>
<link rel="help" href="https://drafts.csswg.org/scroll-animations-1/">
<link rel="match" href="scroll-animation-initial-offset-ref.html">
<style>
#scroller {
overflow-y: auto;
height: 200px;
border: 2px solid green;
position: relative;
background: gray;
}
.spacer {
height: 1000px;
}
@keyframes anim {
0% { transform: translateY(0); }
100% { transform: translateY(800px); }
}
#align {
box-sizing: border-box;
width: 100%;
height: 50px;
background: rgba(0, 0, 200, 0.2);
color: white;
position: absolute;
border: 1px solid white;
animation: anim linear 10s;
animation-timeline: scroll();
will-change: transform;
}
#marker {
width: 100%;
height: 50px;
background: #640;
position: absolute;
top: 350px;
}
</style>
<div id="scroller">
<div id="align">TOP</div>
<div class="spacer"></div>
<div id="marker">BOTTOM</div>
</div>
<script>
// Test that a scroll-linked animation of a composited property reacts
// correctly to a programmatic scroll early during the page load.
//
// The scroll offset will change before the animation is "started" on the
// compositor, so it needs to be able to handle a non-zero initial offset.
//
scroller.scrollTo(0, 200);
</script>
<script src="/web-animations/testcommon.js"></script>
<script>
document.documentElement.addEventListener('TestRendered', async () => {
await waitForCompositorReady();
await waitForNextFrame();
await waitForNextFrame();
document.documentElement.classList.remove("reftest-wait");
}, { once: true });
</script>