chromium/third_party/blink/perf_tests/events/EventsDispatchingInV1ShadowTrees.html

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="../resources/runner.js"></script>
</head>
<body>
<div id="root"></div>
<script>
function createComposedTree(root, depth, branch, eachTreeHeight)
{
    var node = root;
    var i;
    for (i = 0; i < eachTreeHeight; ++i) {
        var child = document.createElement('div');
        node.appendChild(child);
        node = child;
    }
    if (depth == 1)
        return;
    for (i = 0; i < branch; ++i) {
        var child = document.createElement('div');
        node.appendChild(child);
        var shadowRoot = child.attachShadow({ mode: 'open' });
        createComposedTree(shadowRoot, depth - 1, branch, eachTreeHeight);
    }
}

function leftMostLeaf(root)
{
    var node = root;
    while (node.firstChild)
        node = node.firstChild
    if (!node.shadowRoot)
        return node;
    return leftMostLeaf(node.shadowRoot)
}

function rightMostLeaf(root)
{
    var node = root;
    while (node.lastChild)
        node = node.lastChild
    if (!node.shadowRoot)
        return node;
    return rightMostLeaf(node.shadowRoot)
}

var root = document.getElementById('root');
createComposedTree(root, 10, 2, 50);
var leaf1 = leftMostLeaf(root);
var leaf2 = rightMostLeaf(root);

function run()
{
    leaf1.dispatchEvent(new MouseEvent('mousemove', {
        relatedTarget: leaf2
    }));
}

PerfTestRunner.measureRunsPerSecond({
    description: "Measure mousemove events dispatching in shadow trees",
    run: run
});
</script>
</body>
</html>