Chromium Code Reviews| 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..44327dfe2e9a17f22a666667c96c509b71580f05 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,64 +348,125 @@ 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 |
| +}; |
|
yurys
2014/06/10 07:56:53
style: please remove ;
|
| /** |
| * @constructor |