haikuwebkit/PerformanceTests/StyleBench/resources/style-bench.html

33 lines
823 B
HTML
Raw Permalink Normal View History

Add StyleBench https://bugs.webkit.org/show_bug.cgi?id=180140 Reviewed by Simon Fraser and Joseph Pecoraro. StyleBench tests performance of the CSS style resolution and style invalidation. Each test run creates a large document and a large stylesheet using varying settings. It then applies a series of mutations to the document and measures the time to update the style and rendering. The resulting layout is simple, most of the pressure is on selector matching. StyleBench uses Speedometer framework for UI and measurements. For profiling purposes, it can also be run locally by opening style-bench.html directly. There are currently four subtests: - child and descendant combinators only (all other tests have these too). - sibling combinators: '~' and '+' - positional pseudo classes: :nth-child and similar - ::before and ::after pseudo elements The measured DOM mutations are: - add classes - remove classes - add leaf elements - remove leaf elements * StyleBench: Added. * StyleBench/InteractiveRunner.html: Added. Copied and customized from Speedometer. * StyleBench/index.html: Added. Copied and customized from Speedometer. * StyleBench/resources: Added. * StyleBench/resources/style-bench.html: Added. * StyleBench/resources/style-bench.js: Added. The test class. (Random): (Random.prototype.get next): (Random.prototype.chance): (Random.prototype.number): (nextAnimationFrame): (defaultConfiguration): (descendantCombinatorConfiguration): (siblingCombinatorConfiguration): (pseudoClassConfiguration): (beforeAndAfterConfiguration): (predefinedConfigurations): Four predefined configurations. (prototype.randomElementName): (prototype.randomCombinator): (prototype.randomPseudoClass): (prototype.makeSimpleSelector): (prototype.makeSelector): (prototype.get randomColorComponent): (prototype.makeDeclaration): (prototype.makeRule): (prototype.makeStylesheet): (prototype.makeStyle): (prototype.makeElement): (prototype.makeTreeWithDepth): (prototype.makeTree): (prototype.updateCachedTestElements): (prototype.randomTreeElement): (prototype.addClasses): (prototype.removeClasses): (prototype.addLeafElements): (prototype.removeLeafElements): (prototype.async.runForever): * StyleBench/resources/tests.js: Added. (makeSteps): (makeSuite): Generates Speedometer Suites. Canonical link: https://commits.webkit.org/196181@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@225324 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2017-11-30 12:30:25 +00:00
<!doctype html>
<script src="style-bench.js"></script>
<body>
<div id="testroot"></div>
<div id="controls">
<select></select>
<button onclick="createBenchmarkFromSelect()">Initialize</button>
<button onclick="createBenchmarkFromSelect().runForever()">Initialize and run</button>
</div>
<script>
const configurations = StyleBench.predefinedConfigurations();
const select = document.querySelector("#controls select");
for (const configuration of configurations) {
const option = document.createElement("option");
option.innerHTML = configuration.name;
select.appendChild(option);
}
function createBenchmark(configuration)
{
controls.remove();
return new StyleBench(configuration);
}
function createBenchmarkFromSelect()
{
return createBenchmark(configurations[select.selectedIndex]);
}
</script>