Index: third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js |
index cd6ce4016ea4d34978b9c341c0b95ebae17d0590..8c700c16549d53eb4acf4fe9c383ae28714d9dc6 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js |
+++ b/third_party/WebKit/Source/devtools/front_end/timeline_model/TimelineProfileTree.js |
@@ -1,14 +1,13 @@ |
// Copyright 2016 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
- |
-WebInspector.TimelineProfileTree = { }; |
+WebInspector.TimelineProfileTree = {}; |
/** |
- * @constructor |
+ * @unrestricted |
*/ |
-WebInspector.TimelineProfileTree.Node = function() |
-{ |
+WebInspector.TimelineProfileTree.Node = class { |
+ constructor() { |
/** @type {number} */ |
this.totalTime; |
/** @type {number} */ |
@@ -22,16 +21,14 @@ WebInspector.TimelineProfileTree.Node = function() |
/** @type {?WebInspector.TimelineProfileTree.Node} */ |
this.parent; |
this._isGroupNode = false; |
-}; |
+ } |
-WebInspector.TimelineProfileTree.Node.prototype = { |
- /** |
- * @return {boolean} |
- */ |
- isGroupNode: function() |
- { |
- return this._isGroupNode; |
- } |
+ /** |
+ * @return {boolean} |
+ */ |
+ isGroupNode() { |
+ return this._isGroupNode; |
+ } |
}; |
/** |
@@ -42,64 +39,61 @@ WebInspector.TimelineProfileTree.Node.prototype = { |
* @param {function(!WebInspector.TracingModel.Event):(string|symbol)=} eventIdCallback |
* @return {!WebInspector.TimelineProfileTree.Node} |
*/ |
-WebInspector.TimelineProfileTree.buildTopDown = function(events, filters, startTime, endTime, eventIdCallback) |
-{ |
- // Temporarily deposit a big enough value that exceeds the max recording time. |
- var /** @const */ initialTime = 1e7; |
- var root = new WebInspector.TimelineProfileTree.Node(); |
- root.totalTime = initialTime; |
- root.selfTime = initialTime; |
- root.children = /** @type {!Map<string, !WebInspector.TimelineProfileTree.Node>} */ (new Map()); |
- var parent = root; |
+WebInspector.TimelineProfileTree.buildTopDown = function(events, filters, startTime, endTime, eventIdCallback) { |
+ // Temporarily deposit a big enough value that exceeds the max recording time. |
+ var /** @const */ initialTime = 1e7; |
+ var root = new WebInspector.TimelineProfileTree.Node(); |
+ root.totalTime = initialTime; |
+ root.selfTime = initialTime; |
+ root.children = /** @type {!Map<string, !WebInspector.TimelineProfileTree.Node>} */ (new Map()); |
+ var parent = root; |
- /** |
- * @param {!WebInspector.TracingModel.Event} e |
- */ |
- function onStartEvent(e) |
- { |
- if (!WebInspector.TimelineModel.isVisible(filters, e)) |
- return; |
- var time = e.endTime ? Math.min(endTime, e.endTime) - Math.max(startTime, e.startTime) : 0; |
- var id = eventIdCallback ? eventIdCallback(e) : Symbol("uniqueEventId"); |
- if (!parent.children) |
- parent.children = /** @type {!Map<string,!WebInspector.TimelineProfileTree.Node>} */ (new Map()); |
- var node = parent.children.get(id); |
- if (node) { |
- node.selfTime += time; |
- node.totalTime += time; |
- } else { |
- node = new WebInspector.TimelineProfileTree.Node(); |
- node.totalTime = time; |
- node.selfTime = time; |
- node.parent = parent; |
- node.id = id; |
- node.event = e; |
- parent.children.set(id, node); |
- } |
- parent.selfTime -= time; |
- if (parent.selfTime < 0) { |
- console.log("Error: Negative self of " + parent.selfTime, e); |
- parent.selfTime = 0; |
- } |
- if (e.endTime) |
- parent = node; |
+ /** |
+ * @param {!WebInspector.TracingModel.Event} e |
+ */ |
+ function onStartEvent(e) { |
+ if (!WebInspector.TimelineModel.isVisible(filters, e)) |
+ return; |
+ var time = e.endTime ? Math.min(endTime, e.endTime) - Math.max(startTime, e.startTime) : 0; |
+ var id = eventIdCallback ? eventIdCallback(e) : Symbol('uniqueEventId'); |
+ if (!parent.children) |
+ parent.children = /** @type {!Map<string,!WebInspector.TimelineProfileTree.Node>} */ (new Map()); |
+ var node = parent.children.get(id); |
+ if (node) { |
+ node.selfTime += time; |
+ node.totalTime += time; |
+ } else { |
+ node = new WebInspector.TimelineProfileTree.Node(); |
+ node.totalTime = time; |
+ node.selfTime = time; |
+ node.parent = parent; |
+ node.id = id; |
+ node.event = e; |
+ parent.children.set(id, node); |
} |
- |
- /** |
- * @param {!WebInspector.TracingModel.Event} e |
- */ |
- function onEndEvent(e) |
- { |
- if (!WebInspector.TimelineModel.isVisible(filters, e)) |
- return; |
- parent = parent.parent; |
+ parent.selfTime -= time; |
+ if (parent.selfTime < 0) { |
+ console.log('Error: Negative self of ' + parent.selfTime, e); |
+ parent.selfTime = 0; |
} |
+ if (e.endTime) |
+ parent = node; |
+ } |
- var instantEventCallback = eventIdCallback ? undefined : onStartEvent; // Ignore instant events when aggregating. |
- WebInspector.TimelineModel.forEachEvent(events, onStartEvent, onEndEvent, instantEventCallback, startTime, endTime); |
- root.totalTime -= root.selfTime; |
- root.selfTime = 0; |
- return root; |
+ /** |
+ * @param {!WebInspector.TracingModel.Event} e |
+ */ |
+ function onEndEvent(e) { |
+ if (!WebInspector.TimelineModel.isVisible(filters, e)) |
+ return; |
+ parent = parent.parent; |
+ } |
+ |
+ var instantEventCallback = eventIdCallback ? undefined : onStartEvent; // Ignore instant events when aggregating. |
+ WebInspector.TimelineModel.forEachEvent(events, onStartEvent, onEndEvent, instantEventCallback, startTime, endTime); |
+ root.totalTime -= root.selfTime; |
+ root.selfTime = 0; |
+ return root; |
}; |
/** |
@@ -107,273 +101,270 @@ WebInspector.TimelineProfileTree.buildTopDown = function(events, filters, startT |
* @param {?function(!WebInspector.TimelineProfileTree.Node):!WebInspector.TimelineProfileTree.Node=} groupingCallback |
* @return {!WebInspector.TimelineProfileTree.Node} |
*/ |
-WebInspector.TimelineProfileTree.buildBottomUp = function(topDownTree, groupingCallback) |
-{ |
- var buRoot = new WebInspector.TimelineProfileTree.Node(); |
- buRoot.selfTime = 0; |
- buRoot.totalTime = 0; |
- /** @type {!Map<string, !WebInspector.TimelineProfileTree.Node>} */ |
- buRoot.children = new Map(); |
- var nodesOnStack = /** @type {!Set<string>} */ (new Set()); |
- if (topDownTree.children) |
- topDownTree.children.forEach(processNode); |
- buRoot.totalTime = topDownTree.totalTime; |
+WebInspector.TimelineProfileTree.buildBottomUp = function(topDownTree, groupingCallback) { |
+ var buRoot = new WebInspector.TimelineProfileTree.Node(); |
+ buRoot.selfTime = 0; |
+ buRoot.totalTime = 0; |
+ /** @type {!Map<string, !WebInspector.TimelineProfileTree.Node>} */ |
+ buRoot.children = new Map(); |
+ var nodesOnStack = /** @type {!Set<string>} */ (new Set()); |
+ if (topDownTree.children) |
+ topDownTree.children.forEach(processNode); |
+ buRoot.totalTime = topDownTree.totalTime; |
- /** |
- * @param {!WebInspector.TimelineProfileTree.Node} tdNode |
- */ |
- function processNode(tdNode) |
- { |
- var buParent = groupingCallback && groupingCallback(tdNode) || buRoot; |
- if (buParent !== buRoot) { |
- buRoot.children.set(buParent.id, buParent); |
- buParent.parent = buRoot; |
- } |
- appendNode(tdNode, buParent); |
- var hadNode = nodesOnStack.has(tdNode.id); |
- if (!hadNode) |
- nodesOnStack.add(tdNode.id); |
- if (tdNode.children) |
- tdNode.children.forEach(processNode); |
- if (!hadNode) |
- nodesOnStack.delete(tdNode.id); |
+ /** |
+ * @param {!WebInspector.TimelineProfileTree.Node} tdNode |
+ */ |
+ function processNode(tdNode) { |
+ var buParent = groupingCallback && groupingCallback(tdNode) || buRoot; |
+ if (buParent !== buRoot) { |
+ buRoot.children.set(buParent.id, buParent); |
+ buParent.parent = buRoot; |
} |
+ appendNode(tdNode, buParent); |
+ var hadNode = nodesOnStack.has(tdNode.id); |
+ if (!hadNode) |
+ nodesOnStack.add(tdNode.id); |
+ if (tdNode.children) |
+ tdNode.children.forEach(processNode); |
+ if (!hadNode) |
+ nodesOnStack.delete(tdNode.id); |
+ } |
- /** |
- * @param {!WebInspector.TimelineProfileTree.Node} tdNode |
- * @param {!WebInspector.TimelineProfileTree.Node} buParent |
- */ |
- function appendNode(tdNode, buParent) |
- { |
- var selfTime = tdNode.selfTime; |
- var totalTime = tdNode.totalTime; |
- buParent.selfTime += selfTime; |
- buParent.totalTime += selfTime; |
- while (tdNode.parent) { |
- if (!buParent.children) |
- buParent.children = /** @type {!Map<string,!WebInspector.TimelineProfileTree.Node>} */ (new Map()); |
- var id = tdNode.id; |
- var buNode = buParent.children.get(id); |
- if (!buNode) { |
- buNode = new WebInspector.TimelineProfileTree.Node(); |
- buNode.selfTime = selfTime; |
- buNode.totalTime = totalTime; |
- buNode.event = tdNode.event; |
- buNode.id = id; |
- buNode.parent = buParent; |
- buParent.children.set(id, buNode); |
- } else { |
- buNode.selfTime += selfTime; |
- if (!nodesOnStack.has(id)) |
- buNode.totalTime += totalTime; |
- } |
- tdNode = tdNode.parent; |
- buParent = buNode; |
- } |
+ /** |
+ * @param {!WebInspector.TimelineProfileTree.Node} tdNode |
+ * @param {!WebInspector.TimelineProfileTree.Node} buParent |
+ */ |
+ function appendNode(tdNode, buParent) { |
+ var selfTime = tdNode.selfTime; |
+ var totalTime = tdNode.totalTime; |
+ buParent.selfTime += selfTime; |
+ buParent.totalTime += selfTime; |
+ while (tdNode.parent) { |
+ if (!buParent.children) |
+ buParent.children = /** @type {!Map<string,!WebInspector.TimelineProfileTree.Node>} */ (new Map()); |
+ var id = tdNode.id; |
+ var buNode = buParent.children.get(id); |
+ if (!buNode) { |
+ buNode = new WebInspector.TimelineProfileTree.Node(); |
+ buNode.selfTime = selfTime; |
+ buNode.totalTime = totalTime; |
+ buNode.event = tdNode.event; |
+ buNode.id = id; |
+ buNode.parent = buParent; |
+ buParent.children.set(id, buNode); |
+ } else { |
+ buNode.selfTime += selfTime; |
+ if (!nodesOnStack.has(id)) |
+ buNode.totalTime += totalTime; |
+ } |
+ tdNode = tdNode.parent; |
+ buParent = buNode; |
} |
+ } |
- // Purge zero self time nodes. |
- var rootChildren = buRoot.children; |
- for (var item of rootChildren.entries()) { |
- if (item[1].selfTime === 0) |
- rootChildren.delete(/** @type {string} */(item[0])); |
- } |
+ // Purge zero self time nodes. |
+ var rootChildren = buRoot.children; |
+ for (var item of rootChildren.entries()) { |
+ if (item[1].selfTime === 0) |
+ rootChildren.delete(/** @type {string} */ (item[0])); |
+ } |
- return buRoot; |
+ return buRoot; |
}; |
/** |
* @param {!WebInspector.TracingModel.Event} event |
* @return {?string} |
*/ |
-WebInspector.TimelineProfileTree.eventURL = function(event) |
-{ |
- var data = event.args["data"] || event.args["beginData"]; |
- if (data && data["url"]) |
- return data["url"]; |
- var frame = WebInspector.TimelineProfileTree.eventStackFrame(event); |
- while (frame) { |
- var url = frame["url"]; |
- if (url) |
- return url; |
- frame = frame.parent; |
- } |
- return null; |
+WebInspector.TimelineProfileTree.eventURL = function(event) { |
+ var data = event.args['data'] || event.args['beginData']; |
+ if (data && data['url']) |
+ return data['url']; |
+ var frame = WebInspector.TimelineProfileTree.eventStackFrame(event); |
+ while (frame) { |
+ var url = frame['url']; |
+ if (url) |
+ return url; |
+ frame = frame.parent; |
+ } |
+ return null; |
}; |
/** |
* @param {!WebInspector.TracingModel.Event} event |
* @return {?RuntimeAgent.CallFrame} |
*/ |
-WebInspector.TimelineProfileTree.eventStackFrame = function(event) |
-{ |
- if (event.name === WebInspector.TimelineModel.RecordType.JSFrame) |
- return /** @type {?RuntimeAgent.CallFrame} */ (event.args["data"] || null); |
- var topFrame = event.stackTrace && event.stackTrace[0]; |
- if (topFrame) |
- return /** @type {!RuntimeAgent.CallFrame} */ (topFrame); |
- var initiator = event.initiator; |
- return /** @type {?RuntimeAgent.CallFrame} */ (initiator && initiator.stackTrace && initiator.stackTrace[0] || null); |
+WebInspector.TimelineProfileTree.eventStackFrame = function(event) { |
+ if (event.name === WebInspector.TimelineModel.RecordType.JSFrame) |
+ return /** @type {?RuntimeAgent.CallFrame} */ (event.args['data'] || null); |
+ var topFrame = event.stackTrace && event.stackTrace[0]; |
+ if (topFrame) |
+ return /** @type {!RuntimeAgent.CallFrame} */ (topFrame); |
+ var initiator = event.initiator; |
+ return /** @type {?RuntimeAgent.CallFrame} */ (initiator && initiator.stackTrace && initiator.stackTrace[0] || null); |
}; |
/** |
- * @constructor |
- * @param {function(!WebInspector.TracingModel.Event):string} titleMapper |
- * @param {function(!WebInspector.TracingModel.Event):string} categoryMapper |
+ * @unrestricted |
*/ |
-WebInspector.TimelineAggregator = function(titleMapper, categoryMapper) |
-{ |
+WebInspector.TimelineAggregator = class { |
+ /** |
+ * @param {function(!WebInspector.TracingModel.Event):string} titleMapper |
+ * @param {function(!WebInspector.TracingModel.Event):string} categoryMapper |
+ */ |
+ constructor(titleMapper, categoryMapper) { |
this._titleMapper = titleMapper; |
this._categoryMapper = categoryMapper; |
/** @type {!Map<string, !WebInspector.TimelineProfileTree.Node>} */ |
this._groupNodes = new Map(); |
-}; |
- |
-/** |
- * @enum {string} |
- */ |
-WebInspector.TimelineAggregator.GroupBy = { |
- None: "None", |
- EventName: "EventName", |
- Category: "Category", |
- Domain: "Domain", |
- Subdomain: "Subdomain", |
- URL: "URL" |
-}; |
+ } |
-/** |
- * @param {!WebInspector.TracingModel.Event} event |
- * @return {string} |
- */ |
-WebInspector.TimelineAggregator.eventId = function(event) |
-{ |
+ /** |
+ * @param {!WebInspector.TracingModel.Event} event |
+ * @return {string} |
+ */ |
+ static eventId(event) { |
if (event.name === WebInspector.TimelineModel.RecordType.JSFrame) { |
- var data = event.args["data"]; |
- return "f:" + data["functionName"] + "@" + (data["scriptId"] || data["url"] || ""); |
+ var data = event.args['data']; |
+ return 'f:' + data['functionName'] + '@' + (data['scriptId'] || data['url'] || ''); |
} |
- return event.name + ":@" + WebInspector.TimelineProfileTree.eventURL(event); |
-}; |
- |
-WebInspector.TimelineAggregator._extensionInternalPrefix = "extensions::"; |
-WebInspector.TimelineAggregator._groupNodeFlag = Symbol("groupNode"); |
+ return event.name + ':@' + WebInspector.TimelineProfileTree.eventURL(event); |
+ } |
-/** |
- * @param {string} url |
- * @return {boolean} |
- */ |
-WebInspector.TimelineAggregator.isExtensionInternalURL = function(url) |
-{ |
+ /** |
+ * @param {string} url |
+ * @return {boolean} |
+ */ |
+ static isExtensionInternalURL(url) { |
return url.startsWith(WebInspector.TimelineAggregator._extensionInternalPrefix); |
-}; |
+ } |
-WebInspector.TimelineAggregator.prototype = { |
- /** |
- * @param {!WebInspector.TimelineAggregator.GroupBy} groupBy |
- * @return {?function(!WebInspector.TimelineProfileTree.Node):!WebInspector.TimelineProfileTree.Node} |
- */ |
- groupFunction: function(groupBy) |
- { |
- var idMapper = this._nodeToGroupIdFunction(groupBy); |
- return idMapper && this._nodeToGroupNode.bind(this, idMapper); |
- }, |
+ /** |
+ * @param {!WebInspector.TimelineAggregator.GroupBy} groupBy |
+ * @return {?function(!WebInspector.TimelineProfileTree.Node):!WebInspector.TimelineProfileTree.Node} |
+ */ |
+ groupFunction(groupBy) { |
+ var idMapper = this._nodeToGroupIdFunction(groupBy); |
+ return idMapper && this._nodeToGroupNode.bind(this, idMapper); |
+ } |
+ /** |
+ * @param {!WebInspector.TimelineProfileTree.Node} root |
+ * @param {!WebInspector.TimelineAggregator.GroupBy} groupBy |
+ * @return {!WebInspector.TimelineProfileTree.Node} |
+ */ |
+ performGrouping(root, groupBy) { |
+ var nodeMapper = this.groupFunction(groupBy); |
+ if (!nodeMapper) |
+ return root; |
+ for (var node of root.children.values()) { |
+ var groupNode = nodeMapper(node); |
+ groupNode.parent = root; |
+ groupNode.selfTime += node.selfTime; |
+ groupNode.totalTime += node.totalTime; |
+ groupNode.children.set(node.id, node); |
+ node.parent = root; |
+ } |
+ root.children = this._groupNodes; |
+ return root; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.TimelineAggregator.GroupBy} groupBy |
+ * @return {?function(!WebInspector.TimelineProfileTree.Node):string} |
+ */ |
+ _nodeToGroupIdFunction(groupBy) { |
/** |
- * @param {!WebInspector.TimelineProfileTree.Node} root |
- * @param {!WebInspector.TimelineAggregator.GroupBy} groupBy |
- * @return {!WebInspector.TimelineProfileTree.Node} |
+ * @param {!WebInspector.TimelineProfileTree.Node} node |
+ * @return {string} |
*/ |
- performGrouping: function(root, groupBy) |
- { |
- var nodeMapper = this.groupFunction(groupBy); |
- if (!nodeMapper) |
- return root; |
- for (var node of root.children.values()) { |
- var groupNode = nodeMapper(node); |
- groupNode.parent = root; |
- groupNode.selfTime += node.selfTime; |
- groupNode.totalTime += node.totalTime; |
- groupNode.children.set(node.id, node); |
- node.parent = root; |
- } |
- root.children = this._groupNodes; |
- return root; |
- }, |
+ function groupByURL(node) { |
+ return WebInspector.TimelineProfileTree.eventURL(node.event) || ''; |
+ } |
/** |
- * @param {!WebInspector.TimelineAggregator.GroupBy} groupBy |
- * @return {?function(!WebInspector.TimelineProfileTree.Node):string} |
+ * @param {boolean} groupSubdomains |
+ * @param {!WebInspector.TimelineProfileTree.Node} node |
+ * @return {string} |
*/ |
- _nodeToGroupIdFunction: function(groupBy) |
- { |
- /** |
- * @param {!WebInspector.TimelineProfileTree.Node} node |
- * @return {string} |
- */ |
- function groupByURL(node) |
- { |
- return WebInspector.TimelineProfileTree.eventURL(node.event) || ""; |
- } |
+ function groupByDomain(groupSubdomains, node) { |
+ var url = WebInspector.TimelineProfileTree.eventURL(node.event) || ''; |
+ if (WebInspector.TimelineAggregator.isExtensionInternalURL(url)) |
+ return WebInspector.TimelineAggregator._extensionInternalPrefix; |
+ var parsedURL = url.asParsedURL(); |
+ if (!parsedURL) |
+ return ''; |
+ if (parsedURL.scheme === 'chrome-extension') |
+ return parsedURL.scheme + '://' + parsedURL.host; |
+ if (!groupSubdomains) |
+ return parsedURL.host; |
+ if (/^[.0-9]+$/.test(parsedURL.host)) |
+ return parsedURL.host; |
+ var domainMatch = /([^.]*\.)?[^.]*$/.exec(parsedURL.host); |
+ return domainMatch && domainMatch[0] || ''; |
+ } |
- /** |
- * @param {boolean} groupSubdomains |
- * @param {!WebInspector.TimelineProfileTree.Node} node |
- * @return {string} |
- */ |
- function groupByDomain(groupSubdomains, node) |
- { |
- var url = WebInspector.TimelineProfileTree.eventURL(node.event) || ""; |
- if (WebInspector.TimelineAggregator.isExtensionInternalURL(url)) |
- return WebInspector.TimelineAggregator._extensionInternalPrefix; |
- var parsedURL = url.asParsedURL(); |
- if (!parsedURL) |
- return ""; |
- if (parsedURL.scheme === "chrome-extension") |
- return parsedURL.scheme + "://" + parsedURL.host; |
- if (!groupSubdomains) |
- return parsedURL.host; |
- if (/^[.0-9]+$/.test(parsedURL.host)) |
- return parsedURL.host; |
- var domainMatch = /([^.]*\.)?[^.]*$/.exec(parsedURL.host); |
- return domainMatch && domainMatch[0] || ""; |
- } |
+ switch (groupBy) { |
+ case WebInspector.TimelineAggregator.GroupBy.None: |
+ return null; |
+ case WebInspector.TimelineAggregator.GroupBy.EventName: |
+ return node => node.event ? this._titleMapper(node.event) : ''; |
+ case WebInspector.TimelineAggregator.GroupBy.Category: |
+ return node => node.event ? this._categoryMapper(node.event) : ''; |
+ case WebInspector.TimelineAggregator.GroupBy.Subdomain: |
+ return groupByDomain.bind(null, false); |
+ case WebInspector.TimelineAggregator.GroupBy.Domain: |
+ return groupByDomain.bind(null, true); |
+ case WebInspector.TimelineAggregator.GroupBy.URL: |
+ return groupByURL; |
+ default: |
+ return null; |
+ } |
+ } |
- switch (groupBy) { |
- case WebInspector.TimelineAggregator.GroupBy.None: return null; |
- case WebInspector.TimelineAggregator.GroupBy.EventName: return node => node.event ? this._titleMapper(node.event) : ""; |
- case WebInspector.TimelineAggregator.GroupBy.Category: return node => node.event ? this._categoryMapper(node.event) : ""; |
- case WebInspector.TimelineAggregator.GroupBy.Subdomain: return groupByDomain.bind(null, false); |
- case WebInspector.TimelineAggregator.GroupBy.Domain: return groupByDomain.bind(null, true); |
- case WebInspector.TimelineAggregator.GroupBy.URL: return groupByURL; |
- default: return null; |
- } |
- }, |
+ /** |
+ * @param {string} id |
+ * @param {!WebInspector.TracingModel.Event} event |
+ * @return {!WebInspector.TimelineProfileTree.Node} |
+ */ |
+ _buildGroupNode(id, event) { |
+ var groupNode = new WebInspector.TimelineProfileTree.Node(); |
+ groupNode.id = id; |
+ groupNode.selfTime = 0; |
+ groupNode.totalTime = 0; |
+ groupNode.children = new Map(); |
+ groupNode.event = event; |
+ groupNode._isGroupNode = true; |
+ this._groupNodes.set(id, groupNode); |
+ return groupNode; |
+ } |
- /** |
- * @param {string} id |
- * @param {!WebInspector.TracingModel.Event} event |
- * @return {!WebInspector.TimelineProfileTree.Node} |
- */ |
- _buildGroupNode: function(id, event) |
- { |
- var groupNode = new WebInspector.TimelineProfileTree.Node(); |
- groupNode.id = id; |
- groupNode.selfTime = 0; |
- groupNode.totalTime = 0; |
- groupNode.children = new Map(); |
- groupNode.event = event; |
- groupNode._isGroupNode = true; |
- this._groupNodes.set(id, groupNode); |
- return groupNode; |
- }, |
+ /** |
+ * @param {function(!WebInspector.TimelineProfileTree.Node):string} nodeToGroupId |
+ * @param {!WebInspector.TimelineProfileTree.Node} node |
+ * @return {!WebInspector.TimelineProfileTree.Node} |
+ */ |
+ _nodeToGroupNode(nodeToGroupId, node) { |
+ var id = nodeToGroupId(node); |
+ return this._groupNodes.get(id) || this._buildGroupNode(id, node.event); |
+ } |
+}; |
- /** |
- * @param {function(!WebInspector.TimelineProfileTree.Node):string} nodeToGroupId |
- * @param {!WebInspector.TimelineProfileTree.Node} node |
- * @return {!WebInspector.TimelineProfileTree.Node} |
- */ |
- _nodeToGroupNode: function(nodeToGroupId, node) |
- { |
- var id = nodeToGroupId(node); |
- return this._groupNodes.get(id) || this._buildGroupNode(id, node.event); |
- }, |
+/** |
+ * @enum {string} |
+ */ |
+WebInspector.TimelineAggregator.GroupBy = { |
+ None: 'None', |
+ EventName: 'EventName', |
+ Category: 'Category', |
+ Domain: 'Domain', |
+ Subdomain: 'Subdomain', |
+ URL: 'URL' |
}; |
+ |
+ |
+WebInspector.TimelineAggregator._extensionInternalPrefix = 'extensions::'; |
+WebInspector.TimelineAggregator._groupNodeFlag = Symbol('groupNode'); |
+ |
+ |