<!--
This tests the overhead added by document rules to style recalc with display
locked elements. It adds 1,000 display-locked divs (with 4 links each), applies
and removes the lock, and forces a style update after. This test can be run with
and without "SpeculationRulesDocumentRulesSelectorMatches" enabled, and the
performance should be comparable.
-->
<!DOCTYPE html>
<head>
<script src="../resources/runner.js"></script>
<style>
#root > * { content-visibility: visible; }
</style>
<script type="speculationrules">
{"prefetch": [{"source": "document"}]}
</script>
</head>
<body>
<div id="root"></div>
</body>
<script>
const NUM_BLOCKS = 1000;
function setup() {
let id = 0;
root.innerHTML = "";
document.styleSheets[0].rules[0].style.contentVisibility = 'visible';
for (let i = 0; i < NUM_BLOCKS; i++) {
const block = document.createElement("div");
block.id = ++id;
block.innerHTML = `
<a href="/foo.com" id="${++id}">${id}</a>
<a href="/foo.com" id="${++id}">${id}</a>
<a href="/foo.com" id="${++id}">${id}</a>
<a href="/foo.com" id="${++id}">${id}</a>
`
root.appendChild(block);
}
root.offsetLeft;
}
function runTest() {
document.styleSheets[0].rules[0].style.contentVisibility = 'hidden';
root.offsetTop;
document.styleSheets[0].rules[0].style.contentVisibility = 'visible';
root.offsetTop;
}
PerfTestRunner.measureTime({
setup: setup,
run: runTest,
iterationCount: 10,
});
</script>