blob: b5aef69de68b8e5476587d8660b35621526058f6 [file] [edit]
<!DOCTYPE html>
<html>
<head>
<script src="../resources/runner.js"></script>
</head>
<body tabindex="-1">
</body>
<script>
var isDone = false;
var startTime;
function runTest() {
if (startTime) {
PerfTestRunner.measureValueAsync(PerfTestRunner.now() - startTime);
PerfTestRunner.addRunTestEndMarker();
}
if (!isDone) {
PerfTestRunner.addRunTestStartMarker();
startTime = PerfTestRunner.now();
document.body.outerHTML = '';
appendManyElements(document.body, 6);
// Re-run the same test.
// Wait to allow the asynchronous accessibility code that's
// covered by traceEventsToMeasure to have a chance to run.
setTimeout(runTest, 2500);
}
}
// Recursively add layers of descendants.
function appendManyElements(start, depth) {
if (depth == 0) {
start.innerHTML = '<leaf>A</leaf>';
}
else {
// Add a click listener to every other layer in the tree.
if (depth % 2 == 0) {
start.addEventListener('click', () => {}, true);
start.setAttribute('role', 'group');
}
// Each element receives 3 new children.
for (let count = 0; count < 3; count++) {
let newContainer = document.createElement('container');
appendManyElements(start.appendChild(newContainer), depth - 1);
}
}
}
PerfTestRunner.startMeasureValuesAsync({
description: 'Test accessibility performance when building trees with nested click listeners which may require hit testing.',
unit: 'ms',
done: function () {
isDone = true;
},
run: function() {
runTest();
},
iterationCount: 6,
tracingCategories: 'accessibility',
traceEventsToMeasure: [
'TotalAccessibilityCleanLayoutLifecycleStages',
'ProcessDeferredUpdatesLifecycleStage',
'FinalizingTreeLifecycleStage',
'SerializeLifecycleStage',
'RenderAccessibilityImpl::SendPendingAccessibilityEvents',
'BrowserAccessibilityManager::OnAccessibilityEvents',
'SerializeLocationChanges',
"BrowserAccessibilityManager::OnLocationChanges"
]
});
</script>
</html>