1926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/* 2926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Copyright (C) 2013 Google Inc. All rights reserved. 3926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 4926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * Redistribution and use in source and binary forms, with or without 5926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * modification, are permitted provided that the following conditions are 6926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * met: 7926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 8926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions of source code must retain the above copyright 9926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * notice, this list of conditions and the following disclaimer. 10926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Redistributions in binary form must reproduce the above 11926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 12926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * in the documentation and/or other materials provided with the 13926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * distribution. 14926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 15926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * contributors may be used to endorse or promote products derived from 16926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * this software without specific prior written permission. 17926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * 18926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 30926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 31926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 32926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 33926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.MemoryStatistics} 34926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.TimelinePanel} timelinePanel 35926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.TimelineModel} model 36926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} sidebarWidth 37926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 38926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DOMCountersGraph = function(timelinePanel, model, sidebarWidth) 39926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 40926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.MemoryStatistics.call(this, timelinePanel, model, sidebarWidth); 41926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 42926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 43926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 44926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 45926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.CounterUIBase} 46926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.DOMCountersGraph} memoryCountersPane 47926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} title 48926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} currentValueLabel 49926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {Array.<number>} rgb 50926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function(WebInspector.DOMCountersGraph.Counter):number} valueGetter 51926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 52926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DOMCounterUI = function(memoryCountersPane, title, currentValueLabel, rgb, valueGetter) 53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 54926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var swatchColor = "rgb(" + rgb.join(",") + ")"; 55926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.CounterUIBase.call(this, memoryCountersPane, title, swatchColor, valueGetter) 56926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._range = this._swatch.element.createChild("span"); 57926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 58926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._value = memoryCountersPane._currentValuesBar.createChild("span", "memory-counter-value"); 59926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._value.style.color = swatchColor; 60926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._currentValueLabel = currentValueLabel; 61926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 62926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.graphColor = "rgba(" + rgb.join(",") + ",0.8)"; 63926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.graphYValues = []; 64926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 65926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 66926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)/** 67926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @constructor 68926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @extends {WebInspector.MemoryStatistics.Counter} 69926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} time 70926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} documentCount 71926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} nodeCount 72926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} listenerCount 73926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 74926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DOMCountersGraph.Counter = function(time, documentCount, nodeCount, listenerCount) 75926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles){ 76926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.MemoryStatistics.Counter.call(this, time); 77926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.documentCount = documentCount; 78926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.nodeCount = nodeCount; 79926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.listenerCount = listenerCount; 80926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 81926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 82926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DOMCounterUI.prototype = { 83926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 84926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} minValue 85926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} maxValue 86926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 87926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) setRange: function(minValue, maxValue) 88926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 89926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._range.textContent = WebInspector.UIString("[ %d - %d ]", minValue, maxValue); 90926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 91926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 92926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) updateCurrentValue: function(countersEntry) 93926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 94926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._value.textContent = WebInspector.UIString(this._currentValueLabel, this.valueGetter(countersEntry)); 95926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 96926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 97926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) clearCurrentValueAndMarker: function(ctx) 98926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 99926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._value.textContent = ""; 100926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.restoreImageUnderMarker(ctx); 101926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 102926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 103926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 104926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {CanvasRenderingContext2D} ctx 105926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} x 106926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} y 107926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} radius 108926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 109926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) saveImageUnderMarker: function(ctx, x, y, radius) 110926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 111926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const w = radius + 1; 112926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var imageData = ctx.getImageData(x - w, y - w, 2 * w, 2 * w); 113926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._imageUnderMarker = { 114926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) x: x - w, 115926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) y: y - w, 116926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) imageData: imageData 117926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }; 118926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 119926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 120926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 121926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {CanvasRenderingContext2D} ctx 122926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 123926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) restoreImageUnderMarker: function(ctx) 124926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 125926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this.visible) 126926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 127926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (this._imageUnderMarker) 128926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.putImageData(this._imageUnderMarker.imageData, this._imageUnderMarker.x, this._imageUnderMarker.y); 129926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this.discardImageUnderMarker(); 130926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 131926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 132926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) discardImageUnderMarker: function() 133926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 134926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) delete this._imageUnderMarker; 135926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 136926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 137926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.CounterUIBase.prototype 138926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 139926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 140926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 141926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)WebInspector.DOMCountersGraph.prototype = { 142926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _createCurrentValuesBar: function() 143926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 144926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._currentValuesBar = this._canvasContainer.createChild("div"); 145926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._currentValuesBar.id = "counter-values-bar"; 146926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._canvasContainer.addStyleClass("dom-counters"); 147926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 148926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 149926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 150926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @return {Array.<WebInspector.DOMCounterUI>} 151926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 152926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _createCounterUIList: function() 153926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 154926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function getDocumentCount(entry) 155926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 156926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return entry.documentCount; 157926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function getNodeCount(entry) 159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return entry.nodeCount; 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 162926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function getListenerCount(entry) 163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 164926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return entry.listenerCount; 165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return [ 167926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) new WebInspector.DOMCounterUI(this, "Document Count", "Documents: %d", [100, 0, 0], getDocumentCount), 168926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) new WebInspector.DOMCounterUI(this, "DOM Node Count", "Nodes: %d", [0, 100, 0], getNodeCount), 169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) new WebInspector.DOMCounterUI(this, "Event Listener Count", "Listeners: %d", [0, 0, 100], getListenerCount) 170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ]; 171926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 172926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 173926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _canvasHeight: function() 174926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 175926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return this._canvasContainer.offsetHeight - this._currentValuesBar.offsetHeight; 176926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 177926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 178926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 179926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.Event} event 180926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 181926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _onRecordAdded: function(event) 182926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function addStatistics(record) 184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 185926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var counters = record["counters"]; 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!counters) 187926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 188926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._counters.push(new WebInspector.DOMCountersGraph.Counter( 189926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) record.endTime || record.startTime, 190926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) counters["documents"], 191926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) counters["nodes"], 192926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) counters["jsEventListeners"] 193926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) )); 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 195926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.TimelinePresentationModel.forAllRecords([event.data], null, addStatistics.bind(this)); 196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 198926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _draw: function() 199926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 200926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) WebInspector.MemoryStatistics.prototype._draw.call(this); 201926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < this._counterUI.length; i++) 202926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._drawGraph(this._counterUI[i]); 203926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 204926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 205926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {CanvasRenderingContext2D} ctx 207926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 208926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _restoreImageUnderMarker: function(ctx) 209926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 210926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < this._counterUI.length; i++) { 211926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var counterUI = this._counterUI[i]; 212926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!counterUI.visible) 213926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 214926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) counterUI.restoreImageUnderMarker(ctx); 215926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 217926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 218926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 219926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {CanvasRenderingContext2D} ctx 220926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} x 221926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} index 222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 223926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _saveImageUnderMarker: function(ctx, x, index) 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 225926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const radius = 2; 226926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < this._counterUI.length; i++) { 227926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var counterUI = this._counterUI[i]; 228926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!counterUI.visible) 229926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 230926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var y = counterUI.graphYValues[index]; 231926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) counterUI.saveImageUnderMarker(ctx, x, y, radius); 232926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 233926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 234926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 235926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 236926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {CanvasRenderingContext2D} ctx 237926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} x 238926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {number} index 239926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 240926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _drawMarker: function(ctx, x, index) 241926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 242926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._saveImageUnderMarker(ctx, x, index); 243926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) const radius = 2; 244926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < this._counterUI.length; i++) { 245926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var counterUI = this._counterUI[i]; 246926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!counterUI.visible) 247926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) continue; 248926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var y = counterUI.graphYValues[index]; 249926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.beginPath(); 250926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.arc(x, y, radius, 0, Math.PI * 2, true); 251926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.lineWidth = 1; 252926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.fillStyle = counterUI.graphColor; 253926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.strokeStyle = counterUI.graphColor; 254926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.fill(); 255926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.stroke(); 256926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.closePath(); 257926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 258926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 259926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 260926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) /** 261926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {WebInspector.CounterUIBase} counterUI 262926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) */ 263926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _drawGraph: function(counterUI) 264926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 265926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var canvas = this._canvas; 266926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var ctx = canvas.getContext("2d"); 267926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var width = canvas.width; 268926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var height = this._clippedHeight; 269926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var originY = this._originY; 270926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var valueGetter = counterUI.valueGetter; 271926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 272926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this._counters.length) 273926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 274926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 275926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var maxValue; 276926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var minValue; 277926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = this._minimumIndex; i <= this._maximumIndex; i++) { 278926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var value = valueGetter(this._counters[i]); 279926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (minValue === undefined || value < minValue) 280926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) minValue = value; 281926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (maxValue === undefined || value > maxValue) 282926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) maxValue = value; 283926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 284926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 285926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) counterUI.setRange(minValue, maxValue); 286926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!counterUI.visible) 288926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 290926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var yValues = counterUI.graphYValues; 291926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) yValues.length = this._counters.length; 292926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 293926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var maxYRange = maxValue - minValue; 294926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var yFactor = maxYRange ? height / (maxYRange) : 1; 295926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.beginPath(); 297926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var currentY = originY + (height - (valueGetter(this._counters[this._minimumIndex]) - minValue) * yFactor); 298926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.moveTo(0, currentY); 299926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = this._minimumIndex; i <= this._maximumIndex; i++) { 300926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var x = this._counters[i].x; 301926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.lineTo(x, currentY); 302926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) currentY = originY + (height - (valueGetter(this._counters[i]) - minValue) * yFactor); 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.lineTo(x, currentY); 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) yValues[i] = currentY; 306926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) } 307926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.lineTo(width, currentY); 308926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.lineWidth = 1; 309926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.strokeStyle = counterUI.graphColor; 310926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.stroke(); 311926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) ctx.closePath(); 312926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 313926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 314926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _discardImageUnderMarker: function() 315926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 316926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < this._counterUI.length; i++) 317926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._counterUI[i].discardImageUnderMarker(); 318926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 319926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 320926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) __proto__: WebInspector.MemoryStatistics.prototype 321926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)} 322926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 323