2009-11-22 Pavel Feldman <pfeldman@chromium.org>
[WebKit-https.git] / LayoutTests / inspector / timeline-test.js
1 var timelineAgentRecordType = {};
2
3 // Scrub values when printing out these properties in the record or data field.
4 var timelineNonDeterministicProps = { 
5     children : 1,
6     endTime : 1, 
7     height : 1,
8     startTime : 1,
9     width : 1,
10     url : 1
11 };
12
13 function printTimelineRecords(performActions, typeName, formatter)
14 {
15     if (performActions) {
16         if (window.layoutTestController)
17             layoutTestController.setTimelineProfilingEnabled(true);
18         performActions();
19     }
20
21     evaluateInWebInspector("WebInspector.TimelineAgent.RecordType", function(result) {
22         timelineAgentRecordType = result;
23     });
24
25     evaluateInWebInspector("frontend_getTimelineResults", function(timelineRecords) {
26         if (typeof(timelineRecords) === "string")
27             output("Error fetching Timeline results: " + timelineRecords);
28         else {
29             for (var i = 0; i < timelineRecords.length; ++i) {
30                 if (typeName && timelineRecords[i].type === timelineAgentRecordType[typeName])
31                     printTimelineRecordProperties(timelineRecords[i]);
32                 if (formatter)
33                     formatter(timelineRecords[i]);
34             }
35         }
36         if (window.layoutTestController)
37             layoutTestController.setTimelineProfilingEnabled(false);
38         notifyDone();
39     });
40 }
41
42 // Dump just the record name, indenting output on separate lines for subrecords
43 function dumpTimelineRecord(record, level) 
44 {
45     if (typeof level !== "number")
46         level = 0;
47     var prefix = "";
48     var suffix = "";
49     for (var i = 0; i < level ; ++i)
50         prefix = "----" + prefix;
51     if (level > 0)
52         prefix = prefix + "> ";
53     if (record.type === timelineAgentRecordType.MarkTimeline) {
54         suffix = " : " + record.data.message;
55     }
56     output(prefix + timelineAgentTypeToString(record.type) + suffix);
57
58     var numChildren = record.children ? record.children.length : 0;
59     for (var i = 0; i < numChildren; ++i)
60         dumpTimelineRecord(record.children[i], level + 1);
61 }
62
63 function dumpTimelineRecords(timelineRecords) {
64     for (var i = 0; i < timelineRecords.length; ++i)
65         dumpTimelineRecord(timelineRecords[i], 0);
66 }
67
68 function printTimelineRecordProperties(record)
69 {
70     output(timelineAgentTypeToString(record.type) + " Properties:");
71     // Use this recursive routine to print the properties
72     printProps(record, 0);
73 }
74
75 function isNonDeterministicProp(propName)
76 {
77     if (timelineNonDeterministicProps[propName])
78         return true;
79     return false;
80 }
81
82 function printProps(record, level)
83 {
84     var props = new Array();
85     for (var prop in record) {
86         props.push(prop);
87     }
88
89     var prefix = "+";
90     for (var i = 0; i < level ; i++) {
91         prefix = prefix + "-";
92     }
93
94     prefix = prefix + " ";
95     for (var prop in props) {
96         var propName = props[prop];
97         var propValue = record[propName];
98         if (isNonDeterministicProp(propName))
99             output(prefix + propName + " : " + (propValue === undefined ? "<undefined>" : " * DEFINED *"));
100         else if (typeof propValue === "object") {
101             output(prefix + propName + " : {");
102             printProps(propValue, level + 1);
103             output(prefix + "}");
104         } else
105             output(prefix + propName + " : " + propValue);
106     }
107 }
108
109 function timelineAgentTypeToString(numericType)
110 {
111     for (var prop in timelineAgentRecordType) {
112         if (timelineAgentRecordType[prop] === numericType)
113             return prop;
114     }
115     return undefined;
116 }
117
118 // Injected into Inspector window
119 function frontend_getTimelineResults() {
120     var result = [];
121     var records = WebInspector.panels.timeline._records;
122     for (var i = 0; i < records.length; ++i) {
123         result.push(records[i].record);
124     }
125     return result;
126 }