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

Unified Diff: Source/devtools/front_end/FlameChart.js

Issue 212593009: FlameChart: move CPUProfiler related part of the FlameChart into a separate file. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: missed file was added. test was fixed. Created 6 years, 9 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
« no previous file with comments | « Source/devtools/front_end/CPUProfileView.js ('k') | Source/devtools/front_end/ProfilesPanel.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/FlameChart.js
diff --git a/Source/devtools/front_end/FlameChart.js b/Source/devtools/front_end/FlameChart.js
index 92adebb7f1d69f0b4234f3a39fad3a8dcd0a4837..b9eca50502bc01fe764d6458c9e95a1b58f18d8c 100644
--- a/Source/devtools/front_end/FlameChart.js
+++ b/Source/devtools/front_end/FlameChart.js
@@ -45,58 +45,47 @@ WebInspector.FlameChartDelegate.prototype = {
* @constructor
* @extends {WebInspector.VBox}
* @param {!WebInspector.FlameChartDataProvider} dataProvider
+ * @param {!WebInspector.FlameChartDelegate} flameChartDelegate
+ * @param {boolean} isTopDown
+ * @param {boolean} timeBasedWindow
*/
-WebInspector.FlameChart = function(dataProvider)
+WebInspector.FlameChart = function(dataProvider, flameChartDelegate, isTopDown, timeBasedWindow)
{
WebInspector.VBox.call(this);
- this.registerRequiredCSS("flameChart.css");
- this.element.id = "cpu-flame-chart";
-
- this._overviewPane = new WebInspector.FlameChart.OverviewPane(dataProvider);
- this._overviewPane.show(this.element);
-
- this._mainPane = new WebInspector.FlameChart.MainPane(dataProvider, this._overviewPane, true, false);
- this._mainPane.show(this.element);
- this._mainPane.addEventListener(WebInspector.FlameChart.Events.EntrySelected, this._onEntrySelected, this);
- this._overviewPane._overviewGrid.addEventListener(WebInspector.OverviewGrid.Events.WindowChanged, this._onWindowChanged, this);
-}
+ this.element.classList.add("flame-chart-main-pane");
+ this._flameChartDelegate = flameChartDelegate;
+ this._isTopDown = isTopDown;
+ this._timeBasedWindow = timeBasedWindow;
-WebInspector.FlameChart.DividersBarHeight = 20;
+ this._calculator = new WebInspector.FlameChart.Calculator();
-WebInspector.FlameChart.prototype = {
- /**
- * @param {!WebInspector.Event} event
- */
- _onWindowChanged: function(event)
- {
- this._mainPane.changeWindow(this._overviewPane._overviewGrid.windowLeft(), this._overviewPane._overviewGrid.windowRight());
- },
+ this._canvas = this.element.createChild("canvas");
+ this._canvas.addEventListener("mousemove", this._onMouseMove.bind(this));
+ this._canvas.addEventListener("mousewheel", this._onMouseWheel.bind(this), false);
+ this._canvas.addEventListener("click", this._onClick.bind(this), false);
+ WebInspector.installDragHandle(this._canvas, this._startCanvasDragging.bind(this), this._canvasDragging.bind(this), this._endCanvasDragging.bind(this), "move", null);
- /**
- * @param {!number} timeLeft
- * @param {!number} timeRight
- */
- selectRange: function(timeLeft, timeRight)
- {
- this._overviewPane._selectRange(timeLeft, timeRight);
- },
+ this._entryInfo = this.element.createChild("div", "profile-entry-info");
+ this._highlightElement = this.element.createChild("div", "flame-chart-highlight-element");
+ this._selectedElement = this.element.createChild("div", "flame-chart-selected-element");
- /**
- * @param {!WebInspector.Event} event
- */
- _onEntrySelected: function(event)
- {
- this.dispatchEventToListeners(WebInspector.FlameChart.Events.EntrySelected, event.data);
- },
+ this._dataProvider = dataProvider;
- update: function()
- {
- this._overviewPane.update();
- this._mainPane.update();
- },
+ this._windowLeft = 0.0;
+ this._windowRight = 1.0;
+ this._windowWidth = 1.0;
+ this._timeWindowLeft = 0;
+ this._timeWindowRight = Infinity;
+ this._barHeight = dataProvider.barHeight();
+ this._barHeightDelta = this._isTopDown ? -this._barHeight : this._barHeight;
+ this._minWidth = 1;
+ this._paddingLeft = this._dataProvider.paddingLeft();
+ this._highlightedEntryIndex = -1;
+ this._selectedEntryIndex = -1;
+ this._textWidth = {};
+}
- __proto__: WebInspector.VBox.prototype
-};
+WebInspector.FlameChart.DividersBarHeight = 20;
/**
* @interface
@@ -222,6 +211,10 @@ WebInspector.FlameChartDataProvider.prototype = {
paddingLeft: function() { }
}
+WebInspector.FlameChart.Events = {
+ EntrySelected: "EntrySelected"
+}
+
/**
* @constructor
* @implements {WebInspector.TimelineGrid.Calculator}
@@ -241,7 +234,7 @@ WebInspector.FlameChart.Calculator.prototype = {
},
/**
- * @param {!WebInspector.FlameChart.MainPane} mainPane
+ * @param {!WebInspector.FlameChart} mainPane
*/
_updateBoundaries: function(mainPane)
{
@@ -306,333 +299,7 @@ WebInspector.FlameChart.Calculator.prototype = {
}
}
-/**
- * @constructor
- * @implements {WebInspector.TimelineGrid.Calculator}
- */
-WebInspector.FlameChart.OverviewCalculator = function()
-{
-}
-
-WebInspector.FlameChart.OverviewCalculator.prototype = {
- /**
- * @return {number}
- */
- paddingLeft: function()
- {
- return 0;
- },
-
- /**
- * @param {!WebInspector.FlameChart.OverviewPane} overviewPane
- */
- _updateBoundaries: function(overviewPane)
- {
- this._minimumBoundaries = 0;
- var totalTime = overviewPane._dataProvider.totalTime();
- this._maximumBoundaries = totalTime;
- this._xScaleFactor = overviewPane._overviewCanvas.width / totalTime;
- },
-
- /**
- * @param {number} time
- * @return {number}
- */
- computePosition: function(time)
- {
- return (time - this._minimumBoundaries) * this._xScaleFactor;
- },
-
- /**
- * @param {number} value
- * @param {number=} precision
- * @return {string}
- */
- formatTime: function(value, precision)
- {
- return Number.secondsToString((value + this._minimumBoundaries) / 1000);
- },
-
- /**
- * @return {number}
- */
- maximumBoundary: function()
- {
- return this._maximumBoundaries;
- },
-
- /**
- * @return {number}
- */
- minimumBoundary: function()
- {
- return this._minimumBoundaries;
- },
-
- /**
- * @return {number}
- */
- zeroTime: function()
- {
- return this._minimumBoundaries;
- },
-
- /**
- * @return {number}
- */
- boundarySpan: function()
- {
- return this._maximumBoundaries - this._minimumBoundaries;
- }
-}
-
-WebInspector.FlameChart.Events = {
- EntrySelected: "EntrySelected"
-}
-
-/**
- * @constructor
- */
-WebInspector.FlameChart.ColorGenerator = function()
-{
- this._colors = {};
- this._currentColorIndex = 0;
-}
-
-WebInspector.FlameChart.ColorGenerator.prototype = {
- /**
- * @param {string} id
- * @param {string|!CanvasGradient} color
- */
- setColorForID: function(id, color)
- {
- this._colors[id] = color;
- },
-
- /**
- * @param {!string} id
- * @param {number=} sat
- * @return {!string}
- */
- colorForID: function(id, sat)
- {
- if (typeof sat !== "number")
- sat = 100;
- var color = this._colors[id];
- if (!color) {
- color = this._createColor(this._currentColorIndex++, sat);
- this._colors[id] = color;
- }
- return color;
- },
-
- /**
- * @param {!number} index
- * @param {!number} sat
- */
- _createColor: function(index, sat)
- {
- var hue = (index * 7 + 12 * (index % 2)) % 360;
- return "hsla(" + hue + ", " + sat + "%, 66%, 0.7)";
- }
-}
-
-/**
- * @constructor
- * @extends {WebInspector.VBox}
- * @implements {WebInspector.FlameChartDelegate}
- * @param {!WebInspector.FlameChartDataProvider} dataProvider
- */
-WebInspector.FlameChart.OverviewPane = function(dataProvider)
-{
- WebInspector.VBox.call(this);
- this.element.classList.add("flame-chart-overview-pane");
- this._overviewContainer = this.element.createChild("div", "overview-container");
- this._overviewGrid = new WebInspector.OverviewGrid("flame-chart");
- this._overviewGrid.element.classList.add("fill");
- this._overviewCanvas = this._overviewContainer.createChild("canvas", "flame-chart-overview-canvas");
- this._overviewContainer.appendChild(this._overviewGrid.element);
- this._overviewCalculator = new WebInspector.FlameChart.OverviewCalculator();
- this._dataProvider = dataProvider;
-}
-
-WebInspector.FlameChart.OverviewPane.prototype = {
- /**
- * @param {number} windowStartTime
- * @param {number} windowEndTime
- */
- requestWindowTimes: function(windowStartTime, windowEndTime)
- {
- this._overviewGrid.setWindow(windowStartTime / this._dataProvider.totalTime(), windowEndTime / this._dataProvider.totalTime());
- },
-
- /**
- * @param {!number} timeLeft
- * @param {!number} timeRight
- */
- _selectRange: function(timeLeft, timeRight)
- {
- this._overviewGrid.setWindow(timeLeft / this._dataProvider.totalTime(), timeRight / this._dataProvider.totalTime());
- },
-
- /**
- * @return {?WebInspector.FlameChart.TimelineData}
- */
- _timelineData: function()
- {
- return this._dataProvider.timelineData();
- },
-
- onResize: function()
- {
- this._scheduleUpdate();
- },
-
- _scheduleUpdate: function()
- {
- if (this._updateTimerId)
- return;
- this._updateTimerId = requestAnimationFrame(this.update.bind(this));
- },
-
- update: function()
- {
- this._updateTimerId = 0;
- var timelineData = this._timelineData();
- if (!timelineData)
- return;
- this._resetCanvas(this._overviewContainer.clientWidth, this._overviewContainer.clientHeight - WebInspector.FlameChart.DividersBarHeight);
- this._overviewCalculator._updateBoundaries(this);
- this._overviewGrid.updateDividers(this._overviewCalculator);
- WebInspector.FlameChart.OverviewPane.drawOverviewCanvas(
- this._dataProvider,
- timelineData,
- this._overviewCanvas.getContext("2d"),
- this._overviewContainer.clientWidth,
- this._overviewContainer.clientHeight - WebInspector.FlameChart.DividersBarHeight
- );
- },
-
- /**
- * @param {!number} width
- * @param {!number} height
- */
- _resetCanvas: function(width, height)
- {
- var ratio = window.devicePixelRatio;
- this._overviewCanvas.width = width * ratio;
- this._overviewCanvas.height = height * ratio;
- },
-
- __proto__: WebInspector.VBox.prototype
-}
-
-/**
- * @param {!WebInspector.FlameChartDataProvider} dataProvider
- * @param {!WebInspector.FlameChart.TimelineData} timelineData
- * @param {!number} width
- */
-WebInspector.FlameChart.OverviewPane.calculateDrawData = function(dataProvider, timelineData, width)
-{
- var entryOffsets = timelineData.entryOffsets;
- var entryTotalTimes = timelineData.entryTotalTimes;
- var entryLevels = timelineData.entryLevels;
- var length = entryOffsets.length;
-
- var drawData = new Uint8Array(width);
- var scaleFactor = width / dataProvider.totalTime();
-
- for (var entryIndex = 0; entryIndex < length; ++entryIndex) {
- var start = Math.floor(entryOffsets[entryIndex] * scaleFactor);
- var finish = Math.floor((entryOffsets[entryIndex] + entryTotalTimes[entryIndex]) * scaleFactor);
- for (var x = start; x <= finish; ++x)
- drawData[x] = Math.max(drawData[x], entryLevels[entryIndex] + 1);
- }
- return drawData;
-}
-
-/**
- * @param {!WebInspector.FlameChartDataProvider} dataProvider
- * @param {!WebInspector.FlameChart.TimelineData} timelineData
- * @param {!Object} context
- * @param {!number} width
- * @param {!number} height
- */
-WebInspector.FlameChart.OverviewPane.drawOverviewCanvas = function(dataProvider, timelineData, context, width, height)
-{
- var drawData = WebInspector.FlameChart.OverviewPane.calculateDrawData(dataProvider, timelineData, width);
- if (!drawData)
- return;
-
- var ratio = window.devicePixelRatio;
- var canvasWidth = width * ratio;
- var canvasHeight = height * ratio;
-
- var yScaleFactor = canvasHeight / (dataProvider.maxStackDepth() * 1.1);
- context.lineWidth = 1;
- context.translate(0.5, 0.5);
- context.strokeStyle = "rgba(20,0,0,0.4)";
- context.fillStyle = "rgba(214,225,254,0.8)";
- context.moveTo(-1, canvasHeight - 1);
- if (drawData)
- context.lineTo(-1, Math.round(height - drawData[0] * yScaleFactor - 1));
- var value;
- for (var x = 0; x < width; ++x) {
- value = Math.round(canvasHeight - drawData[x] * yScaleFactor - 1);
- context.lineTo(x * ratio, value);
- }
- context.lineTo(canvasWidth + 1, value);
- context.lineTo(canvasWidth + 1, canvasHeight - 1);
- context.fill();
- context.stroke();
- context.closePath();
-}
-
-/**
- * @constructor
- * @extends {WebInspector.VBox}
- * @param {!WebInspector.FlameChartDataProvider} dataProvider
- * @param {!WebInspector.FlameChartDelegate} flameChartDelegate
- * @param {boolean} isTopDown
- * @param {boolean} timeBasedWindow
- */
-WebInspector.FlameChart.MainPane = function(dataProvider, flameChartDelegate, isTopDown, timeBasedWindow)
-{
- WebInspector.VBox.call(this);
- this.element.classList.add("flame-chart-main-pane");
- this._flameChartDelegate = flameChartDelegate;
- this._isTopDown = isTopDown;
- this._timeBasedWindow = timeBasedWindow;
-
- this._calculator = new WebInspector.FlameChart.Calculator();
-
- this._canvas = this.element.createChild("canvas");
- this._canvas.addEventListener("mousemove", this._onMouseMove.bind(this));
- this._canvas.addEventListener("mousewheel", this._onMouseWheel.bind(this), false);
- this._canvas.addEventListener("click", this._onClick.bind(this), false);
- WebInspector.installDragHandle(this._canvas, this._startCanvasDragging.bind(this), this._canvasDragging.bind(this), this._endCanvasDragging.bind(this), "move", null);
-
- this._entryInfo = this.element.createChild("div", "profile-entry-info");
- this._highlightElement = this.element.createChild("div", "flame-chart-highlight-element");
- this._selectedElement = this.element.createChild("div", "flame-chart-selected-element");
-
- this._dataProvider = dataProvider;
-
- this._windowLeft = 0.0;
- this._windowRight = 1.0;
- this._windowWidth = 1.0;
- this._timeWindowLeft = 0;
- this._timeWindowRight = Infinity;
- this._barHeight = dataProvider.barHeight();
- this._barHeightDelta = this._isTopDown ? -this._barHeight : this._barHeight;
- this._minWidth = 1;
- this._paddingLeft = this._dataProvider.paddingLeft();
- this._highlightedEntryIndex = -1;
- this._selectedEntryIndex = -1;
- this._textWidth = {};
-}
-
-WebInspector.FlameChart.MainPane.prototype = {
+WebInspector.FlameChart.prototype = {
_resetCanvas: function()
{
var ratio = window.devicePixelRatio;
« no previous file with comments | « Source/devtools/front_end/CPUProfileView.js ('k') | Source/devtools/front_end/ProfilesPanel.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698