<!DOCTYPE html>
<body>
<script src="../resources/runner.js"></script>
<style>
span {
padding: 1px;
}
.changeColor {
background-color: green;
}
</style>
<script>
// This test measures the lifecycle update performance of changing background
// colors in large trees.
function buildTree(parent, depth, arity, tagNameCallback, createElementCallback) {
for (var child = 0; child < arity; child++) {
var element = document.createElement(tagNameCallback(depth));
parent.appendChild(element);
createElementCallback(element, depth);
if (depth > 1)
buildTree(element, depth - 1, arity, tagNameCallback, createElementCallback);
}
}
// Build a tall tree that is skinny. A middle layer of
// the tree should have the changeColor class.
buildTree(document.body, 5, 5,
function(depth) {
// Use divs at upper levels to avoid too much layout time.
return depth > 9 ? 'div' : 'span';
},
function(element, depth) {
element.style.backgroundColor = 'green';
if (depth == 5)
element.setAttribute('class', 'changeColor');
}
);
var runCount = 0;
var elementsToChange = document.getElementsByClassName('changeColor');
var colors = [
"rgb(128, 18, 237)",
"rgb(191, 1, 191)",
"rgb(237, 18, 128)",
"rgb(255, 64, 64)",
"rgb(237, 127, 18)",
"rgb(191, 191, 1)",
"rgb(128, 237, 18)",
"rgb(64, 255, 64)",
"rgb(18, 237, 127)",
"rgb(1, 191, 191)",
"rgb(18, 128, 237)",
"rgb(64, 64, 255)"
];
PerfTestRunner.measureFrameTime({
run: function() {
runCount++;
var newColor = colors[runCount % colors.length];
for (var index = 0; index < elementsToChange.length; index++)
elementsToChange[index].style.backgroundColor = newColor;
},
warmUpCount: 3,
iterationCount: 10,
tracingCategories: 'blink',
traceEventsToMeasure: [
'LocalFrameView::RunPrePaintLifecyclePhase',
'LocalFrameView::RunPaintLifecyclePhase'
]
});
</script>
</body>