| <!-- |
| This tests the overhead added by document rules to style recalc with display |
| locked elements. It adds 25 display-locked divs that have 26 children |
| (25 divs, 1 link) and 625 (25*25) grandchildren (divs) each. It 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 = 25; |
| const NUM_CHILDREN = 25; |
| const NUM_GRANDCHILDREN = 25; |
| |
| 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"); |
| for (let j = 0; j < NUM_CHILDREN; j++) { |
| let child = document.createElement("div"); |
| for (let k = 0; k < NUM_GRANDCHILDREN; k++) { |
| let grandchild = document.createElement("div"); |
| grandchild.id = ++id; |
| grandchild.innerText = id; |
| child.appendChild(grandchild); |
| } |
| let a = document.createElement("a") |
| a.href = "/foo.com" |
| a.id = ++id; |
| a.innerText = id; |
| child.appendChild(a); |
| block.appendChild(child); |
| } |
| 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> |