Index: Source/devtools/front_end/timeline/TimelineUIUtils.js |
diff --git a/Source/devtools/front_end/timeline/TimelineUIUtils.js b/Source/devtools/front_end/timeline/TimelineUIUtils.js |
index 85957601719ab8b18fe1c48e34bee40cff36e8bd..3edc3947f912653536a151cfd517e860eef24ff5 100644 |
--- a/Source/devtools/front_end/timeline/TimelineUIUtils.js |
+++ b/Source/devtools/front_end/timeline/TimelineUIUtils.js |
@@ -739,9 +739,9 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
for (var index = 0; index < invalidations.length; index++) { |
var invalidation = invalidations[index]; |
var causeKey = ""; |
- if (invalidation.cause && invalidation.cause.reason) |
+ if (invalidation.cause.reason) |
causeKey += invalidation.cause.reason + "."; |
- if (invalidation.cause && invalidation.cause.stackTrace) { |
+ if (invalidation.cause.stackTrace) { |
invalidation.cause.stackTrace.forEach(function(stackFrame) { |
causeKey += stackFrame["functionName"] + "."; |
causeKey += stackFrame["scriptId"] + "."; |
@@ -772,8 +772,8 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
}); |
var first = invalidations[0]; |
- var reason = first.cause && first.cause.reason; |
- var topFrame = first.cause && first.cause.stackTrace && first.cause.stackTrace[0]; |
+ var reason = first.cause.reason; |
+ var topFrame = first.cause.stackTrace && first.cause.stackTrace[0]; |
if (reason) |
header.createTextChild(WebInspector.UIString("%s for ", reason)); |
@@ -816,11 +816,15 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
function appendTruncatedNodeList(parentElement, invalidations) |
{ |
var invalidationNodes = []; |
- invalidations.forEach(function(invalidation) { |
+ var invalidationNodeIdMap = {}; |
+ for (var i = 0; i < invalidations.length; i++) { |
+ var invalidation = invalidations[i]; |
var invalidationNode = createInvalidationNode(invalidation, false); |
- if (invalidationNode) |
+ if (invalidationNode && !invalidationNodeIdMap[invalidation.nodeId]) { |
invalidationNodes.push(invalidationNode); |
- }); |
+ invalidationNodeIdMap[invalidation.nodeId] = true; |
+ } |
+ } |
if (invalidationNodes.length === 1) { |
parentElement.appendChild(invalidationNodes[0]); |
@@ -837,24 +841,6 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
} |
/** |
- * @param {!Element} parentElement |
- * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
- */ |
- function appendNodeList(parentElement, invalidations) |
- { |
- var firstNode = true; |
- invalidations.forEach(function(invalidation) { |
- var invalidationNode = createInvalidationNode(invalidation, true); |
- if (invalidationNode) { |
- if (!firstNode) |
- parentElement.createTextChild(WebInspector.UIString(", ")); |
- parentElement.appendChild(invalidationNode); |
- firstNode = false; |
- } |
- }); |
- } |
- |
- /** |
* @param {!Element} header |
* @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
*/ |
@@ -882,7 +868,7 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
var content = parentElement.createChild("div", "content"); |
var first = invalidations[0]; |
- if (first.cause && first.cause.stackTrace) { |
+ if (first.cause.stackTrace) { |
var stack = content.createChild("div"); |
stack.createTextChild(WebInspector.UIString("Stack trace:")); |
contentHelper.createChildStackTraceElement(stack, first.cause.stackTrace); |
@@ -890,7 +876,40 @@ WebInspector.TimelineUIUtils._generateInvalidationsForType = function(type, targ |
content.createTextChild(invalidations.length > 1 ? WebInspector.UIString("Nodes:") : WebInspector.UIString("Node:")); |
var nodeList = content.createChild("div", "node-list timeline-details-view-row-stack-trace"); |
- appendNodeList(nodeList, invalidations); |
+ appendDetailedNodeList(nodeList, invalidations); |
+ } |
+ |
+ /** |
+ * @param {!Element} parentElement |
+ * @param {!Array.<!WebInspector.InvalidationTrackingEvent>} invalidations |
+ */ |
+ function appendDetailedNodeList(parentElement, invalidations) |
+ { |
+ var firstNode = true; |
+ for (var i = 0; i < invalidations.length; i++) { |
+ var invalidation = invalidations[i]; |
+ var invalidationNode = createInvalidationNode(invalidation, true); |
+ if (invalidationNode) { |
+ if (!firstNode) |
+ parentElement.createTextChild(WebInspector.UIString(", ")); |
+ firstNode = false; |
+ |
+ parentElement.appendChild(invalidationNode); |
+ |
+ var extraData = invalidation.extraData ? ", " + invalidation.extraData : ""; |
+ if (invalidation.changedId) { |
+ parentElement.createTextChild(WebInspector.UIString("(changed id to \"%s\"%s)", invalidation.changedId, extraData)); |
+ } else if (invalidation.changedClass) { |
+ parentElement.createTextChild(WebInspector.UIString("(changed class to \"%s\"%s)", invalidation.changedClass, extraData)); |
+ } else if (invalidation.changedAttribute) { |
+ parentElement.createTextChild(WebInspector.UIString("(changed attribute to \"%s\"%s)", invalidation.changedAttribute, extraData)); |
+ } else if (invalidation.changedPseudo) { |
+ parentElement.createTextChild(WebInspector.UIString("(changed pesudo to \"%s\"%s)", invalidation.changedPseudo, extraData)); |
+ } else if (invalidation.selectorPart) { |
+ parentElement.createTextChild(WebInspector.UIString("(changed \"%s\"%s)", invalidation.selectorPart, extraData)); |
+ } |
+ } |
+ } |
} |
} |