Index: third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js |
diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js b/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js |
index e7ebb1c8d242182ac967b651f52befab6800a6ff..6e9766eb1edd294fb2df074989be757f1f9b9c09 100644 |
--- a/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js |
+++ b/third_party/WebKit/Source/devtools/front_end/timeline/CountersGraph.js |
@@ -27,20 +27,20 @@ |
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
*/ |
- |
/** |
- * @constructor |
- * @extends {WebInspector.VBox} |
* @implements {WebInspector.TimelineModeView} |
- * @param {!WebInspector.TimelineModeViewDelegate} delegate |
- * @param {!WebInspector.TimelineModel} model |
- * @param {!Array<!WebInspector.TimelineModel.Filter>} filters |
+ * @unrestricted |
*/ |
-WebInspector.CountersGraph = function(delegate, model, filters) |
-{ |
- WebInspector.VBox.call(this); |
+WebInspector.CountersGraph = class extends WebInspector.VBox { |
+ /** |
+ * @param {!WebInspector.TimelineModeViewDelegate} delegate |
+ * @param {!WebInspector.TimelineModel} model |
+ * @param {!Array<!WebInspector.TimelineModel.Filter>} filters |
+ */ |
+ constructor(delegate, model, filters) { |
+ super(); |
- this.element.id = "memory-graphs-container"; |
+ this.element.id = 'memory-graphs-container'; |
this._delegate = delegate; |
this._model = model; |
@@ -49,7 +49,7 @@ WebInspector.CountersGraph = function(delegate, model, filters) |
// Create selectors |
this._infoWidget = new WebInspector.HBox(); |
- this._infoWidget.element.classList.add("memory-counter-selector-swatches", "timeline-toolbar-resizer"); |
+ this._infoWidget.element.classList.add('memory-counter-selector-swatches', 'timeline-toolbar-resizer'); |
this._infoWidget.show(this.element); |
this._graphsContainer = new WebInspector.VBox(); |
@@ -58,346 +58,320 @@ WebInspector.CountersGraph = function(delegate, model, filters) |
canvasWidget.show(this._graphsContainer.element); |
this._createCurrentValuesBar(); |
this._canvasContainer = canvasWidget.element; |
- this._canvasContainer.id = "memory-graphs-canvas-container"; |
- this._canvas = this._canvasContainer.createChild("canvas"); |
- this._canvas.id = "memory-counters-graph"; |
- |
- this._canvasContainer.addEventListener("mouseover", this._onMouseMove.bind(this), true); |
- this._canvasContainer.addEventListener("mousemove", this._onMouseMove.bind(this), true); |
- this._canvasContainer.addEventListener("mouseleave", this._onMouseLeave.bind(this), true); |
- this._canvasContainer.addEventListener("click", this._onClick.bind(this), true); |
+ this._canvasContainer.id = 'memory-graphs-canvas-container'; |
+ this._canvas = this._canvasContainer.createChild('canvas'); |
+ this._canvas.id = 'memory-counters-graph'; |
+ |
+ this._canvasContainer.addEventListener('mouseover', this._onMouseMove.bind(this), true); |
+ this._canvasContainer.addEventListener('mousemove', this._onMouseMove.bind(this), true); |
+ this._canvasContainer.addEventListener('mouseleave', this._onMouseLeave.bind(this), true); |
+ this._canvasContainer.addEventListener('click', this._onClick.bind(this), true); |
// We create extra timeline grid here to reuse its event dividers. |
this._timelineGrid = new WebInspector.TimelineGrid(); |
this._canvasContainer.appendChild(this._timelineGrid.dividersElement); |
this._counters = []; |
this._counterUI = []; |
-}; |
- |
-WebInspector.CountersGraph.prototype = { |
- _createCurrentValuesBar: function() |
- { |
- this._currentValuesBar = this._graphsContainer.element.createChild("div"); |
- this._currentValuesBar.id = "counter-values-bar"; |
- }, |
- |
- /** |
- * @param {string} uiName |
- * @param {string} uiValueTemplate |
- * @param {string} color |
- * @param {function(number):string=} formatter |
- * @return {!WebInspector.CountersGraph.Counter} |
- */ |
- createCounter: function(uiName, uiValueTemplate, color, formatter) |
- { |
- var counter = new WebInspector.CountersGraph.Counter(); |
- this._counters.push(counter); |
- this._counterUI.push(new WebInspector.CountersGraph.CounterUI(this, uiName, uiValueTemplate, color, counter, formatter)); |
- return counter; |
- }, |
- |
- /** |
- * @override |
- * @return {!WebInspector.Widget} |
- */ |
- view: function() |
- { |
- return this; |
- }, |
- |
- /** |
- * @override |
- */ |
- dispose: function() |
- { |
- }, |
- |
- /** |
- * @override |
- */ |
- reset: function() |
- { |
- for (var i = 0; i < this._counters.length; ++i) { |
- this._counters[i].reset(); |
- this._counterUI[i].reset(); |
- } |
- this.refresh(); |
- }, |
- |
- /** |
- * @override |
- * @return {?Element} |
- */ |
- resizerElement: function() |
- { |
- return this._infoWidget.element; |
- }, |
- |
- _resize: function() |
- { |
- var parentElement = this._canvas.parentElement; |
- this._canvas.width = parentElement.clientWidth * window.devicePixelRatio; |
- this._canvas.height = parentElement.clientHeight * window.devicePixelRatio; |
- var timelinePaddingLeft = 15; |
- this._calculator.setDisplayWindow(this._canvas.width, timelinePaddingLeft); |
- this.refresh(); |
- }, |
- |
- /** |
- * @override |
- * @param {number} startTime |
- * @param {number} endTime |
- */ |
- setWindowTimes: function(startTime, endTime) |
- { |
- this._calculator.setWindow(startTime, endTime); |
- this.scheduleRefresh(); |
- }, |
- |
- scheduleRefresh: function() |
- { |
- WebInspector.invokeOnceAfterBatchUpdate(this, this.refresh); |
- }, |
- |
- draw: function() |
- { |
- for (var i = 0; i < this._counters.length; ++i) { |
- this._counters[i]._calculateVisibleIndexes(this._calculator); |
- this._counters[i]._calculateXValues(this._canvas.width); |
- } |
- this._clear(); |
- |
- for (var i = 0; i < this._counterUI.length; i++) |
- this._counterUI[i]._drawGraph(this._canvas); |
- }, |
- |
- /** |
- * @param {!Event} event |
- */ |
- _onClick: function(event) |
- { |
- var x = event.x - this._canvasContainer.totalOffsetLeft(); |
- var minDistance = Infinity; |
- var bestTime; |
- for (var i = 0; i < this._counterUI.length; ++i) { |
- var counterUI = this._counterUI[i]; |
- if (!counterUI.counter.times.length) |
- continue; |
- var index = counterUI._recordIndexAt(x); |
- var distance = Math.abs(x * window.devicePixelRatio - counterUI.counter.x[index]); |
- if (distance < minDistance) { |
- minDistance = distance; |
- bestTime = counterUI.counter.times[index]; |
- } |
- } |
- if (bestTime !== undefined) |
- this._delegate.selectEntryAtTime(bestTime); |
- }, |
- |
- /** |
- * @param {!Event} event |
- */ |
- _onMouseLeave: function(event) |
- { |
- delete this._markerXPosition; |
- this._clearCurrentValueAndMarker(); |
- }, |
- |
- _clearCurrentValueAndMarker: function() |
- { |
- for (var i = 0; i < this._counterUI.length; i++) |
- this._counterUI[i]._clearCurrentValueAndMarker(); |
- }, |
- |
- /** |
- * @param {!Event} event |
- */ |
- _onMouseMove: function(event) |
- { |
- var x = event.x - this._canvasContainer.totalOffsetLeft(); |
- this._markerXPosition = x; |
- this._refreshCurrentValues(); |
- }, |
- |
- _refreshCurrentValues: function() |
- { |
- if (this._markerXPosition === undefined) |
- return; |
- for (var i = 0; i < this._counterUI.length; ++i) |
- this._counterUI[i].updateCurrentValue(this._markerXPosition); |
- }, |
- |
- refresh: function() |
- { |
- this._timelineGrid.updateDividers(this._calculator); |
- this.draw(); |
- this._refreshCurrentValues(); |
- }, |
- |
- /** |
- * @override |
- */ |
- refreshRecords: function() { }, |
- |
- _clear: function() |
- { |
- var ctx = this._canvas.getContext("2d"); |
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); |
- }, |
- |
- /** |
- * @override |
- * @param {?WebInspector.TracingModel.Event} event |
- * @param {string=} regex |
- * @param {boolean=} select |
- */ |
- highlightSearchResult: function(event, regex, select) |
- { |
- }, |
- |
- /** |
- * @override |
- * @param {?WebInspector.TracingModel.Event} event |
- */ |
- highlightEvent: function(event) |
- { |
- }, |
- |
- /** |
- * @override |
- * @param {?WebInspector.TimelineSelection} selection |
- */ |
- setSelection: function(selection) |
- { |
- }, |
- |
- __proto__: WebInspector.VBox.prototype |
+ } |
+ |
+ _createCurrentValuesBar() { |
+ this._currentValuesBar = this._graphsContainer.element.createChild('div'); |
+ this._currentValuesBar.id = 'counter-values-bar'; |
+ } |
+ |
+ /** |
+ * @param {string} uiName |
+ * @param {string} uiValueTemplate |
+ * @param {string} color |
+ * @param {function(number):string=} formatter |
+ * @return {!WebInspector.CountersGraph.Counter} |
+ */ |
+ createCounter(uiName, uiValueTemplate, color, formatter) { |
+ var counter = new WebInspector.CountersGraph.Counter(); |
+ this._counters.push(counter); |
+ this._counterUI.push( |
+ new WebInspector.CountersGraph.CounterUI(this, uiName, uiValueTemplate, color, counter, formatter)); |
+ return counter; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {!WebInspector.Widget} |
+ */ |
+ view() { |
+ return this; |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ dispose() { |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ reset() { |
+ for (var i = 0; i < this._counters.length; ++i) { |
+ this._counters[i].reset(); |
+ this._counterUI[i].reset(); |
+ } |
+ this.refresh(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {?Element} |
+ */ |
+ resizerElement() { |
+ return this._infoWidget.element; |
+ } |
+ |
+ _resize() { |
+ var parentElement = this._canvas.parentElement; |
+ this._canvas.width = parentElement.clientWidth * window.devicePixelRatio; |
+ this._canvas.height = parentElement.clientHeight * window.devicePixelRatio; |
+ var timelinePaddingLeft = 15; |
+ this._calculator.setDisplayWindow(this._canvas.width, timelinePaddingLeft); |
+ this.refresh(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {number} startTime |
+ * @param {number} endTime |
+ */ |
+ setWindowTimes(startTime, endTime) { |
+ this._calculator.setWindow(startTime, endTime); |
+ this.scheduleRefresh(); |
+ } |
+ |
+ scheduleRefresh() { |
+ WebInspector.invokeOnceAfterBatchUpdate(this, this.refresh); |
+ } |
+ |
+ draw() { |
+ for (var i = 0; i < this._counters.length; ++i) { |
+ this._counters[i]._calculateVisibleIndexes(this._calculator); |
+ this._counters[i]._calculateXValues(this._canvas.width); |
+ } |
+ this._clear(); |
+ |
+ for (var i = 0; i < this._counterUI.length; i++) |
+ this._counterUI[i]._drawGraph(this._canvas); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _onClick(event) { |
+ var x = event.x - this._canvasContainer.totalOffsetLeft(); |
+ var minDistance = Infinity; |
+ var bestTime; |
+ for (var i = 0; i < this._counterUI.length; ++i) { |
+ var counterUI = this._counterUI[i]; |
+ if (!counterUI.counter.times.length) |
+ continue; |
+ var index = counterUI._recordIndexAt(x); |
+ var distance = Math.abs(x * window.devicePixelRatio - counterUI.counter.x[index]); |
+ if (distance < minDistance) { |
+ minDistance = distance; |
+ bestTime = counterUI.counter.times[index]; |
+ } |
+ } |
+ if (bestTime !== undefined) |
+ this._delegate.selectEntryAtTime(bestTime); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _onMouseLeave(event) { |
+ delete this._markerXPosition; |
+ this._clearCurrentValueAndMarker(); |
+ } |
+ |
+ _clearCurrentValueAndMarker() { |
+ for (var i = 0; i < this._counterUI.length; i++) |
+ this._counterUI[i]._clearCurrentValueAndMarker(); |
+ } |
+ |
+ /** |
+ * @param {!Event} event |
+ */ |
+ _onMouseMove(event) { |
+ var x = event.x - this._canvasContainer.totalOffsetLeft(); |
+ this._markerXPosition = x; |
+ this._refreshCurrentValues(); |
+ } |
+ |
+ _refreshCurrentValues() { |
+ if (this._markerXPosition === undefined) |
+ return; |
+ for (var i = 0; i < this._counterUI.length; ++i) |
+ this._counterUI[i].updateCurrentValue(this._markerXPosition); |
+ } |
+ |
+ refresh() { |
+ this._timelineGrid.updateDividers(this._calculator); |
+ this.draw(); |
+ this._refreshCurrentValues(); |
+ } |
+ |
+ /** |
+ * @override |
+ */ |
+ refreshRecords() { |
+ } |
+ |
+ _clear() { |
+ var ctx = this._canvas.getContext('2d'); |
+ ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {?WebInspector.TracingModel.Event} event |
+ * @param {string=} regex |
+ * @param {boolean=} select |
+ */ |
+ highlightSearchResult(event, regex, select) { |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {?WebInspector.TracingModel.Event} event |
+ */ |
+ highlightEvent(event) { |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {?WebInspector.TimelineSelection} selection |
+ */ |
+ setSelection(selection) { |
+ } |
}; |
/** |
- * @constructor |
+ * @unrestricted |
*/ |
-WebInspector.CountersGraph.Counter = function() |
-{ |
+WebInspector.CountersGraph.Counter = class { |
+ constructor() { |
this.times = []; |
this.values = []; |
-}; |
- |
-WebInspector.CountersGraph.Counter.prototype = { |
- /** |
- * @param {number} time |
- * @param {number} value |
- */ |
- appendSample: function(time, value) |
- { |
- if (this.values.length && this.values.peekLast() === value) |
- return; |
- this.times.push(time); |
- this.values.push(value); |
- }, |
- |
- reset: function() |
- { |
- this.times = []; |
- this.values = []; |
- }, |
- |
- /** |
- * @param {number} value |
- */ |
- setLimit: function(value) |
- { |
- this._limitValue = value; |
- }, |
- |
- /** |
- * @return {!{min: number, max: number}} |
- */ |
- _calculateBounds: function() |
- { |
- var maxValue; |
- var minValue; |
- for (var i = this._minimumIndex; i <= this._maximumIndex; i++) { |
- var value = this.values[i]; |
- if (minValue === undefined || value < minValue) |
- minValue = value; |
- if (maxValue === undefined || value > maxValue) |
- maxValue = value; |
- } |
- minValue = minValue || 0; |
- maxValue = maxValue || 1; |
- if (this._limitValue) { |
- if (maxValue > this._limitValue * 0.5) |
- maxValue = Math.max(maxValue, this._limitValue); |
- minValue = Math.min(minValue, this._limitValue); |
- } |
- return { min: minValue, max: maxValue }; |
- }, |
- |
- /** |
- * @param {!WebInspector.CounterGraphCalculator} calculator |
- */ |
- _calculateVisibleIndexes: function(calculator) |
- { |
- var start = calculator.minimumBoundary(); |
- var end = calculator.maximumBoundary(); |
- |
- // Maximum index of element whose time <= start. |
- this._minimumIndex = Number.constrain(this.times.upperBound(start) - 1, 0, this.times.length - 1); |
- |
- // Minimum index of element whose time >= end. |
- this._maximumIndex = Number.constrain(this.times.lowerBound(end), 0, this.times.length - 1); |
- |
- // Current window bounds. |
- this._minTime = start; |
- this._maxTime = end; |
- }, |
- |
- /** |
- * @param {number} width |
- */ |
- _calculateXValues: function(width) |
- { |
- if (!this.values.length) |
- return; |
- |
- var xFactor = width / (this._maxTime - this._minTime); |
- |
- this.x = new Array(this.values.length); |
- for (var i = this._minimumIndex + 1; i <= this._maximumIndex; i++) |
- this.x[i] = xFactor * (this.times[i] - this._minTime); |
+ } |
+ |
+ /** |
+ * @param {number} time |
+ * @param {number} value |
+ */ |
+ appendSample(time, value) { |
+ if (this.values.length && this.values.peekLast() === value) |
+ return; |
+ this.times.push(time); |
+ this.values.push(value); |
+ } |
+ |
+ reset() { |
+ this.times = []; |
+ this.values = []; |
+ } |
+ |
+ /** |
+ * @param {number} value |
+ */ |
+ setLimit(value) { |
+ this._limitValue = value; |
+ } |
+ |
+ /** |
+ * @return {!{min: number, max: number}} |
+ */ |
+ _calculateBounds() { |
+ var maxValue; |
+ var minValue; |
+ for (var i = this._minimumIndex; i <= this._maximumIndex; i++) { |
+ var value = this.values[i]; |
+ if (minValue === undefined || value < minValue) |
+ minValue = value; |
+ if (maxValue === undefined || value > maxValue) |
+ maxValue = value; |
+ } |
+ minValue = minValue || 0; |
+ maxValue = maxValue || 1; |
+ if (this._limitValue) { |
+ if (maxValue > this._limitValue * 0.5) |
+ maxValue = Math.max(maxValue, this._limitValue); |
+ minValue = Math.min(minValue, this._limitValue); |
} |
+ return {min: minValue, max: maxValue}; |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.CounterGraphCalculator} calculator |
+ */ |
+ _calculateVisibleIndexes(calculator) { |
+ var start = calculator.minimumBoundary(); |
+ var end = calculator.maximumBoundary(); |
+ |
+ // Maximum index of element whose time <= start. |
+ this._minimumIndex = Number.constrain(this.times.upperBound(start) - 1, 0, this.times.length - 1); |
+ |
+ // Minimum index of element whose time >= end. |
+ this._maximumIndex = Number.constrain(this.times.lowerBound(end), 0, this.times.length - 1); |
+ |
+ // Current window bounds. |
+ this._minTime = start; |
+ this._maxTime = end; |
+ } |
+ |
+ /** |
+ * @param {number} width |
+ */ |
+ _calculateXValues(width) { |
+ if (!this.values.length) |
+ return; |
+ |
+ var xFactor = width / (this._maxTime - this._minTime); |
+ |
+ this.x = new Array(this.values.length); |
+ for (var i = this._minimumIndex + 1; i <= this._maximumIndex; i++) |
+ this.x[i] = xFactor * (this.times[i] - this._minTime); |
+ } |
}; |
/** |
- * @constructor |
- * @param {!WebInspector.CountersGraph} memoryCountersPane |
- * @param {string} title |
- * @param {string} currentValueLabel |
- * @param {string} graphColor |
- * @param {!WebInspector.CountersGraph.Counter} counter |
- * @param {(function(number): string)|undefined} formatter |
+ * @unrestricted |
*/ |
-WebInspector.CountersGraph.CounterUI = function(memoryCountersPane, title, currentValueLabel, graphColor, counter, formatter) |
-{ |
+WebInspector.CountersGraph.CounterUI = class { |
+ /** |
+ * @param {!WebInspector.CountersGraph} memoryCountersPane |
+ * @param {string} title |
+ * @param {string} currentValueLabel |
+ * @param {string} graphColor |
+ * @param {!WebInspector.CountersGraph.Counter} counter |
+ * @param {(function(number): string)|undefined} formatter |
+ */ |
+ constructor(memoryCountersPane, title, currentValueLabel, graphColor, counter, formatter) { |
this._memoryCountersPane = memoryCountersPane; |
this.counter = counter; |
this._formatter = formatter || Number.withThousandsSeparator; |
- var container = memoryCountersPane._infoWidget.element.createChild("div", "memory-counter-selector-info"); |
+ var container = memoryCountersPane._infoWidget.element.createChild('div', 'memory-counter-selector-info'); |
- this._setting = WebInspector.settings.createSetting("timelineCountersGraph-" + title, true); |
+ this._setting = WebInspector.settings.createSetting('timelineCountersGraph-' + title, true); |
this._filter = new WebInspector.ToolbarCheckbox(title, title, this._setting); |
- this._filter.inputElement.classList.add("-theme-preserve"); |
+ this._filter.inputElement.classList.add('-theme-preserve'); |
var color = WebInspector.Color.parse(graphColor).setAlpha(0.5).asString(WebInspector.Color.Format.RGBA); |
if (color) { |
- this._filter.element.backgroundColor = color; |
- this._filter.element.borderColor = "transparent"; |
+ this._filter.element.backgroundColor = color; |
+ this._filter.element.borderColor = 'transparent'; |
} |
- this._filter.inputElement.addEventListener("click", this._toggleCounterGraph.bind(this)); |
+ this._filter.inputElement.addEventListener('click', this._toggleCounterGraph.bind(this)); |
container.appendChild(this._filter.element); |
- this._range = this._filter.element.createChild("span", "range"); |
+ this._range = this._filter.element.createChild('span', 'range'); |
- this._value = memoryCountersPane._currentValuesBar.createChild("span", "memory-counter-value"); |
+ this._value = memoryCountersPane._currentValuesBar.createChild('span', 'memory-counter-value'); |
this._value.style.color = graphColor; |
this.graphColor = graphColor; |
this.limitColor = WebInspector.Color.parse(graphColor).setAlpha(0.3).asString(WebInspector.Color.Format.RGBA); |
@@ -405,233 +379,218 @@ WebInspector.CountersGraph.CounterUI = function(memoryCountersPane, title, curre |
this._verticalPadding = 10; |
this._currentValueLabel = currentValueLabel; |
- this._marker = memoryCountersPane._canvasContainer.createChild("div", "memory-counter-marker"); |
+ this._marker = memoryCountersPane._canvasContainer.createChild('div', 'memory-counter-marker'); |
this._marker.style.backgroundColor = graphColor; |
this._clearCurrentValueAndMarker(); |
-}; |
- |
-WebInspector.CountersGraph.CounterUI.prototype = { |
- reset: function() |
- { |
- this._range.textContent = ""; |
- }, |
- |
- /** |
- * @param {number} minValue |
- * @param {number} maxValue |
- */ |
- setRange: function(minValue, maxValue) |
- { |
- var min = this._formatter(minValue); |
- var max = this._formatter(maxValue); |
- this._range.textContent = WebInspector.UIString("[%s\u2009\u2013\u2009%s]", min, max); |
- }, |
- |
- /** |
- * @param {!WebInspector.Event} event |
- */ |
- _toggleCounterGraph: function(event) |
- { |
- this._value.classList.toggle("hidden", !this._filter.checked()); |
- this._memoryCountersPane.refresh(); |
- }, |
- |
- /** |
- * @param {number} x |
- * @return {number} |
- */ |
- _recordIndexAt: function(x) |
- { |
- return this.counter.x.upperBound(x * window.devicePixelRatio, null, this.counter._minimumIndex + 1, this.counter._maximumIndex + 1) - 1; |
- }, |
- |
- /** |
- * @param {number} x |
- */ |
- updateCurrentValue: function(x) |
- { |
- if (!this.visible() || !this.counter.values.length || !this.counter.x) |
- return; |
- var index = this._recordIndexAt(x); |
- var value = Number.withThousandsSeparator(this.counter.values[index]); |
- this._value.textContent = WebInspector.UIString(this._currentValueLabel, value); |
- var y = this.graphYValues[index] / window.devicePixelRatio; |
- this._marker.style.left = x + "px"; |
- this._marker.style.top = y + "px"; |
- this._marker.classList.remove("hidden"); |
- }, |
- |
- _clearCurrentValueAndMarker: function() |
- { |
- this._value.textContent = ""; |
- this._marker.classList.add("hidden"); |
- }, |
- |
- /** |
- * @param {!HTMLCanvasElement} canvas |
- */ |
- _drawGraph: function(canvas) |
- { |
- var ctx = canvas.getContext("2d"); |
- var width = canvas.width; |
- var height = canvas.height - 2 * this._verticalPadding; |
- if (height <= 0) { |
- this.graphYValues = []; |
- return; |
- } |
- var originY = this._verticalPadding; |
- var counter = this.counter; |
- var values = counter.values; |
- |
- if (!values.length) |
- return; |
- |
- var bounds = counter._calculateBounds(); |
- var minValue = bounds.min; |
- var maxValue = bounds.max; |
- this.setRange(minValue, maxValue); |
- |
- if (!this.visible()) |
- return; |
- |
- var yValues = this.graphYValues; |
- var maxYRange = maxValue - minValue; |
- var yFactor = maxYRange ? height / (maxYRange) : 1; |
- |
- ctx.save(); |
- ctx.lineWidth = window.devicePixelRatio; |
- if (ctx.lineWidth % 2) |
- ctx.translate(0.5, 0.5); |
- ctx.beginPath(); |
- var value = values[counter._minimumIndex]; |
- var currentY = Math.round(originY + height - (value - minValue) * yFactor); |
- ctx.moveTo(0, currentY); |
- for (var i = counter._minimumIndex; i <= counter._maximumIndex; i++) { |
- var x = Math.round(counter.x[i]); |
- ctx.lineTo(x, currentY); |
- var currentValue = values[i]; |
- if (typeof currentValue !== "undefined") |
- value = currentValue; |
- currentY = Math.round(originY + height - (value - minValue) * yFactor); |
- ctx.lineTo(x, currentY); |
- yValues[i] = currentY; |
- } |
- yValues.length = i; |
- ctx.lineTo(width, currentY); |
- ctx.strokeStyle = this.graphColor; |
- ctx.stroke(); |
- if (counter._limitValue) { |
- var limitLineY = Math.round(originY + height - (counter._limitValue - minValue) * yFactor); |
- ctx.moveTo(0, limitLineY); |
- ctx.lineTo(width, limitLineY); |
- ctx.strokeStyle = this.limitColor; |
- ctx.stroke(); |
- } |
- ctx.closePath(); |
- ctx.restore(); |
- }, |
- |
- /** |
- * @return {boolean} |
- */ |
- visible: function() |
- { |
- return this._filter.checked(); |
+ } |
+ |
+ reset() { |
+ this._range.textContent = ''; |
+ } |
+ |
+ /** |
+ * @param {number} minValue |
+ * @param {number} maxValue |
+ */ |
+ setRange(minValue, maxValue) { |
+ var min = this._formatter(minValue); |
+ var max = this._formatter(maxValue); |
+ this._range.textContent = WebInspector.UIString('[%s\u2009\u2013\u2009%s]', min, max); |
+ } |
+ |
+ /** |
+ * @param {!WebInspector.Event} event |
+ */ |
+ _toggleCounterGraph(event) { |
+ this._value.classList.toggle('hidden', !this._filter.checked()); |
+ this._memoryCountersPane.refresh(); |
+ } |
+ |
+ /** |
+ * @param {number} x |
+ * @return {number} |
+ */ |
+ _recordIndexAt(x) { |
+ return this.counter.x.upperBound( |
+ x * window.devicePixelRatio, null, this.counter._minimumIndex + 1, this.counter._maximumIndex + 1) - |
+ 1; |
+ } |
+ |
+ /** |
+ * @param {number} x |
+ */ |
+ updateCurrentValue(x) { |
+ if (!this.visible() || !this.counter.values.length || !this.counter.x) |
+ return; |
+ var index = this._recordIndexAt(x); |
+ var value = Number.withThousandsSeparator(this.counter.values[index]); |
+ this._value.textContent = WebInspector.UIString(this._currentValueLabel, value); |
+ var y = this.graphYValues[index] / window.devicePixelRatio; |
+ this._marker.style.left = x + 'px'; |
+ this._marker.style.top = y + 'px'; |
+ this._marker.classList.remove('hidden'); |
+ } |
+ |
+ _clearCurrentValueAndMarker() { |
+ this._value.textContent = ''; |
+ this._marker.classList.add('hidden'); |
+ } |
+ |
+ /** |
+ * @param {!HTMLCanvasElement} canvas |
+ */ |
+ _drawGraph(canvas) { |
+ var ctx = canvas.getContext('2d'); |
+ var width = canvas.width; |
+ var height = canvas.height - 2 * this._verticalPadding; |
+ if (height <= 0) { |
+ this.graphYValues = []; |
+ return; |
+ } |
+ var originY = this._verticalPadding; |
+ var counter = this.counter; |
+ var values = counter.values; |
+ |
+ if (!values.length) |
+ return; |
+ |
+ var bounds = counter._calculateBounds(); |
+ var minValue = bounds.min; |
+ var maxValue = bounds.max; |
+ this.setRange(minValue, maxValue); |
+ |
+ if (!this.visible()) |
+ return; |
+ |
+ var yValues = this.graphYValues; |
+ var maxYRange = maxValue - minValue; |
+ var yFactor = maxYRange ? height / (maxYRange) : 1; |
+ |
+ ctx.save(); |
+ ctx.lineWidth = window.devicePixelRatio; |
+ if (ctx.lineWidth % 2) |
+ ctx.translate(0.5, 0.5); |
+ ctx.beginPath(); |
+ var value = values[counter._minimumIndex]; |
+ var currentY = Math.round(originY + height - (value - minValue) * yFactor); |
+ ctx.moveTo(0, currentY); |
+ for (var i = counter._minimumIndex; i <= counter._maximumIndex; i++) { |
+ var x = Math.round(counter.x[i]); |
+ ctx.lineTo(x, currentY); |
+ var currentValue = values[i]; |
+ if (typeof currentValue !== 'undefined') |
+ value = currentValue; |
+ currentY = Math.round(originY + height - (value - minValue) * yFactor); |
+ ctx.lineTo(x, currentY); |
+ yValues[i] = currentY; |
} |
+ yValues.length = i; |
+ ctx.lineTo(width, currentY); |
+ ctx.strokeStyle = this.graphColor; |
+ ctx.stroke(); |
+ if (counter._limitValue) { |
+ var limitLineY = Math.round(originY + height - (counter._limitValue - minValue) * yFactor); |
+ ctx.moveTo(0, limitLineY); |
+ ctx.lineTo(width, limitLineY); |
+ ctx.strokeStyle = this.limitColor; |
+ ctx.stroke(); |
+ } |
+ ctx.closePath(); |
+ ctx.restore(); |
+ } |
+ |
+ /** |
+ * @return {boolean} |
+ */ |
+ visible() { |
+ return this._filter.checked(); |
+ } |
}; |
/** |
- * @constructor |
- * @param {!WebInspector.TimelineModel} model |
* @implements {WebInspector.TimelineGrid.Calculator} |
+ * @unrestricted |
*/ |
-WebInspector.CounterGraphCalculator = function(model) |
-{ |
+WebInspector.CounterGraphCalculator = class { |
+ /** |
+ * @param {!WebInspector.TimelineModel} model |
+ */ |
+ constructor(model) { |
this._model = model; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {number} |
+ */ |
+ paddingLeft() { |
+ return this._paddingLeft; |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {number} time |
+ * @return {number} |
+ */ |
+ computePosition(time) { |
+ return (time - this._minimumBoundary) / this.boundarySpan() * this._workingArea + this._paddingLeft; |
+ } |
+ |
+ setWindow(minimumBoundary, maximumBoundary) { |
+ this._minimumBoundary = minimumBoundary; |
+ this._maximumBoundary = maximumBoundary; |
+ } |
+ |
+ /** |
+ * @param {number} clientWidth |
+ * @param {number=} paddingLeft |
+ */ |
+ setDisplayWindow(clientWidth, paddingLeft) { |
+ this._paddingLeft = paddingLeft || 0; |
+ this._workingArea = clientWidth - WebInspector.CounterGraphCalculator._minWidth - this._paddingLeft; |
+ } |
+ |
+ /** |
+ * @override |
+ * @param {number} value |
+ * @param {number=} precision |
+ * @return {string} |
+ */ |
+ formatValue(value, precision) { |
+ return Number.preciseMillisToString(value - this.zeroTime(), precision); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {number} |
+ */ |
+ maximumBoundary() { |
+ return this._maximumBoundary; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {number} |
+ */ |
+ minimumBoundary() { |
+ return this._minimumBoundary; |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {number} |
+ */ |
+ zeroTime() { |
+ return this._model.minimumRecordTime(); |
+ } |
+ |
+ /** |
+ * @override |
+ * @return {number} |
+ */ |
+ boundarySpan() { |
+ return this._maximumBoundary - this._minimumBoundary; |
+ } |
}; |
WebInspector.CounterGraphCalculator._minWidth = 5; |
- |
-WebInspector.CounterGraphCalculator.prototype = { |
- /** |
- * @override |
- * @return {number} |
- */ |
- paddingLeft: function() |
- { |
- return this._paddingLeft; |
- }, |
- |
- /** |
- * @override |
- * @param {number} time |
- * @return {number} |
- */ |
- computePosition: function(time) |
- { |
- return (time - this._minimumBoundary) / this.boundarySpan() * this._workingArea + this._paddingLeft; |
- }, |
- |
- setWindow: function(minimumBoundary, maximumBoundary) |
- { |
- this._minimumBoundary = minimumBoundary; |
- this._maximumBoundary = maximumBoundary; |
- }, |
- |
- /** |
- * @param {number} clientWidth |
- * @param {number=} paddingLeft |
- */ |
- setDisplayWindow: function(clientWidth, paddingLeft) |
- { |
- this._paddingLeft = paddingLeft || 0; |
- this._workingArea = clientWidth - WebInspector.CounterGraphCalculator._minWidth - this._paddingLeft; |
- }, |
- |
- /** |
- * @override |
- * @param {number} value |
- * @param {number=} precision |
- * @return {string} |
- */ |
- formatValue: function(value, precision) |
- { |
- return Number.preciseMillisToString(value - this.zeroTime(), precision); |
- }, |
- |
- /** |
- * @override |
- * @return {number} |
- */ |
- maximumBoundary: function() |
- { |
- return this._maximumBoundary; |
- }, |
- |
- /** |
- * @override |
- * @return {number} |
- */ |
- minimumBoundary: function() |
- { |
- return this._minimumBoundary; |
- }, |
- |
- /** |
- * @override |
- * @return {number} |
- */ |
- zeroTime: function() |
- { |
- return this._model.minimumRecordTime(); |
- }, |
- |
- /** |
- * @override |
- * @return {number} |
- */ |
- boundarySpan: function() |
- { |
- return this._maximumBoundary - this._minimumBoundary; |
- } |
-}; |