| <!DOCTYPE html> |
| <html> |
| <head> |
| <title>Performance test for :where()/:is() rule indexing</title> |
| </head> |
| <body> |
| <div id="container" style="height: 1px; overflow: hidden;"></div> |
| <script src="../resources/runner.js"></script> |
| <script> |
| |
| var ruleTags = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'a', 'blockquote', |
| 'strong', 'em', 'code', 'pre', 'ol', 'ul', 'li', 'table', 'img', 'hr', 'dl']; |
| var style = document.createElement('style'); |
| var css = ''; |
| for (var i = 0; i < ruleTags.length; i++) |
| css += '.prose :where(' + ruleTags[i] + '):not(:where([class~="not-prose"], [class~="not-prose"] *)) { margin: ' + (i + 1) + 'px; }\n'; |
| style.textContent = css; |
| document.head.appendChild(style); |
| |
| var container = document.getElementById('container'); |
| var domTags = ['div', 'div', 'div', 'span', 'span', 'p', 'section', 'article']; |
| for (var i = 0; i < 25000; i++) { |
| var el = document.createElement(domTags[i % domTags.length]); |
| el.textContent = 'x'; |
| if (i % 500 === 0) |
| el.className = 'not-prose'; |
| container.appendChild(el); |
| } |
| |
| PerfTestRunner.measureRunsPerSecond({ |
| description: "Style recalculation with :where(tag) rules on a large DOM. Tests that single-argument :where()/:is() rules are indexed by tag.", |
| run: function() { |
| container.classList.add('prose'); |
| container.offsetHeight; |
| |
| container.classList.remove('prose'); |
| container.offsetHeight; |
| } |
| }); |
| </script> |
| </body> |
| </html> |