Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1091)

Unified Diff: Source/devtools/front_end/timeline/TimelineFrameModel.js

Issue 320953002: Timeline: split frame model into trace-specific and record-specific parts (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: rebased and removed extra semicolon Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: Source/devtools/front_end/timeline/TimelineFrameModel.js
diff --git a/Source/devtools/front_end/timeline/TimelineFrameModel.js b/Source/devtools/front_end/timeline/TimelineFrameModel.js
index 933ec9911281c0b3fb1fa3289e048d7b0c61402b..3bc276138902123e909de7f80c45508b71c8f9a6 100644
--- a/Source/devtools/front_end/timeline/TimelineFrameModel.js
+++ b/Source/devtools/front_end/timeline/TimelineFrameModel.js
@@ -33,32 +33,14 @@
* @extends {WebInspector.TargetAwareObject}
* @param {!WebInspector.Target} target
*/
-WebInspector.TimelineFrameModel = function(target)
+WebInspector.TimelineFrameModelBase = function(target)
{
WebInspector.TargetAwareObject.call(this, target);
this.reset();
}
-WebInspector.TimelineFrameModel.Events = {
- FrameAdded: "FrameAdded"
-}
-
-WebInspector.TimelineFrameModel._mainFrameMarkers = [
- WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation,
- WebInspector.TimelineModel.RecordType.InvalidateLayout,
- WebInspector.TimelineModel.RecordType.BeginFrame,
- WebInspector.TimelineModel.RecordType.ScrollLayer
-];
-
-WebInspector.TimelineFrameModel._tracingMainFrameMarkers = [
- WebInspector.TracingTimelineModel.RecordType.ScheduleStyleRecalculation,
- WebInspector.TracingTimelineModel.RecordType.InvalidateLayout,
- WebInspector.TracingTimelineModel.RecordType.BeginMainThreadFrame,
- WebInspector.TracingTimelineModel.RecordType.ScrollLayer
-];
-
-WebInspector.TimelineFrameModel.prototype = {
+WebInspector.TimelineFrameModelBase.prototype = {
/**
* @return {!Array.<!WebInspector.TimelineFrame>}
*/
@@ -98,17 +80,8 @@ WebInspector.TimelineFrameModel.prototype = {
return frames.slice(firstFrame, lastFrame);
},
- /**
- * @param {boolean} value
- */
- setMergeRecords: function(value)
- {
- this._mergeRecords = value;
- },
-
reset: function()
{
- this._mergeRecords = true;
this._minimumRecordTime = Infinity;
this._frames = [];
this._lastFrame = null;
@@ -117,143 +90,6 @@ WebInspector.TimelineFrameModel.prototype = {
this._mainFrameCommitted = false;
this._mainFrameRequested = false;
this._aggregatedMainThreadWork = null;
- this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer();
- },
-
- /**
- * @param {!Array.<!WebInspector.TimelineModel.Record>} records
- */
- addRecords: function(records)
- {
- if (!records.length)
- return;
- if (records[0].startTime() < this._minimumRecordTime)
- this._minimumRecordTime = records[0].startTime();
- for (var i = 0; i < records.length; ++i)
- this.addRecord(records[i]);
- },
-
- /**
- * @param {!WebInspector.TimelineModel.Record} record
- */
- addRecord: function(record)
- {
- var recordTypes = WebInspector.TimelineModel.RecordType;
- var programRecord = record.type() === recordTypes.Program ? record : null;
-
- // Start collecting main frame
- if (programRecord) {
- if (!this._aggregatedMainThreadWork && this._findRecordRecursively(WebInspector.TimelineFrameModel._mainFrameMarkers, programRecord))
- this._aggregatedMainThreadWork = {};
- }
- /** type {Array.<!WebInspector.TimelineModel.Record>} */
- var records = [];
- if (!this._mergeRecords)
- records = [record];
- else
- records = this._mergingBuffer.process(record.thread(), /** type {Array.<!WebInspector.TimelineModel.Record>} */(programRecord ? record.children() || [] : [record]));
- for (var i = 0; i < records.length; ++i) {
- if (records[i].thread())
- this._addBackgroundRecord(records[i]);
- else
- this._addMainThreadRecord(programRecord, records[i]);
- }
- },
-
- /**
- * @param {!Array.<!WebInspector.TracingModel.Event>} events
- * @param {string} sessionId
- */
- addTraceEvents: function(events, sessionId)
- {
- this._sessionId = sessionId;
- for (var i = 0; i < events.length; ++i)
- this._addTraceEvent(events[i]);
- },
-
- /**
- * @param {!WebInspector.TracingModel.Event} event
- */
- _addTraceEvent: function(event)
- {
- var eventNames = WebInspector.TracingTimelineModel.RecordType;
-
- if (event.name === eventNames.SetLayerTreeId) {
- if (this._sessionId === event.args["sessionId"])
- this._layerTreeId = event.args["layerTreeId"];
- return;
- }
- if (event.name === eventNames.TracingStartedInPage) {
- this._mainThread = event.thread;
- return;
- }
- if (event.thread === this._mainThread)
- this._addMainThreadTraceEvent(event);
- else
- this._addBackgroundTraceEvent(event);
- },
-
- /**
- * @param {!WebInspector.TracingModel.Event} event
- */
- _addBackgroundTraceEvent: function(event)
- {
- var eventNames = WebInspector.TracingTimelineModel.RecordType;
-
- if (event.phase === WebInspector.TracingModel.Phase.SnapshotObject && event.name === eventNames.LayerTreeHostImplSnapshot && parseInt(event.id, 0) === this._layerTreeId) {
- this.handleLayerTreeSnapshot(new WebInspector.DeferredTracingLayerTree(this.target(), event.args["snapshot"]["active_tree"]["root_layer"]));
- return;
- }
- if (this._lastFrame && event.selfTime)
- this._lastFrame._addTimeForCategory(WebInspector.TracingTimelineUIUtils.eventStyle(event).category.name, event.selfTime);
-
- if (event.args["layerTreeId"] !== this._layerTreeId)
- return;
-
- var timestamp = event.startTime;
- if (event.name === eventNames.BeginFrame)
- this.handleBeginFrame(timestamp);
- else if (event.name === eventNames.DrawFrame)
- this.handleDrawFrame(timestamp);
- else if (event.name === eventNames.ActivateLayerTree)
- this.handleActivateLayerTree();
- else if (event.name === eventNames.RequestMainThreadFrame)
- this.handleRequestMainThreadFrame();
- },
-
- /**
- * @param {!WebInspector.TracingModel.Event} event
- */
- _addMainThreadTraceEvent: function(event)
- {
- var eventNames = WebInspector.TracingTimelineModel.RecordType;
- var timestamp = event.startTime;
- var selfTime = event.selfTime || 0;
-
- if (!this._hasThreadedCompositing) {
- if (event.name === eventNames.BeginMainThreadFrame)
- this._startMainThreadFrame(timestamp);
- if (!this._lastFrame)
- return;
- if (!selfTime)
- return;
-
- var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(event).category.name;
- this._lastFrame._addTimeForCategory(categoryName, selfTime);
- return;
- }
-
- if (!this._aggregatedMainThreadWork && WebInspector.TimelineFrameModel._tracingMainFrameMarkers.indexOf(event.name) >= 0)
- this._aggregatedMainThreadWork = {};
- if (!this._aggregatedMainThreadWork)
- return;
-
- if (selfTime) {
- var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(event).category.name;
- this._aggregatedMainThreadWork[categoryName] = (this._aggregatedMainThreadWork[categoryName] || 0) + selfTime;
- }
- if (event.name === eventNames.CompositeLayers && event.args["layerTreeId"] === this._layerTreeId)
- this.handleCompositeLayers();
},
/**
@@ -316,6 +152,137 @@ WebInspector.TimelineFrameModel.prototype = {
},
/**
+ * @param {number} startTime
+ */
+ _startBackgroundFrame: function(startTime)
+ {
+ if (!this._hasThreadedCompositing) {
+ this._lastFrame = null;
+ this._hasThreadedCompositing = true;
+ }
+ if (this._lastFrame)
+ this._flushFrame(this._lastFrame, startTime);
+
+ this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
+ },
+
+ /**
+ * @param {number} startTime
+ */
+ _startMainThreadFrame: function(startTime)
+ {
+ if (this._lastFrame)
+ this._flushFrame(this._lastFrame, startTime);
+ this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
+ },
+
+ /**
+ * @param {!WebInspector.TimelineFrame} frame
+ * @param {number} endTime
+ */
+ _flushFrame: function(frame, endTime)
+ {
+ frame._setLayerTree(this._lastLayerTree);
+ frame._setEndTime(endTime);
+ this._frames.push(frame);
+ },
+
+ /**
+ * @param {!Array.<string>} types
+ * @param {!WebInspector.TimelineModel.Record} record
+ * @return {?WebInspector.TimelineModel.Record} record
+ */
+ _findRecordRecursively: function(types, record)
+ {
+ if (types.indexOf(record.type()) >= 0)
+ return record;
+ if (!record.children())
+ return null;
+ for (var i = 0; i < record.children().length; ++i) {
+ var result = this._findRecordRecursively(types, record.children()[i]);
+ if (result)
+ return result;
+ }
+ return null;
+ },
+
+ __proto__: WebInspector.TargetAwareObject.prototype
+}
+
+/**
+ * @constructor
+ * @param {!WebInspector.Target} target
+ * @extends {WebInspector.TimelineFrameModelBase}
+ */
+WebInspector.TimelineFrameModel = function(target)
+{
+ WebInspector.TimelineFrameModelBase.call(this, target);
+}
+
+WebInspector.TimelineFrameModel._mainFrameMarkers = [
+ WebInspector.TimelineModel.RecordType.ScheduleStyleRecalculation,
+ WebInspector.TimelineModel.RecordType.InvalidateLayout,
+ WebInspector.TimelineModel.RecordType.BeginFrame,
+ WebInspector.TimelineModel.RecordType.ScrollLayer
+];
+
+WebInspector.TimelineFrameModel.prototype = {
+ reset: function()
+ {
+ this._mergeRecords = true;
+ this._mergingBuffer = new WebInspector.TimelineMergingRecordBuffer();
+ WebInspector.TimelineFrameModelBase.prototype.reset.call(this);
+ },
+
+ /**
+ * @param {boolean} value
+ */
+ setMergeRecords: function(value)
+ {
+ this._mergeRecords = value;
+ },
+
+ /**
+ * @param {!Array.<!WebInspector.TimelineModel.Record>} records
+ */
+ addRecords: function(records)
+ {
+ if (!records.length)
+ return;
+ if (records[0].startTime() < this._minimumRecordTime)
+ this._minimumRecordTime = records[0].startTime();
+ for (var i = 0; i < records.length; ++i)
+ this.addRecord(records[i]);
+ },
+
+ /**
+ * @param {!WebInspector.TimelineModel.Record} record
+ */
+ addRecord: function(record)
+ {
+ var recordTypes = WebInspector.TimelineModel.RecordType;
+ var programRecord = record.type() === recordTypes.Program ? record : null;
+
+ // Start collecting main frame
+ if (programRecord) {
+ if (!this._aggregatedMainThreadWork && this._findRecordRecursively(WebInspector.TimelineFrameModel._mainFrameMarkers, programRecord))
+ this._aggregatedMainThreadWork = {};
+ }
+ /** type {Array.<!WebInspector.TimelineModel.Record>} */
+ var records = [];
+ if (!this._mergeRecords)
+ records = [record];
+ else
+ records = this._mergingBuffer.process(record.thread(), /** type {Array.<!WebInspector.TimelineModel.Record>} */(programRecord ? record.children() || [] : [record]));
+ for (var i = 0; i < records.length; ++i) {
+ if (records[i].thread())
+ this._addBackgroundRecord(records[i]);
+ else
+ this._addMainThreadRecord(programRecord, records[i]);
+ }
+ },
+
+ /**
* @param {!WebInspector.TimelineModel.Record} record
*/
_addBackgroundRecord: function(record)
@@ -381,63 +348,124 @@ WebInspector.TimelineFrameModel.prototype = {
return programRecord.endTime() - programRecord.startTime() - accounted;
},
+ __proto__: WebInspector.TimelineFrameModelBase.prototype,
+};
+
+/**
+ * @constructor
+ * @param {!WebInspector.Target} target
+ * @extends {WebInspector.TimelineFrameModelBase}
+ */
+WebInspector.TracingTimelineFrameModel = function(target)
+{
+ WebInspector.TimelineFrameModelBase.call(this, target);
+}
+
+WebInspector.TracingTimelineFrameModel._mainFrameMarkers = [
+ WebInspector.TracingTimelineModel.RecordType.ScheduleStyleRecalculation,
+ WebInspector.TracingTimelineModel.RecordType.InvalidateLayout,
+ WebInspector.TracingTimelineModel.RecordType.BeginMainThreadFrame,
+ WebInspector.TracingTimelineModel.RecordType.ScrollLayer
+];
+
+WebInspector.TracingTimelineFrameModel.prototype = {
/**
- * @param {number} startTime
+ * @param {!Array.<!WebInspector.TracingModel.Event>} events
+ * @param {string} sessionId
*/
- _startBackgroundFrame: function(startTime)
+ addTraceEvents: function(events, sessionId)
{
- if (!this._hasThreadedCompositing) {
- this._lastFrame = null;
- this._hasThreadedCompositing = true;
- }
- if (this._lastFrame)
- this._flushFrame(this._lastFrame, startTime);
-
- this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
+ this._sessionId = sessionId;
+ for (var i = 0; i < events.length; ++i)
+ this._addTraceEvent(events[i]);
},
/**
- * @param {number} startTime
+ * @param {!WebInspector.TracingModel.Event} event
*/
- _startMainThreadFrame: function(startTime)
+ _addTraceEvent: function(event)
{
- if (this._lastFrame)
- this._flushFrame(this._lastFrame, startTime);
- this._lastFrame = new WebInspector.TimelineFrame(startTime, startTime - this._minimumRecordTime);
+ var eventNames = WebInspector.TracingTimelineModel.RecordType;
+
+ if (event.name === eventNames.SetLayerTreeId) {
+ if (this._sessionId === event.args["sessionId"])
+ this._layerTreeId = event.args["layerTreeId"];
+ return;
+ }
+ if (event.name === eventNames.TracingStartedInPage) {
+ this._mainThread = event.thread;
+ return;
+ }
+ if (event.thread === this._mainThread)
+ this._addMainThreadTraceEvent(event);
+ else
+ this._addBackgroundTraceEvent(event);
},
/**
- * @param {!WebInspector.TimelineFrame} frame
- * @param {number} endTime
+ * @param {!WebInspector.TracingModel.Event} event
*/
- _flushFrame: function(frame, endTime)
+ _addBackgroundTraceEvent: function(event)
{
- frame._setLayerTree(this._lastLayerTree);
- frame._setEndTime(endTime);
- this._frames.push(frame);
- this.dispatchEventToListeners(WebInspector.TimelineFrameModel.Events.FrameAdded, frame);
+ var eventNames = WebInspector.TracingTimelineModel.RecordType;
+
+ if (event.phase === WebInspector.TracingModel.Phase.SnapshotObject && event.name === eventNames.LayerTreeHostImplSnapshot && parseInt(event.id, 0) === this._layerTreeId) {
+ this.handleLayerTreeSnapshot(new WebInspector.DeferredTracingLayerTree(this.target(), event.args["snapshot"]["active_tree"]["root_layer"]));
+ return;
+ }
+ if (this._lastFrame && event.selfTime)
+ this._lastFrame._addTimeForCategory(WebInspector.TracingTimelineUIUtils.eventStyle(event).category.name, event.selfTime);
+
+ if (event.args["layerTreeId"] !== this._layerTreeId)
+ return;
+
+ var timestamp = event.startTime;
+ if (event.name === eventNames.BeginFrame)
+ this.handleBeginFrame(timestamp);
+ else if (event.name === eventNames.DrawFrame)
+ this.handleDrawFrame(timestamp);
+ else if (event.name === eventNames.ActivateLayerTree)
+ this.handleActivateLayerTree();
+ else if (event.name === eventNames.RequestMainThreadFrame)
+ this.handleRequestMainThreadFrame();
},
/**
- * @param {!Array.<string>} types
- * @param {!WebInspector.TimelineModel.Record} record
- * @return {?WebInspector.TimelineModel.Record} record
+ * @param {!WebInspector.TracingModel.Event} event
*/
- _findRecordRecursively: function(types, record)
+ _addMainThreadTraceEvent: function(event)
{
- if (types.indexOf(record.type()) >= 0)
- return record;
- if (!record.children())
- return null;
- for (var i = 0; i < record.children().length; ++i) {
- var result = this._findRecordRecursively(types, record.children()[i]);
- if (result)
- return result;
+ var eventNames = WebInspector.TracingTimelineModel.RecordType;
+ var timestamp = event.startTime;
+ var selfTime = event.selfTime || 0;
+
+ if (!this._hasThreadedCompositing) {
+ if (event.name === eventNames.BeginMainThreadFrame)
+ this._startMainThreadFrame(timestamp);
+ if (!this._lastFrame)
+ return;
+ if (!selfTime)
+ return;
+
+ var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(event).category.name;
+ this._lastFrame._addTimeForCategory(categoryName, selfTime);
+ return;
}
- return null;
+
+ if (!this._aggregatedMainThreadWork && WebInspector.TracingTimelineFrameModel._mainFrameMarkers.indexOf(event.name) >= 0)
+ this._aggregatedMainThreadWork = {};
+ if (!this._aggregatedMainThreadWork)
+ return;
+
+ if (selfTime) {
+ var categoryName = WebInspector.TracingTimelineUIUtils.eventStyle(event).category.name;
+ this._aggregatedMainThreadWork[categoryName] = (this._aggregatedMainThreadWork[categoryName] || 0) + selfTime;
+ }
+ if (event.name === eventNames.CompositeLayers && event.args["layerTreeId"] === this._layerTreeId)
+ this.handleCompositeLayers();
},
- __proto__: WebInspector.TargetAwareObject.prototype
+ __proto__: WebInspector.TimelineFrameModelBase.prototype
}
/**
« no previous file with comments | « Source/devtools/front_end/timeline/TimelineFlameChart.js ('k') | Source/devtools/front_end/timeline/TimelineFrameOverview.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698