Index: Source/devtools/front_end/timeline/TracingTimelineModel.js |
diff --git a/Source/devtools/front_end/timeline/TracingTimelineModel.js b/Source/devtools/front_end/timeline/TracingTimelineModel.js |
index e0cdd3b6e7250d79969fd21539863c23ac658997..461ab7d5c5ba332ecfc2f0bff67c2b01baa068a1 100644 |
--- a/Source/devtools/front_end/timeline/TracingTimelineModel.js |
+++ b/Source/devtools/front_end/timeline/TracingTimelineModel.js |
@@ -595,6 +595,7 @@ WebInspector.TracingTimelineModel.prototype = { |
break; |
case recordTypes.RecalculateStyles: |
+ this._invalidationTracker.didRecalcStyle(event); |
event.initiator = this._lastScheduleStyleRecalculation[event.args["frame"]]; |
this._lastRecalculateStylesEvent = event; |
break; |
@@ -1177,6 +1178,25 @@ WebInspector.InvalidationTracker.prototype = { |
}, |
/** |
+ * @param {!WebInspector.TracingModel.Event} styleRecalcEvent |
+ */ |
+ didRecalcStyle: function(styleRecalcEvent) |
+ { |
+ var recalcFrameId = styleRecalcEvent.args["frame"]; |
+ var index = this._lastStyleRecalcEventIndex; |
+ var invalidationCount = this._invalidationEvents.length; |
+ for (; index < invalidationCount; index++) { |
+ var invalidation = this._invalidationEvents[index]; |
+ if (invalidation.type !== WebInspector.TracingTimelineModel.RecordType.StyleRecalcInvalidationTracking) |
+ continue; |
+ if (invalidation.frameId === recalcFrameId) |
+ this._addInvalidationTrackingEvent(styleRecalcEvent, invalidation); |
+ } |
+ |
+ this._lastStyleRecalcEventIndex = invalidationCount; |
+ }, |
+ |
+ /** |
* @param {!WebInspector.TracingModel.Event} paintEvent |
*/ |
didPaint: function(paintEvent) |
@@ -1195,18 +1215,27 @@ WebInspector.InvalidationTracker.prototype = { |
var effectivePaintId = this._lastPaintWithLayer.args["data"]["nodeId"]; |
var frameId = paintEvent.args["data"]["frame"]; |
- this._invalidationEvents.forEach(recordInvalidationForPaint); |
+ this._invalidationEvents.forEach(recordInvalidationForPaint.bind(this)); |
function recordInvalidationForPaint(invalidation) |
{ |
- if (invalidation.paintId === effectivePaintId && invalidation.frameId === frameId) { |
- if (!paintEvent.invalidationTrackingEvents) |
- paintEvent.invalidationTrackingEvents = []; |
- paintEvent.invalidationTrackingEvents.push(invalidation); |
- } |
+ if (invalidation.paintId === effectivePaintId && invalidation.frameId === frameId) |
+ this._addInvalidationTrackingEvent(paintEvent, invalidation); |
} |
}, |
+ /** |
+ * @param {!WebInspector.TracingModel.Event} event |
+ * @param {!WebInspector.InvalidationTrackingEvent} invalidation |
+ */ |
+ _addInvalidationTrackingEvent: function(event, invalidation) |
+ { |
+ if (!event.invalidationTrackingEvents) |
+ event.invalidationTrackingEvents = [ invalidation ]; |
+ else |
+ event.invalidationTrackingEvents.push(invalidation); |
+ }, |
+ |
_startNewFrameIfNeeded: function() |
{ |
if (!this._didPaint) |
@@ -1218,6 +1247,7 @@ WebInspector.InvalidationTracker.prototype = { |
_initializePerFrameState: function() |
{ |
this._invalidationEvents = []; |
+ this._lastStyleRecalcEventIndex = 0; |
this._lastPaintWithLayer = undefined; |
this._didPaint = false; |
} |