| Index: Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| diff --git a/Source/devtools/front_end/timeline/TimelineFlameChart.js b/Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| index cf1cac10ebb82c1f789d4c464bbae0180fb8125c..3f03e83a35a66ed0c370adf13d4f88f0b7606492 100644
|
| --- a/Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| +++ b/Source/devtools/front_end/timeline/TimelineFlameChart.js
|
| @@ -31,417 +31,6 @@
|
| /**
|
| * @constructor
|
| * @implements {WebInspector.FlameChartDataProvider}
|
| - * @implements {WebInspector.TimelineFlameChart.SelectionProvider}
|
| - * @param {!WebInspector.TimelineModelImpl} model
|
| - * @param {!WebInspector.TimelineFrameModelBase} frameModel
|
| - * @param {!WebInspector.TimelineUIUtils} uiUtils
|
| - */
|
| -WebInspector.TimelineFlameChartDataProvider = function(model, frameModel, uiUtils)
|
| -{
|
| - WebInspector.FlameChartDataProvider.call(this);
|
| - this._model = model;
|
| - this._frameModel = frameModel;
|
| - this._uiUtils = uiUtils;
|
| - this._font = "12px " + WebInspector.fontFamily();
|
| - this._linkifier = new WebInspector.Linkifier();
|
| -}
|
| -
|
| -WebInspector.TimelineFlameChartDataProvider.prototype = {
|
| - /**
|
| - * @return {number}
|
| - */
|
| - barHeight: function()
|
| - {
|
| - return 20;
|
| - },
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - textBaseline: function()
|
| - {
|
| - return 6;
|
| - },
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - textPadding: function()
|
| - {
|
| - return 5;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {string}
|
| - */
|
| - entryFont: function(entryIndex)
|
| - {
|
| - return this._font;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {?string}
|
| - */
|
| - entryTitle: function(entryIndex)
|
| - {
|
| - var record = this._records[entryIndex];
|
| - if (record === this._cpuThreadRecord)
|
| - return WebInspector.UIString("CPU");
|
| - else if (record === this._gpuThreadRecord)
|
| - return WebInspector.UIString("GPU");
|
| - var details = this._uiUtils.buildDetailsNode(record, this._linkifier, this._model.loadedFromFile());
|
| - var title = this._uiUtils.titleForRecord(record);
|
| - return details ? WebInspector.UIString("%s (%s)", title, details.textContent) : title;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} startTime
|
| - * @param {number} endTime
|
| - * @return {?Array.<number>}
|
| - */
|
| - dividerOffsets: function(startTime, endTime)
|
| - {
|
| - // While we have tracing and timeline flame chart on screen at a time,
|
| - // we don't want to render frame-based grid.
|
| - return null;
|
| - },
|
| -
|
| - reset: function()
|
| - {
|
| - this._timelineData = null;
|
| - },
|
| -
|
| - /**
|
| - * @return {!WebInspector.FlameChart.TimelineData}
|
| - */
|
| - timelineData: function()
|
| - {
|
| - if (this._timelineData)
|
| - return this._timelineData;
|
| -
|
| - this._linkifier.reset();
|
| -
|
| - /**
|
| - * @type {?WebInspector.FlameChart.TimelineData}
|
| - */
|
| - this._timelineData = {
|
| - entryLevels: [],
|
| - entryTotalTimes: [],
|
| - entryStartTimes: []
|
| - };
|
| -
|
| - this._records = [];
|
| - this._entryThreadDepths = {};
|
| - this._minimumBoundary = this._model.minimumRecordTime();
|
| -
|
| - this._cpuThreadRecord = this._uiUtils.createProgramRecord(this._model);
|
| - this._pushRecord(this._cpuThreadRecord, 0, this.minimumBoundary(), Math.max(this._model.maximumRecordTime(), this.totalTime() + this.minimumBoundary()));
|
| -
|
| - this._gpuThreadRecord = null;
|
| -
|
| - var records = this._model.records();
|
| - for (var i = 0; i < records.length; ++i) {
|
| - var record = records[i];
|
| - var thread = record.thread();
|
| - if (thread === "gpu")
|
| - continue;
|
| - if (thread === WebInspector.TimelineModel.MainThreadName) {
|
| - for (var j = 0; j < record.children().length; ++j)
|
| - this._appendRecord(record.children()[j], 1);
|
| - } else {
|
| - var visible = this._appendRecord(records[i], 1);
|
| - if (visible && !this._gpuThreadRecord) {
|
| - this._gpuThreadRecord = this._uiUtils.createProgramRecord(this._model);
|
| - this._pushRecord(this._gpuThreadRecord, 0, this.minimumBoundary(), Math.max(this._model.maximumRecordTime(), this.totalTime() + this.minimumBoundary()));
|
| - }
|
| - }
|
| - }
|
| -
|
| - var cpuStackDepth = Math.max(4, this._entryThreadDepths[WebInspector.TimelineModel.MainThreadName]);
|
| - delete this._entryThreadDepths[WebInspector.TimelineModel.MainThreadName];
|
| - this._maxStackDepth = cpuStackDepth;
|
| -
|
| - if (this._gpuThreadRecord) {
|
| - // We have multiple threads, update levels.
|
| - var threadBaselines = {};
|
| - var threadBaseline = cpuStackDepth + 2;
|
| -
|
| - for (var thread in this._entryThreadDepths) {
|
| - threadBaselines[thread] = threadBaseline;
|
| - threadBaseline += this._entryThreadDepths[thread];
|
| - }
|
| - this._maxStackDepth = threadBaseline;
|
| -
|
| - for (var i = 0; i < this._records.length; ++i) {
|
| - var record = this._records[i];
|
| - var level = this._timelineData.entryLevels[i];
|
| - if (record === this._cpuThreadRecord)
|
| - level = 0;
|
| - else if (record === this._gpuThreadRecord)
|
| - level = cpuStackDepth + 2;
|
| - else if (record.thread() !== WebInspector.TimelineModel.MainThreadName)
|
| - level += threadBaselines[record.thread()];
|
| - this._timelineData.entryLevels[i] = level;
|
| - }
|
| - }
|
| -
|
| - return this._timelineData;
|
| - },
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - minimumBoundary: function()
|
| - {
|
| - return this._minimumBoundary;
|
| - },
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - totalTime: function()
|
| - {
|
| - return Math.max(1000, this._model.maximumRecordTime() - this._model.minimumRecordTime());
|
| - },
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - maxStackDepth: function()
|
| - {
|
| - return this._maxStackDepth;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.TimelineModel.Record} record
|
| - * @param {number} level
|
| - * @return {boolean}
|
| - */
|
| - _appendRecord: function(record, level)
|
| - {
|
| - var result = false;
|
| - if (!this._model.isVisible(record)) {
|
| - for (var i = 0; i < record.children().length; ++i)
|
| - result = this._appendRecord(record.children()[i], level) || result;
|
| - return result;
|
| - }
|
| -
|
| - this._pushRecord(record, level, record.startTime(), record.endTime());
|
| - for (var i = 0; i < record.children().length; ++i)
|
| - this._appendRecord(record.children()[i], level + 1);
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {!WebInspector.TimelineModel.Record} record
|
| - * @param {number} level
|
| - * @param {number} startTime
|
| - * @param {number} endTime
|
| - * @return {number}
|
| - */
|
| - _pushRecord: function(record, level, startTime, endTime)
|
| - {
|
| - var index = this._records.length;
|
| - this._records.push(record);
|
| - this._timelineData.entryStartTimes[index] = startTime;
|
| - this._timelineData.entryLevels[index] = level;
|
| - this._timelineData.entryTotalTimes[index] = endTime - startTime;
|
| - this._entryThreadDepths[record.thread()] = Math.max(level, this._entryThreadDepths[record.thread()] || 0);
|
| - return index;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {?Array.<!{title: string, text: string}>}
|
| - */
|
| - prepareHighlightedEntryInfo: function(entryIndex)
|
| - {
|
| - return null;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {boolean}
|
| - */
|
| - canJumpToEntry: function(entryIndex)
|
| - {
|
| - return false;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {string}
|
| - */
|
| - entryColor: function(entryIndex)
|
| - {
|
| - var record = this._records[entryIndex];
|
| - if (record === this._cpuThreadRecord || record === this._gpuThreadRecord)
|
| - return "#555";
|
| -
|
| - if (record.type() === WebInspector.TimelineModel.RecordType.JSFrame)
|
| - return WebInspector.TimelineFlameChartDataProvider.jsFrameColorGenerator().colorForID(record.data()["functionName"]);
|
| -
|
| - return this._uiUtils.categoryForRecord(record).fillColorStop1;
|
| - },
|
| -
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @param {!CanvasRenderingContext2D} context
|
| - * @param {?string} text
|
| - * @param {number} barX
|
| - * @param {number} barY
|
| - * @param {number} barWidth
|
| - * @param {number} barHeight
|
| - * @param {function(number):number} offsetToPosition
|
| - * @return {boolean}
|
| - */
|
| - decorateEntry: function(entryIndex, context, text, barX, barY, barWidth, barHeight, offsetToPosition)
|
| - {
|
| - if (barWidth < 5)
|
| - return false;
|
| -
|
| - var record = this._records[entryIndex];
|
| - var timelineData = this._timelineData;
|
| -
|
| - var category = this._uiUtils.categoryForRecord(record);
|
| - // Paint text using white color on dark background.
|
| - if (text) {
|
| - context.save();
|
| - context.fillStyle = "white";
|
| - context.shadowColor = "rgba(0, 0, 0, 0.1)";
|
| - context.shadowOffsetX = 1;
|
| - context.shadowOffsetY = 1;
|
| - context.font = this._font;
|
| - context.fillText(text, barX + this.textPadding(), barY + barHeight - this.textBaseline());
|
| - context.restore();
|
| - }
|
| -
|
| - if (record.children().length) {
|
| - var entryStartTime = timelineData.entryStartTimes[entryIndex];
|
| - var barSelf = offsetToPosition(entryStartTime + record.selfTime())
|
| -
|
| - context.beginPath();
|
| - context.fillStyle = category.backgroundColor;
|
| - context.rect(barSelf, barY, barX + barWidth - barSelf, barHeight);
|
| - context.fill();
|
| -
|
| - // Paint text using dark color on light background.
|
| - if (text) {
|
| - context.save();
|
| - context.clip();
|
| - context.fillStyle = category.borderColor;
|
| - context.shadowColor = "rgba(0, 0, 0, 0.1)";
|
| - context.shadowOffsetX = 1;
|
| - context.shadowOffsetY = 1;
|
| - context.fillText(text, barX + this.textPadding(), barY + barHeight - this.textBaseline());
|
| - context.restore();
|
| - }
|
| - }
|
| -
|
| - if (record.warnings()) {
|
| - context.save();
|
| -
|
| - context.rect(barX, barY, barWidth, this.barHeight());
|
| - context.clip();
|
| -
|
| - context.beginPath();
|
| - context.fillStyle = record.warnings() ? "red" : "rgba(255, 0, 0, 0.5)";
|
| - context.moveTo(barX + barWidth - 15, barY + 1);
|
| - context.lineTo(barX + barWidth - 1, barY + 1);
|
| - context.lineTo(barX + barWidth - 1, barY + 15);
|
| - context.fill();
|
| -
|
| - context.restore();
|
| - }
|
| -
|
| - return true;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {boolean}
|
| - */
|
| - forceDecoration: function(entryIndex)
|
| - {
|
| - var record = this._records[entryIndex];
|
| - return !!record.warnings();
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {?{startTime: number, endTime: number}}
|
| - */
|
| - highlightTimeRange: function(entryIndex)
|
| - {
|
| - var record = this._records[entryIndex];
|
| - if (record === this._cpuThreadRecord || record === this._gpuThreadRecord)
|
| - return null;
|
| - return {
|
| - startTime: record.startTime(),
|
| - endTime: record.endTime()
|
| - };
|
| - },
|
| -
|
| - /**
|
| - * @return {number}
|
| - */
|
| - paddingLeft: function()
|
| - {
|
| - return 0;
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {string}
|
| - */
|
| - textColor: function(entryIndex)
|
| - {
|
| - return "white";
|
| - },
|
| -
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {?WebInspector.TimelineSelection}
|
| - */
|
| - createSelection: function(entryIndex)
|
| - {
|
| - var record = this._records[entryIndex];
|
| - if (record instanceof WebInspector.TimelineModel.RecordImpl) {
|
| - this._lastSelection = new WebInspector.TimelineFlameChart.Selection(WebInspector.TimelineSelection.fromRecord(record), entryIndex);
|
| - return this._lastSelection.timelineSelection;
|
| - }
|
| - return null;
|
| - },
|
| -
|
| - /**
|
| - * @param {?WebInspector.TimelineSelection} selection
|
| - * @return {number}
|
| - */
|
| - entryIndexForSelection: function(selection)
|
| - {
|
| - if (!selection || selection.type() !== WebInspector.TimelineSelection.Type.Record)
|
| - return -1;
|
| - var record = /** @type{!WebInspector.TimelineModel.Record} */ (selection.object());
|
| - if (this._lastSelection && this._lastSelection.timelineSelection.object() === record)
|
| - return this._lastSelection.entryIndex;
|
| - var entryRecords = this._records;
|
| - for (var entryIndex = 0; entryIndex < entryRecords.length; ++entryIndex) {
|
| - if (entryRecords[entryIndex] === record) {
|
| - this._lastSelection = new WebInspector.TimelineFlameChart.Selection(WebInspector.TimelineSelection.fromRecord(record), entryIndex);
|
| - return entryIndex;
|
| - }
|
| - }
|
| - return -1;
|
| - }
|
| -}
|
| -
|
| -/**
|
| - * @constructor
|
| - * @implements {WebInspector.FlameChartDataProvider}
|
| - * @implements {WebInspector.TimelineFlameChart.SelectionProvider}
|
| * @param {!WebInspector.TracingTimelineModel} model
|
| * @param {!WebInspector.TimelineFrameModelBase} frameModel
|
| * @param {!WebInspector.Target} target
|
| @@ -454,7 +43,6 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider = function(model, frameM
|
| this._target = target;
|
| this._font = "12px " + WebInspector.fontFamily();
|
| this._linkifier = new WebInspector.Linkifier();
|
| - this._palette = new WebInspector.TraceViewPalette();
|
| this._entryIndexToTitle = {};
|
| this._filters = [];
|
| this.addFilter(WebInspector.TracingTimelineUIUtils.hiddenEventsFilter());
|
| @@ -701,7 +289,7 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
|
| if (!event)
|
| return "#555";
|
| if (event.name === WebInspector.TracingTimelineModel.RecordType.JSFrame)
|
| - return WebInspector.TimelineFlameChartDataProvider.jsFrameColorGenerator().colorForID(event.args.data["functionName"]);
|
| + return WebInspector.TracingBasedTimelineFlameChartDataProvider.jsFrameColorGenerator().colorForID(event.args.data["functionName"]);
|
| var style = WebInspector.TracingTimelineUIUtils.styleForTraceEvent(event.name);
|
| return style.category.fillColorStop1;
|
| },
|
| @@ -865,18 +453,18 @@ WebInspector.TracingBasedTimelineFlameChartDataProvider.prototype = {
|
| /**
|
| * @return {!WebInspector.FlameChart.ColorGenerator}
|
| */
|
| -WebInspector.TimelineFlameChartDataProvider.jsFrameColorGenerator = function()
|
| +WebInspector.TracingBasedTimelineFlameChartDataProvider.jsFrameColorGenerator = function()
|
| {
|
| - if (!WebInspector.TimelineFlameChartDataProvider._jsFrameColorGenerator) {
|
| + if (!WebInspector.TracingBasedTimelineFlameChartDataProvider._jsFrameColorGenerator) {
|
| var hueSpace = { min: 30, max: 55, count: 5 };
|
| var satSpace = { min: 70, max: 100, count: 6 };
|
| var colorGenerator = new WebInspector.FlameChart.ColorGenerator(hueSpace, satSpace, 50);
|
| colorGenerator.setColorForID("(idle)", "hsl(0, 0%, 60%)");
|
| colorGenerator.setColorForID("(program)", "hsl(0, 0%, 60%)");
|
| colorGenerator.setColorForID("(garbage collector)", "hsl(0, 0%, 60%)");
|
| - WebInspector.TimelineFlameChartDataProvider._jsFrameColorGenerator = colorGenerator;
|
| + WebInspector.TracingBasedTimelineFlameChartDataProvider._jsFrameColorGenerator = colorGenerator;
|
| }
|
| - return WebInspector.TimelineFlameChartDataProvider._jsFrameColorGenerator;
|
| + return WebInspector.TracingBasedTimelineFlameChartDataProvider._jsFrameColorGenerator;
|
| }
|
|
|
| /**
|
| @@ -885,21 +473,17 @@ WebInspector.TimelineFlameChartDataProvider.jsFrameColorGenerator = function()
|
| * @implements {WebInspector.TimelineModeView}
|
| * @implements {WebInspector.FlameChartDelegate}
|
| * @param {!WebInspector.TimelineModeViewDelegate} delegate
|
| - * @param {!WebInspector.TimelineModel} model
|
| - * @param {?WebInspector.TracingTimelineModel} tracingModel
|
| + * @param {!WebInspector.TracingTimelineModel} tracingModel
|
| * @param {!WebInspector.TimelineFrameModelBase} frameModel
|
| - * @param {!WebInspector.TimelineUIUtils} uiUtils
|
| */
|
| -WebInspector.TimelineFlameChart = function(delegate, model, tracingModel, frameModel, uiUtils)
|
| +WebInspector.TimelineFlameChart = function(delegate, tracingModel, frameModel)
|
| {
|
| WebInspector.VBox.call(this);
|
| this.element.classList.add("timeline-flamechart");
|
| this.registerRequiredCSS("flameChart.css");
|
| this._delegate = delegate;
|
| - this._model = model;
|
| - this._dataProvider = tracingModel
|
| - ? new WebInspector.TracingBasedTimelineFlameChartDataProvider(tracingModel, frameModel, model.target())
|
| - : new WebInspector.TimelineFlameChartDataProvider(/** @type {!WebInspector.TimelineModelImpl} */(model), frameModel, uiUtils);
|
| + this._model = tracingModel;
|
| + this._dataProvider = new WebInspector.TracingBasedTimelineFlameChartDataProvider(tracingModel, frameModel, tracingModel.target())
|
| this._mainView = new WebInspector.FlameChart(this._dataProvider, this, true);
|
| this._mainView.show(this.element);
|
| this._model.addEventListener(WebInspector.TimelineModel.Events.RecordingStarted, this._onRecordingStarted, this);
|
| @@ -1043,21 +627,3 @@ WebInspector.TimelineFlameChart.Selection = function(selection, entryIndex)
|
| this.timelineSelection = selection;
|
| this.entryIndex = entryIndex;
|
| }
|
| -
|
| -/**
|
| - * @interface
|
| - */
|
| -WebInspector.TimelineFlameChart.SelectionProvider = function() { }
|
| -
|
| -WebInspector.TimelineFlameChart.SelectionProvider.prototype = {
|
| - /**
|
| - * @param {number} entryIndex
|
| - * @return {?WebInspector.TimelineSelection}
|
| - */
|
| - createSelection: function(entryIndex) { },
|
| - /**
|
| - * @param {?WebInspector.TimelineSelection} selection
|
| - * @return {number}
|
| - */
|
| - entryIndexForSelection: function(selection) { }
|
| -}
|
|
|