Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(62)

Side by Side Diff: tools/profile_view.js

Issue 115300: Merge into tools/profile_view.js changes needed for DevTools profiler. (Closed)
Patch Set: Created 11 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2009 the V8 project authors. All rights reserved. 1 // Copyright 2009 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 28 matching lines...) Expand all
39 */ 39 */
40 devtools.profiler.ViewBuilder = function(samplingRate) { 40 devtools.profiler.ViewBuilder = function(samplingRate) {
41 this.samplingRate = samplingRate; 41 this.samplingRate = samplingRate;
42 }; 42 };
43 43
44 44
45 /** 45 /**
46 * Builds a profile view for the specified call tree. 46 * Builds a profile view for the specified call tree.
47 * 47 *
48 * @param {devtools.profiler.CallTree} callTree A call tree. 48 * @param {devtools.profiler.CallTree} callTree A call tree.
49 * @param {boolean} opt_bottomUpViewWeights Whether remapping
50 * of self weights for a bottom up view is needed.
49 */ 51 */
50 devtools.profiler.ViewBuilder.prototype.buildView = function( 52 devtools.profiler.ViewBuilder.prototype.buildView = function(
51 callTree) { 53 callTree, opt_bottomUpViewWeights) {
52 var head; 54 var head;
53 var samplingRate = this.samplingRate; 55 var samplingRate = this.samplingRate;
54 callTree.traverse(function(node, viewParent) { 56 callTree.traverse(function(node, viewParent) {
57 var totalWeight = node.totalWeight * samplingRate;
58 var selfWeight = node.selfWeight * samplingRate;
59 if (opt_bottomUpViewWeights === true) {
60 if (viewParent === head) {
61 selfWeight = totalWeight;
62 } else {
63 selfWeight = 0;
64 }
65 }
55 var viewNode = new devtools.profiler.ProfileView.Node( 66 var viewNode = new devtools.profiler.ProfileView.Node(
56 node.label, node.totalWeight * samplingRate, 67 node.label, totalWeight, selfWeight, head);
57 node.selfWeight * samplingRate, head);
58 if (viewParent) { 68 if (viewParent) {
59 viewParent.addChild(viewNode); 69 viewParent.addChild(viewNode);
60 } else { 70 } else {
61 head = viewNode; 71 head = viewNode;
62 } 72 }
63 return viewNode; 73 return viewNode;
64 }); 74 });
65 var view = new devtools.profiler.ProfileView(head); 75 var view = new devtools.profiler.ProfileView(head);
66 return view; 76 return view;
67 }; 77 };
(...skipping 11 matching lines...) Expand all
79 this.head = head; 89 this.head = head;
80 this.title = ''; 90 this.title = '';
81 this.uid = ''; 91 this.uid = '';
82 this.heavyProfile = null; 92 this.heavyProfile = null;
83 this.treeProfile = null; 93 this.treeProfile = null;
84 this.flatProfile = null; 94 this.flatProfile = null;
85 }; 95 };
86 96
87 97
88 /** 98 /**
89 * Updates references between profiles. This is needed for WebKit
90 * ProfileView.
91 */
92 devtools.profiler.ProfileView.prototype.updateProfilesRefs = function() {
93 var profileNames = ["treeProfile", "heavyProfile", "flatProfile"];
94 for (var i = 0; i < profileNames.length; ++i) {
95 var destProfile = this[profileNames[i]];
96 for (var j = 0; j < profileNames.length; ++j) {
97 destProfile[profileNames[j]] = this[profileNames[j]];
98 }
99 }
100 };
101
102
103 /**
104 * Sorts the profile view using the specified sort function. 99 * Sorts the profile view using the specified sort function.
105 * 100 *
106 * @param {function(devtools.profiler.ProfileView.Node, 101 * @param {function(devtools.profiler.ProfileView.Node,
107 * devtools.profiler.ProfileView.Node):number} sortFunc A sorting 102 * devtools.profiler.ProfileView.Node):number} sortFunc A sorting
108 * functions. Must comply with Array.sort sorting function requirements. 103 * functions. Must comply with Array.sort sorting function requirements.
109 */ 104 */
110 devtools.profiler.ProfileView.prototype.sort = function(sortFunc) { 105 devtools.profiler.ProfileView.prototype.sort = function(sortFunc) {
111 this.traverse(function (node) { 106 this.traverse(function (node) {
112 node.sortChildren(sortFunc); 107 node.sortChildren(sortFunc);
113 }); 108 });
114 }; 109 };
115 110
116 111
117 /** 112 /**
118 * Sorts the profile view by self time, ascending.
119 */
120 devtools.profiler.ProfileView.prototype.sortSelfTimeAscending = function() {
121 this.sort(function (node1, node2) {
122 return node1.selfTime - node2.selfTime; });
123 };
124
125
126 /**
127 * Sorts the profile view by self time, descending.
128 */
129 devtools.profiler.ProfileView.prototype.sortSelfTimeDescending = function() {
130 this.sort(function (node1, node2) {
131 return node2.selfTime - node1.selfTime; });
132 };
133
134
135 /**
136 * Sorts the profile view by total time, ascending.
137 */
138 devtools.profiler.ProfileView.prototype.sortTotalTimeAscending = function() {
139 this.sort(function (node1, node2) {
140 return node1.totalTime - node2.totalTime; });
141 };
142
143
144 /**
145 * Sorts the profile view by total time, descending.
146 */
147 devtools.profiler.ProfileView.prototype.sortTotalTimeDescending = function() {
148 this.sort(function (node1, node2) {
149 return node2.totalTime - node1.totalTime; });
150 };
151
152
153 /**
154 * String comparator compatible with Array.sort requirements.
155 *
156 * @param {string} s1 First string.
157 * @param {string} s2 Second string.
158 */
159 devtools.profiler.ProfileView.compareStrings = function(s1, s2) {
160 return s1 < s2 ? -1 : (s1 > s2 ? 1 : 0);
161 };
162
163
164 /**
165 * Sorts the profile view by function name, ascending.
166 */
167 devtools.profiler.ProfileView.prototype.sortFunctionNameAscending = function() {
168 this.sort(function (node1, node2) {
169 return devtools.profiler.ProfileView.compareStrings(
170 node1.functionName, node2.functionName); });
171 };
172
173
174 /**
175 * Sorts the profile view by function name, descending.
176 */
177 devtools.profiler.ProfileView.prototype.sortFunctionNameDescending = function() {
178 this.sort(function (node1, node2) {
179 return devtools.profiler.ProfileView.compareStrings(
180 node2.functionName, node1.functionName); });
181 };
182
183
184 /**
185 * Traverses profile view nodes in preorder. 113 * Traverses profile view nodes in preorder.
186 * 114 *
187 * @param {function(devtools.profiler.ProfileView.Node)} f Visitor function. 115 * @param {function(devtools.profiler.ProfileView.Node)} f Visitor function.
188 */ 116 */
189 devtools.profiler.ProfileView.prototype.traverse = function(f) { 117 devtools.profiler.ProfileView.prototype.traverse = function(f) {
190 var nodesToTraverse = new ConsArray(); 118 var nodesToTraverse = new ConsArray();
191 nodesToTraverse.concat([this.head]); 119 nodesToTraverse.concat([this.head]);
192 while (!nodesToTraverse.atEnd()) { 120 while (!nodesToTraverse.atEnd()) {
193 var node = nodesToTraverse.next(); 121 var node = nodesToTraverse.next();
194 f(node); 122 f(node);
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
314 * Sorts all the node's children recursively. 242 * Sorts all the node's children recursively.
315 * 243 *
316 * @param {function(devtools.profiler.ProfileView.Node, 244 * @param {function(devtools.profiler.ProfileView.Node,
317 * devtools.profiler.ProfileView.Node):number} sortFunc A sorting 245 * devtools.profiler.ProfileView.Node):number} sortFunc A sorting
318 * functions. Must comply with Array.sort sorting function requirements. 246 * functions. Must comply with Array.sort sorting function requirements.
319 */ 247 */
320 devtools.profiler.ProfileView.Node.prototype.sortChildren = function( 248 devtools.profiler.ProfileView.Node.prototype.sortChildren = function(
321 sortFunc) { 249 sortFunc) {
322 this.children.sort(sortFunc); 250 this.children.sort(sortFunc);
323 }; 251 };
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698