<html>
<head>
<script src="../../LayoutTests/http/tests/inspector/inspector-test.js"></script>
<script src="performance-test.js"></script>
<script>

function makeXHRRequests(count)
{
    for (var i = 0; i < count; ++i) {
        var xhr = new XMLHttpRequest();
        xhr.open("GET", document.URL, true);
        xhr.send();
    }
}

function test()
{
    WebInspector.showPanel("scripts");
    var files = WebInspector.panels.scripts._fileSelector._filesSelectElement;
    for (var i = 0; i < files.options.length; ++i) {
         if (files.options[i].value.indexOf("inspector-test.js") !== -1) {
             files.selectedIndex = i;
             WebInspector.panels.scripts._fileSelector._filesSelectChanged();
             break;
         }
    }

    WebInspector.showPanel("resources");
    WebInspector.settings.resourcesLastSelectedItem.set(WebInspector.inspectedPageURL);

    WebInspector.showPanel("network");
    InspectorTest.evaluateInPage("makeXHRRequests(200)", runTest);

    function runTest()
    {
        InspectorTest.runPerformanceTest(perfTest, 10000);
    }

    function perfTest(timer)
    {
        WebInspector.showPanel("audits");
        for (var panelName in WebInspector.panels) {
            var timerCookie = timer.start("show-panel-" + panelName);
            WebInspector.showPanel(panelName);
            InspectorTest.evaluateInPage("testRunner.display();");
            timer.finish(timerCookie);
        }
        timer.done("panel-switch");
    }
}
</script>
</head>

<body onload="runTest()">
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
<div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div><div></div>
</body>
</html>
