1/* 2 * Copyright (C) 2014 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * 2. Redistributions in binary form must reproduce the above copyright 10 * notice, this list of conditions and the following disclaimer in the 11 * documentation and/or other materials provided with the distribution. 12 * 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' 14 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 15 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS 17 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 18 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 19 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 20 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 21 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 22 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF 23 * THE POSSIBILITY OF SUCH DAMAGE. 24 */ 25 26WebInspector.ScriptTimelineOverviewGraph = function(recording) 27{ 28 WebInspector.TimelineOverviewGraph.call(this, recording); 29 30 this.element.classList.add(WebInspector.ScriptTimelineOverviewGraph.StyleClassName); 31 32 this._scriptTimeline = recording.timelines.get(WebInspector.TimelineRecord.Type.Script); 33 this._scriptTimeline.addEventListener(WebInspector.Timeline.Event.RecordAdded, this._scriptTimelineRecordAdded, this); 34 35 this._timelineRecordBars = []; 36 37 this.reset(); 38}; 39 40WebInspector.ScriptTimelineOverviewGraph.StyleClassName = "script"; 41 42WebInspector.ScriptTimelineOverviewGraph.prototype = { 43 constructor: WebInspector.ScriptTimelineOverviewGraph, 44 __proto__: WebInspector.TimelineOverviewGraph.prototype, 45 46 // Public 47 48 reset: function() 49 { 50 WebInspector.TimelineOverviewGraph.prototype.reset.call(this); 51 52 this._timelineRecordBarMap = new Map; 53 54 this.element.removeChildren(); 55 }, 56 57 updateLayout: function() 58 { 59 WebInspector.TimelineOverviewGraph.prototype.updateLayout.call(this); 60 61 var secondsPerPixel = this.timelineOverview.secondsPerPixel; 62 63 var recordBarIndex = 0; 64 65 function createBar(records, renderMode) 66 { 67 var timelineRecordBar = this._timelineRecordBars[recordBarIndex]; 68 if (!timelineRecordBar) 69 timelineRecordBar = this._timelineRecordBars[recordBarIndex] = new WebInspector.TimelineRecordBar(records, renderMode); 70 else { 71 timelineRecordBar.renderMode = renderMode; 72 timelineRecordBar.records = records; 73 } 74 timelineRecordBar.refresh(this); 75 if (!timelineRecordBar.element.parentNode) 76 this.element.appendChild(timelineRecordBar.element); 77 ++recordBarIndex; 78 } 79 80 WebInspector.TimelineRecordBar.createCombinedBars(this._scriptTimeline.records, secondsPerPixel, this, createBar.bind(this)); 81 82 // Remove the remaining unused TimelineRecordBars. 83 for (; recordBarIndex < this._timelineRecordBars.length; ++recordBarIndex) { 84 this._timelineRecordBars[recordBarIndex].records = null; 85 this._timelineRecordBars[recordBarIndex].element.remove(); 86 } 87 }, 88 89 // Private 90 91 _scriptTimelineRecordAdded: function(event) 92 { 93 this.needsLayout(); 94 } 95}; 96