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

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;
         }
    }

    function test(timer)
    {
        WebInspector.showPanel("audits");
        var showPanelTimerCookie = timer.start("first-open-scripts");
        WebInspector.showPanel("scripts");
        var count = WebInspector.panels.scripts.visibleView._textEditor._mainPanel._textChunks.length;
        WebInspector.panels.scripts.visibleView._textEditor._mainPanel._expandChunks(0, count);
        WebInspector.panels.scripts.visibleView._textEditor._mainPanel._paintScheduledLines();
        timer.finish(showPanelTimerCookie);
        timer.done("first-open");
    }

    InspectorTest.runAfterPendingDispatches(InspectorTest.runPerformanceTest.bind(null, test, 5000));
}

</script>
</head>
<body onload="runTest()">
</body>
</html>

