| <!DOCTYPE html> |
| <title>Comparing identical custom property sets</title> |
| <script src="../resources/runner.js"></script> |
| <script src="resources/utils.js"></script> |
| <main id=main></main> |
| <script> |
| const PROP_COUNT = 1000; |
| const TOKEN_COUNT = 3000; // Per custom property. |
| const NODE_COUNT = 20000; |
| |
| // Generate declarations with values that have many tokens (i.e. values |
| // that would be expensive to call StyleVariables::operator== on). |
| // |
| // --x0:X X X ... 0 |
| // --x1:X X X ... 1 |
| // ... |
| let base_value = 'X '.repeat(TOKEN_COUNT / 2); |
| let declaration_array = []; |
| for (let i = 0; i < PROP_COUNT; i++) { |
| let value = base_value + i.toString(); // Make value unique. |
| declaration_array.push(`--x${i}:${value};`); |
| } |
| |
| // Generate two rules which produce identical StyleVariables objects. |
| // It's important that they are identical, so that StyleVariables::operator== |
| // has to take the slowest possible path. |
| let declarations = declaration_array.join('\n'); |
| applyCSSRule(`#main { ${declarations} }`); |
| applyCSSRule(`#main.change { ${declarations} }`); |
| |
| createDOMTree(main, NODE_COUNT, 1 /* siblings */); |
| |
| PerfTestRunner.measureTime({ |
| description: 'Comparing identical custom property sets', |
| run: function() { |
| forceStyleRecalc(main); |
| main.classList.toggle('change'); |
| forceStyleRecalc(main); |
| } |
| }); |
| </script> |