15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)function test()
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    WebInspector.showPanel("profiles");
4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_buildEdgeIndexes");
5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_buildRetainers");
6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_buildDominatedNodes");
7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_calculateFlags");
8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_buildAggregates");
9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_calculateClassesRetainedSize");
10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_calculateDistances");
11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_calculateRetainedSizes");
12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_markDetachedDOMTreeNodes");
13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_markQueriableHeapObjects");
14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_markPageOwnedNodes");
15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_splitNodesAndContainmentEdges");
16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_buildPostOrderIndex");
17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    InspectorTest.measureFunction(WebInspector.JSHeapSnapshot.prototype, "_buildDominatorTree");
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorTest.measureFunction(WebInspector.HeapSnapshotConstructorsDataGrid.prototype, "_aggregatesReceived");
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    function performanceTest(timer)
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    {
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var transferTimerCookie;
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var showTimerCookie;
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var changeViewTimerCookie;
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var clearTimerCookie;
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var testName = /([^\/]+)\.html$/.exec(WebInspector.inspectedPageURL)[1];
285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var fullTimerCookie = timer.start("full-summary-snapshot-time");
29591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        var type = WebInspector.panels.profiles.getProfileType("HEAP");
30591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        var backendTimerCookie = timer.start("take-snapshot");
32591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch        type._takeHeapSnapshot(step0);
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function step0()
355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            timer.finish(backendTimerCookie);
375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            transferTimerCookie = timer.start("transfer-snapshot");
38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            var profiles = type.getProfiles();
391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)            InspectorTest.addSniffer(profiles[0]._transferHandler, "_updateProgress", onUpdateProgress, true);
40591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            InspectorTest.addSniffer(profiles[0], "_wasShown", step2);
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
431e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)        function onUpdateProgress(saved, total)
445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
45591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch            if (saved !== total)
46591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch                return;
475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            timer.finish(transferTimerCookie);
485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            showTimerCookie = timer.start("show-snapshot");
495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function step2()
525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            timer.finish(showTimerCookie);
545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            changeViewTimerCookie = timer.start("switch-to-containment-view");
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            InspectorTest.switchToView("Containment", cleanup);
565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function cleanup()
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            timer.finish(changeViewTimerCookie);
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            timer.finish(fullTimerCookie);
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            clearTimerCookie = timer.start("clear-snapshot");
63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)            HeapProfilerAgent.clearProfiles(done);
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            WebInspector.panels.profiles._reset();
655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        function done()
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        {
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            timer.finish(clearTimerCookie);
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)            timer.done(testName);
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)        }
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    }
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    InspectorTest.runPerformanceTest(performanceTest, 60000);
755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
76