b6d8c214022999431d9141124fb89bdd0fb8f885
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / inspector / tracing.html
1 <html>
2 <head>
3 <style>
4 div#test {
5     display: none;
6     background-color: blue;
7     width: 100px;
8     height: 100px;
9 }
10 </style>
11 <script src="../http/tests/inspector/inspector-test.js"></script>
12 <script src="../http/tests/inspector/timeline-test.js"></script>
13 <script>
14 function doWork()
15 {
16     var element = document.getElementById("test");
17     element.style.display = "block";
18     var unused = element.clientWidth;
19 }
20
21 function test()
22 {
23     var tracingManager = new WebInspector.TracingManager();
24     var tracingModel = new WebInspector.TracingModel();
25
26     function runEventsSanityCheck()
27     {
28         var events = [];
29         var phaseComplete = 0;
30         var knownEvents = {};
31         var processes = 0;
32         var threads = 0;
33
34         tracingModel.sortedProcesses().forEach(function(process) {
35             processes++;
36             process.sortedThreads().forEach(function(thread) {
37                 threads++;
38                 events = events.concat(thread.events());
39             });
40         });
41
42         knownEvents["MessageLoop::PostTask"] = 0;
43         knownEvents["v8.callFunction"] = 0;
44         knownEvents["Document::updateRenderTree"] = 0;
45         knownEvents["FrameView::layout"] = 0;
46
47         for (var i = 0; i < events.length; ++i) {
48             var event = events[i];
49             if (event.phase === WebInspector.TracingModel.Phase.Complete)
50                 ++phaseComplete;
51             if (event.name in knownEvents)
52                 ++knownEvents[event.name];
53         }
54         InspectorTest.assertGreaterOrEqual(events.length, 100, "Too few trace events recorded");
55         InspectorTest.assertGreaterOrEqual(knownEvents["v8.callFunction"], 1, "Too few v8.callFunction");
56         InspectorTest.assertGreaterOrEqual(knownEvents["Document::updateRenderTree"], 1, "Too few Document::recalcStyle");
57         InspectorTest.assertGreaterOrEqual(knownEvents["FrameView::layout"], 1, "Too few FrameView::layout");
58         InspectorTest.assertGreaterOrEqual(phaseComplete, 50, "Too few begin events");
59         InspectorTest.assertGreaterOrEqual(processes, 2, "Too few processes");
60         InspectorTest.assertGreaterOrEqual(threads, 4, "Too few threads");
61         InspectorTest.addResult("Event sanity test done");
62     }
63
64     function onTracingComplete()
65     {
66         tracingManager.removeEventListener(WebInspector.TracingManager.Events.TracingComplete, onTracingComplete);
67         InspectorTest.addResult("Tracing complete");
68         runEventsSanityCheck();
69         InspectorTest.completeTest();
70     }
71
72     tracingManager.start("", "", onTracingStarted);
73     tracingManager.addEventListener(WebInspector.TracingManager.Events.EventsCollected, onEventsCollected);
74
75     function onTracingStarted(error)
76     {
77         InspectorTest.addResult("Tracing started (error: " + JSON.stringify(error) + ")");
78         tracingModel.reset();
79         InspectorTest.evaluateInPage("doWork()", function() {
80             tracingManager.addEventListener(WebInspector.TracingManager.Events.TracingComplete, onTracingComplete);
81             tracingManager.stop();
82         });
83     }
84
85     function onEventsCollected(event)
86     {
87         tracingModel.addEvents(event.data);
88     }
89 }
90
91 </script>
92 </head>
93 <body onload="runTest()">
94 <div id="test">
95 </div>
96 </body>
97 </html>