fune/testing/web-platform/tests/css/css-paint-api/two-element-one-custom-property-animation.https.html
Xida Chen b8b8a4d311 Bug 1679537 [wpt PR 26660] - [OT-PW] Fix a regression in off-thread paint worklet, a=testonly
Automatic update from web-platform-tests
[OT-PW] Fix a regression in off-thread paint worklet

This CL fixes a regression in off-thread paint worklet. The regression
is that attached case in the bug, which has two paint worklet
animating one custom property, and one of the animation is very
slow. In reality, both animations should be running on the
compositor thread so they should be smooth.

Bisect is pointing to this CL:
https://chromium-review.googlesource.com/c/chromium/src/+/2528937

In the above CL, we basically change the PropertyKey in the
PaintWorklet from a std::pair to a structure. Investigation
shows that the new structure doesn't work well with
base::flat_set and this CL fixes that. The root cause of the
problem is that the operator< for the structure doesn't
consider the element_id.

We also added a layout test to ensure that this won't regress
in the future.

Bug: 1152814
Change-Id: I688c19c40d88c2b99d17d3444826e04a4a4287d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2562966
Reviewed-by: Kevin Ellis <kevers@chromium.org>
Reviewed-by: Majid Valipour <majidvp@chromium.org>
Commit-Queue: Xida Chen <xidachen@chromium.org>
Cr-Commit-Position: refs/heads/master@{#831642}

--

wpt-commits: 3d0aaa49ec0e1e0b8c1ae664a4dea5119f75d273
wpt-pr: 26660
2020-12-03 09:54:50 +00:00

79 lines
2.4 KiB
HTML

<!DOCTYPE html>
<html class="reftest-wait">
<link rel="help" href="https://drafts.css-houdini.org/css-paint-api/">
<link rel="match" href="two-element-one-custom-property-animation-ref.html">
<style>
#footainer1 {
width: 200px;
height: 200px;
}
.fooanimate1 {
background-image: paint(foo);
/* Use long animations that start at 50% progress where the slope of the
selected timing function is zero. By setting up the animations in this way,
we accommodate lengthy delays in running the test without a potential drift
in the animated properties values. This is important for avoiding flakes,
especially on debug builds. The screenshots are taken as soon as the
animations are ready, thus the long animation duration has no bearing on
the actual duration of the test. */
animation: anim1 1000000s cubic-bezier(0,1,1,0);
animation-delay: -500000s;
}
#footainer2 {
width: 200px;
height: 200px;
}
.fooanimate2 {
background-image: paint(foo);
animation: anim2 1000000s cubic-bezier(0,1,1,0);
animation-delay: -500000s;
}
@keyframes anim1 {
0% { --foo: rgb(200, 0, 0); }
100% { --foo: rgb(0, 0, 200); }
}
@keyframes anim2 {
0% { --foo: rgb(200, 0, 0); }
100% { --foo: rgb(0, 200, 0); }
}
</style>
<script src="/common/reftest-wait.js"></script>
<script src="/common/worklet-reftest.js"></script>
<body>
<div id="footainer1"></div>
<div id="footainer2"></div>
<script id="code" type="text/worklet">
registerPaint('foo', class {
static get inputProperties() { return ['--foo']; }
paint(ctx, geom, properties) {
ctx.fillStyle = properties.get('--foo').toString();
ctx.fillRect(0, 0, 200, 200);
}
});
</script>
<script type="text/javascript">
CSS.registerProperty({
name: '--foo',
syntax: '<color>',
initialValue: 'rgb(0, 0, 0)',
inherits: false
});
</script>
<script>
var code = document.getElementById('code').textContent;
var blob = new Blob([code], {type: 'text/javascript'});
CSS.paintWorklet.addModule(URL.createObjectURL(blob)).then(function() {
document.getElementById('footainer1').classList.add('fooanimate1');
document.getElementById('footainer2').classList.add('fooanimate2');
const animations = document.getAnimations();
// Wait for all animations to start before completing the test.
Promise.all([animations[0].ready, animations[1].ready]).then(() => {
takeScreenshot();
});
});
</script>
</body>
</html>