Index: Source/devtools/front_end/timeline/TimelineModel.js |
diff --git a/Source/devtools/front_end/timeline/TimelineModel.js b/Source/devtools/front_end/timeline/TimelineModel.js |
index 0a768dfee48b297b2e9f2f7b585eae4f5208c946..dc9c8b2105a37b6fddb61b33e38c80b66a8374ed 100644 |
--- a/Source/devtools/front_end/timeline/TimelineModel.js |
+++ b/Source/devtools/front_end/timeline/TimelineModel.js |
@@ -755,6 +755,8 @@ WebInspector.TimelineModel.prototype = { |
this._lastRecalculateStylesEvent = null; |
this._currentScriptEvent = null; |
this._eventStack = []; |
+ this._layerTreeActivatedAfterLoad = false; |
+ this._expectFirstPaint = false; |
}, |
/** |
@@ -765,6 +767,7 @@ WebInspector.TimelineModel.prototype = { |
*/ |
_processThreadEvents: function(startTime, endTime, mainThread, thread) |
{ |
+ var recordTypes = WebInspector.TimelineModel.RecordType; |
var events = thread.events(); |
var length = events.length; |
var i = events.lowerBound(startTime, function (time, event) { return time - event.startTime }); |
@@ -787,6 +790,10 @@ WebInspector.TimelineModel.prototype = { |
if (endTime && event.startTime >= endTime) |
break; |
this._processEvent(event); |
+ if (this._expectFirstPaint && event.name === recordTypes.DrawFrame && this._layerTreeActivatedAfterLoad) { |
+ threadEvents.push(new WebInspector.TracingModel.Event(event.category, recordTypes.MarkFirstPaint, WebInspector.TracingModel.Phase.Instant, event.startTime, event.thread)); |
+ this._expectFirstPaint = false; |
+ } |
threadEvents.push(event); |
this._inspectedTargetEvents.push(event); |
} |
@@ -813,7 +820,6 @@ WebInspector.TimelineModel.prototype = { |
_processEvent: function(event) |
{ |
var recordTypes = WebInspector.TimelineModel.RecordType; |
- |
var eventStack = this._eventStack; |
while (eventStack.length && eventStack.peekLast().endTime < event.startTime) |
eventStack.pop(); |
@@ -983,6 +989,17 @@ WebInspector.TimelineModel.prototype = { |
event.backendNodeId = paintImageEvent.backendNodeId; |
event.imageURL = paintImageEvent.imageURL; |
break; |
+ |
+ case recordTypes.MarkDOMContent: |
+ if (!event.args["data"]["isMainFrame"]) |
+ break; |
+ this._expectFirstPaint = true; |
+ this._layerTreeActivatedAfterLoad = false; |
+ break; |
+ |
+ case recordTypes.ActivateLayerTree: |
+ this._layerTreeActivatedAfterLoad = true; |
+ break; |
} |
}, |