Index: Source/devtools/front_end/MemoryStatistics.js |
diff --git a/Source/devtools/front_end/MemoryStatistics.js b/Source/devtools/front_end/MemoryStatistics.js |
deleted file mode 100644 |
index da499b347fa8f2c2e559a02c1c0b84b208398425..0000000000000000000000000000000000000000 |
--- a/Source/devtools/front_end/MemoryStatistics.js |
+++ /dev/null |
@@ -1,441 +0,0 @@ |
-/* |
- * Copyright (C) 2012 Google Inc. All rights reserved. |
- * |
- * Redistribution and use in source and binary forms, with or without |
- * modification, are permitted provided that the following conditions are |
- * met: |
- * |
- * * Redistributions of source code must retain the above copyright |
- * notice, this list of conditions and the following disclaimer. |
- * * Redistributions in binary form must reproduce the above |
- * copyright notice, this list of conditions and the following disclaimer |
- * in the documentation and/or other materials provided with the |
- * distribution. |
- * * Neither the name of Google Inc. nor the names of its |
- * contributors may be used to endorse or promote products derived from |
- * this software without specific prior written permission. |
- * |
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
- * (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.SplitView} |
- * @param {!WebInspector.TimelineModeViewDelegate} delegate |
- * @param {!WebInspector.TimelineModel} model |
- */ |
-WebInspector.MemoryStatistics = function(delegate, model) |
-{ |
- WebInspector.SplitView.call(this, true, false); |
- |
- this.element.id = "memory-graphs-container"; |
- |
- this._delegate = delegate; |
- this._model = model; |
- this._calculator = new WebInspector.TimelineCalculator(this._model); |
- |
- this._graphsContainer = this.mainElement(); |
- this._createCurrentValuesBar(); |
- this._canvasView = new WebInspector.VBoxWithResizeCallback(this._resize.bind(this)); |
- this._canvasView.show(this._graphsContainer); |
- this._canvasContainer = this._canvasView.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("mouseout", this._onMouseOut.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); |
- |
- // Populate sidebar |
- this.sidebarElement().createChild("div", "sidebar-tree sidebar-tree-section").textContent = WebInspector.UIString("COUNTERS"); |
- this.createAllCounters(); |
-} |
- |
-/** |
- * @constructor |
- * @param {string} counterName |
- */ |
-WebInspector.MemoryStatistics.Counter = function(counterName) |
-{ |
- this.counterName = counterName; |
- this.times = []; |
- this.values = []; |
-} |
- |
-WebInspector.MemoryStatistics.Counter.prototype = { |
- /** |
- * @param {number} time |
- * @param {!TimelineAgent.Counters} counters |
- */ |
- appendSample: function(time, counters) |
- { |
- var value = counters[this.counterName]; |
- if (value === undefined) |
- return; |
- if (this.values.length && this.values.peekLast() === value) |
- return; |
- this.times.push(time); |
- this.values.push(value); |
- }, |
- |
- reset: function() |
- { |
- this.times = []; |
- this.values = []; |
- }, |
- |
- /** |
- * @param {!WebInspector.TimelineCalculator} 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); |
- this.x[this._minimumIndex] = 0; |
- for (var i = this._minimumIndex + 1; i < this._maximumIndex; i++) |
- this.x[i] = xFactor * (this.times[i] - this._minTime); |
- this.x[this._maximumIndex] = width; |
- } |
-} |
- |
-/** |
- * @constructor |
- * @extends {WebInspector.Object} |
- */ |
-WebInspector.SwatchCheckbox = function(title, color) |
-{ |
- this.element = document.createElement("div"); |
- this._swatch = this.element.createChild("div", "swatch"); |
- this.element.createChild("span", "title").textContent = title; |
- this._color = color; |
- this.checked = true; |
- |
- this.element.addEventListener("click", this._toggleCheckbox.bind(this), true); |
-} |
- |
-WebInspector.SwatchCheckbox.Events = { |
- Changed: "Changed" |
-} |
- |
-WebInspector.SwatchCheckbox.prototype = { |
- get checked() |
- { |
- return this._checked; |
- }, |
- |
- set checked(v) |
- { |
- this._checked = v; |
- if (this._checked) |
- this._swatch.style.backgroundColor = this._color; |
- else |
- this._swatch.style.backgroundColor = ""; |
- }, |
- |
- _toggleCheckbox: function(event) |
- { |
- this.checked = !this.checked; |
- this.dispatchEventToListeners(WebInspector.SwatchCheckbox.Events.Changed); |
- }, |
- |
- __proto__: WebInspector.Object.prototype |
-} |
- |
-/** |
- * @constructor |
- * @param {!WebInspector.MemoryStatistics} memoryCountersPane |
- * @param {string} title |
- * @param {string} graphColor |
- * @param {!WebInspector.MemoryStatistics.Counter} counter |
- */ |
-WebInspector.CounterUIBase = function(memoryCountersPane, title, graphColor, counter) |
-{ |
- this._memoryCountersPane = memoryCountersPane; |
- this.counter = counter; |
- var container = memoryCountersPane.sidebarElement().createChild("div", "memory-counter-sidebar-info"); |
- var swatchColor = graphColor; |
- this._swatch = new WebInspector.SwatchCheckbox(WebInspector.UIString(title), swatchColor); |
- this._swatch.addEventListener(WebInspector.SwatchCheckbox.Events.Changed, this._toggleCounterGraph.bind(this)); |
- container.appendChild(this._swatch.element); |
- |
- this._value = null; |
- this.graphColor = graphColor; |
- this.strokeColor = graphColor; |
- this.graphYValues = []; |
-} |
- |
-WebInspector.CounterUIBase.prototype = { |
- _toggleCounterGraph: function(event) |
- { |
- this._value.classList.toggle("hidden", !this._swatch.checked); |
- this._memoryCountersPane.refresh(); |
- }, |
- |
- /** |
- * @param {number} x |
- * @return {number} |
- */ |
- _recordIndexAt: function(x) |
- { |
- return this.counter.x.upperBound(x, null, this.counter._minimumIndex + 1, this.counter._maximumIndex + 1) - 1; |
- }, |
- |
- /** |
- * @param {number} x |
- */ |
- updateCurrentValue: function(x) |
- { |
- if (!this.visible || !this.counter.values.length) |
- return; |
- var index = this._recordIndexAt(x); |
- this._value.textContent = WebInspector.UIString(this._currentValueLabel, this.counter.values[index]); |
- var y = this.graphYValues[index]; |
- 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"); |
- }, |
- |
- get visible() |
- { |
- return this._swatch.checked; |
- }, |
-} |
- |
-WebInspector.MemoryStatistics.prototype = { |
- _createCurrentValuesBar: function() |
- { |
- throw new Error("Not implemented"); |
- }, |
- |
- createAllCounters: function() |
- { |
- throw new Error("Not implemented"); |
- }, |
- |
- /** |
- * @param {!WebInspector.TimelineModel.Record} record |
- */ |
- addRecord: function(record) |
- { |
- throw new Error("Not implemented"); |
- }, |
- |
- reset: function() |
- { |
- for (var i = 0; i < this._counters.length; ++i) |
- this._counters[i].reset(); |
- |
- for (var i = 0; i < this._counterUI.length; ++i) |
- this._counterUI[i].reset(); |
- |
- this.refresh(); |
- }, |
- |
- _resize: function() |
- { |
- var parentElement = this._canvas.parentElement; |
- this._canvas.width = parentElement.clientWidth; |
- this._canvas.height = parentElement.clientHeight; |
- var timelinePaddingLeft = 15; |
- this._calculator.setDisplayWindow(timelinePaddingLeft, this._canvas.width); |
- this.refresh(); |
- }, |
- |
- /** |
- * @param {number} startTime |
- * @param {number} endTime |
- */ |
- setWindowTimes: function(startTime, endTime) |
- { |
- this._calculator.setWindow(startTime, endTime); |
- this.scheduleRefresh(); |
- }, |
- |
- scheduleRefresh: function() |
- { |
- if (this._refreshTimer) |
- return; |
- this._refreshTimer = setTimeout(this.refresh.bind(this), 300); |
- }, |
- |
- 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(); |
- this._setVerticalClip(10, this._canvas.height - 20); |
- }, |
- |
- /** |
- * @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 - counterUI.counter.x[index]); |
- if (distance < minDistance) { |
- minDistance = distance; |
- bestTime = counterUI.counter.times[index]; |
- } |
- } |
- if (bestTime !== undefined) |
- this._revealRecordAt(bestTime); |
- }, |
- |
- /** |
- * @param {number} time |
- */ |
- _revealRecordAt: function(time) |
- { |
- var recordToReveal; |
- function findRecordToReveal(record) |
- { |
- if (record.startTime <= time && time <= record.endTime) { |
- recordToReveal = record; |
- return true; |
- } |
- // If there is no record containing the time than use the latest one before that time. |
- if (!recordToReveal || record.endTime < time && recordToReveal.endTime < record.endTime) |
- recordToReveal = record; |
- return false; |
- } |
- this._model.forAllRecords(null, findRecordToReveal); |
- this._delegate.selectRecord(recordToReveal); |
- }, |
- |
- /** |
- * @param {?Event} event |
- */ |
- _onMouseOut: 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() |
- { |
- delete this._refreshTimer; |
- this._timelineGrid.updateDividers(this._calculator); |
- this.draw(); |
- this._refreshCurrentValues(); |
- }, |
- |
- refreshRecords: function() |
- { |
- this.reset(); |
- var records = this._model.records(); |
- for (var i = 0; i < records.length; ++i) |
- this.addRecord(records[i]); |
- }, |
- |
- /** |
- * @param {number} originY |
- * @param {number} height |
- */ |
- _setVerticalClip: function(originY, height) |
- { |
- this._originY = originY; |
- this._clippedHeight = height; |
- }, |
- |
- _clear: function() |
- { |
- var ctx = this._canvas.getContext("2d"); |
- ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); |
- }, |
- |
- /** |
- * @param {?WebInspector.TimelineModel.Record} record |
- * @param {string=} regex |
- * @param {boolean=} selectRecord |
- */ |
- highlightSearchResult: function(record, regex, selectRecord) |
- { |
- }, |
- |
- /** |
- * @param {?WebInspector.TimelineModel.Record} record |
- */ |
- setSelectedRecord: function(record) |
- { |
- }, |
- |
- __proto__: WebInspector.SplitView.prototype |
-} |