<!DOCTYPE html>
<html>
<head>
<style>
container, leaf {display: block; visibility: hidden;}
</style>
<script src="../resources/runner.js"></script>
</head>
<body>
</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.documentElement.className = 'ax-trace-off'; // Pause a11y tracing.
document.body.innerHTML = '';
appendManyElements(document.body, 6); // Create tree 6 levels deep.
document.documentElement.className = ''; // Begin tracing after next a11y update.
changeLeafText();
// 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 {
// Each element receives 3 new children.
for (let count = 0; count < 3; count++) {
let newContainer = document.createElement('container');
appendManyElements(start.appendChild(newContainer), depth - 1);
}
}
}
function changeLeafText(text) {
let elements = document.querySelectorAll('leaf');
for (let count = 0; count < elements.length; count ++)
elements[count].textContent = elements[count].textContent == 'A' ? 'B' : 'A';
}
PerfTestRunner.startMeasureValuesAsync({
description: 'Test accessibility performance when changing text inside a hidden subtree.',
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>