forked from mirrors/gecko-dev
Automatic update from web-platform-tests Skip layout shift tracking for more invisible elements Besides the current conditions, e.g. visibility:hidden, opacity:0 (which is checked in PaintInvalidator instead of LayoutShiftTracker) etc., also ignore the following invisible elements: - For texts: - if the font is not renderable - if the text contains all whitespaces - For blocks: - if it doesn't have any decorations, and doesn't have any children. For performance and to reduce risk of false-negative of layout shift tracking, the conditions are kept simple. If a developer still get unexpected layout shift for invisible elements, we can suggest adding visibility:hidden to the element to explicitly disable layout shift tracking on the element. See https://ct.skia.org/results/cluster-telemetry/tasks/chromium_perf_runs/wangxianzhu-ChromiumPerf-5677/html/index.html for the change of overall CLS score with this CL. Bug: 1099350 Change-Id: Ib7e89e0331663572d1eef511976556e8b2a96a96 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2743811 Commit-Queue: Xianzhu Wang <wangxianzhu@chromium.org> Reviewed-by: Steve Kobes <skobes@chromium.org> Reviewed-by: Nicolás Peña Moreno <npm@chromium.org> Cr-Commit-Position: refs/heads/master@{#862593} -- wpt-commits: 48e5e3c75c9d0df0b18ee7628a98bbc85250eedd wpt-pr: 28030
32 lines
1.1 KiB
HTML
32 lines
1.1 KiB
HTML
<!DOCTYPE html>
|
|
<title>Layout Instability: parent (with overflow:hidden) and child moved together</title>
|
|
<link rel="help" href="https://wicg.github.io/layout-instability/" />
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
<script src="resources/util.js"></script>
|
|
<div id="parent" style="position: relative; width: 200px; height: 200px;
|
|
border: 50px solid blue; overflow: hidden">
|
|
<div id="child" style="width: 400px; height: 400px; background: blue"></div>
|
|
</div>
|
|
<script>
|
|
|
|
promise_test(async () => {
|
|
const watcher = new ScoreWatcher;
|
|
|
|
// Wait for the initial render to complete.
|
|
await waitForAnimationFrames(2);
|
|
|
|
// Modify the position of the div.
|
|
const parent = document.querySelector("#parent");
|
|
parent.style.top = '100px';
|
|
|
|
// Only the parent area should be reported.
|
|
const expectedScore = computeExpectedScore(300 * (300 + 100), 100);
|
|
|
|
// Observer fires after the frame is painted.
|
|
assert_equals(watcher.score, 0);
|
|
await watcher.promise;
|
|
assert_equals(watcher.score, expectedScore);
|
|
}, 'Parent (with overflow:hidden) and child moved together.');
|
|
|
|
</script>
|