<!DOCTYPE html>
<html>
<head>
    <script type="text/javascript" src="../resources/runner.js"></script>
</head>
<body>

<div id="wrapper">
    <div id="host"></div>
</div>

<script>
var numDivsInHost = 256;
var nLoops = 100;
var classNames = ['A', 'B', 'C', 'D', 'E'];

function setup()
{
    var nDivs = numDivsInHost;

    for (var i = 0; i < nDivs; ++i) {
        var div = document.createElement('div');
        div.appendChild(document.createTextNode('div' + i));

        var names = new Array();
        for (var j = 0; j < classNames.length; ++j) {
            if (i & (1 << j))
                names.push(classNames[j]);
        }
        div.className = names.join(' ');
       
        host.appendChild(div);
    }

    var shadowRoot = host.webkitCreateShadowRoot();
    for (var i = 0; i < classNames.length; ++i) {
        var content = document.createElement('content');
        content.setAttribute('select', '.' + classNames[i]);
        shadowRoot.appendChild(content);
    }
    shadowRoot.appendChild(document.createElement('content'));
}

function run()
{
    var host = document.getElementById('host');
    var nLoops = window.nLoops;

    var div = document.createElement('div');
    for (var i = 0; i < nLoops; ++i) {
        host.appendChild(div);
        host.removeChild(div);
        host.offsetLeft;
    }
}

function done()
{
    wrapper.innerHTML = '';
}


setup();

PerfTestRunner.measureTime({
    description: "Measure Distribution and Layout time in a case there are multiple InsertionPoints",
    run: run,
    done: done
});
</script>
</body>
</html>
