Index: webkit/glue/devtools/js/devtools.js |
=================================================================== |
--- webkit/glue/devtools/js/devtools.js (revision 15955) |
+++ webkit/glue/devtools/js/devtools.js (working copy) |
@@ -713,3 +713,112 @@ |
oldShow.call(this); |
}; |
})(); |
+ |
+ |
+/** |
+ * We don't use WebKit's BottomUpProfileDataGridTree, instead using |
+ * our own (because BottomUpProfileDataGridTree's functionality is |
+ * implemented in profile_view.js for V8's Tick Processor). |
+ * |
+ * @param {WebInspector.ProfileView} profileView Profile view. |
+ * @param {devtools.profiler.ProfileView} profile Profile. |
+ */ |
+WebInspector.BottomUpProfileDataGridTree = function(profileView, profile) { |
+ return WebInspector.buildProfileDataGridTree_( |
+ profileView, profile.heavyProfile); |
+}; |
+ |
+ |
+/** |
+ * We don't use WebKit's TopDownProfileDataGridTree, instead using |
+ * our own (because TopDownProfileDataGridTree's functionality is |
+ * implemented in profile_view.js for V8's Tick Processor). |
+ * |
+ * @param {WebInspector.ProfileView} profileView Profile view. |
+ * @param {devtools.profiler.ProfileView} profile Profile. |
+ */ |
+WebInspector.TopDownProfileDataGridTree = function(profileView, profile) { |
+ return WebInspector.buildProfileDataGridTree_( |
+ profileView, profile.treeProfile); |
+}; |
+ |
+ |
+/** |
+ * A helper function, checks whether a profile node has visible children. |
+ * |
+ * @param {devtools.profiler.ProfileView.Node} profileNode Profile node. |
+ * @return {boolean} Whether a profile node has visible children. |
+ */ |
+WebInspector.nodeHasChildren_ = function(profileNode) { |
+ var children = profileNode.children; |
+ for (var i = 0, n = children.length; i < n; ++i) { |
+ if (children[i].visible) { |
+ return true; |
+ } |
+ } |
+ return false; |
+}; |
+ |
+ |
+/** |
+ * Common code for populating a profiler grid node or a tree with |
+ * given profile nodes. |
+ * |
+ * @param {WebInspector.ProfileDataGridNode| |
+ * WebInspector.ProfileDataGridTree} viewNode Grid node or a tree. |
+ * @param {WebInspector.ProfileView} profileView Profile view. |
+ * @param {Array<devtools.profiler.ProfileView.Node>} children Profile nodes. |
+ * @param {WebInspector.ProfileDataGridTree} owningTree Grid tree. |
+ */ |
+WebInspector.populateNode_ = function( |
+ viewNode, profileView, children, owningTree) { |
+ for (var i = 0, n = children.length; i < n; ++i) { |
+ var child = children[i]; |
+ if (child.visible) { |
+ viewNode.appendChild( |
+ new WebInspector.ProfileDataGridNode( |
+ profileView, child, owningTree, |
+ WebInspector.nodeHasChildren_(child))); |
+ } |
+ } |
+}; |
+ |
+ |
+/** |
+ * A helper function for building a profile grid tree. |
+ * |
+ * @param {WebInspector.ProfileView} profileview Profile view. |
+ * @param {devtools.profiler.ProfileView} profile Profile. |
+ * @return {WebInspector.ProfileDataGridTree} Profile grid tree. |
+ */ |
+WebInspector.buildProfileDataGridTree_ = function(profileView, profile) { |
+ var children = profile.head.children; |
+ var dataGridTree = new WebInspector.ProfileDataGridTree( |
+ profileView, profile.head); |
+ WebInspector.populateNode_(dataGridTree, profileView, children, dataGridTree); |
+ return dataGridTree; |
+}; |
+ |
+ |
+/** |
+ * @override |
+ */ |
+WebInspector.ProfileDataGridNode.prototype._populate = function(event) { |
+ var children = this.profileNode.children; |
+ WebInspector.populateNode_(this, this.profileView, children, this.tree); |
+ this.removeEventListener("populate", this._populate, this); |
+}; |
+ |
+ |
+// As columns in data grid can't be changed after initialization, |
+// we need to intercept the constructor and modify columns upon creation. |
+(function InterceptDataGridForProfiler() { |
+ var originalDataGrid = WebInspector.DataGrid; |
+ WebInspector.DataGrid = function(columns) { |
+ if (('average' in columns) && ('calls' in columns)) { |
+ delete columns['average']; |
+ delete columns['calls']; |
+ } |
+ return new originalDataGrid(columns); |
+ }; |
+})(); |