1/* 2 * Copyright (C) 2011 Google 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 are 6 * met: 7 * 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above 11 * copyright notice, this list of conditions and the following disclaimer 12 * in the documentation and/or other materials provided with the 13 * distribution. 14 * * Neither the name of Google Inc. nor the names of its 15 * contributors may be used to endorse or promote products derived from 16 * this software without specific prior written permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31/** 32 * @constructor 33 * @extends {WebInspector.Object} 34 */ 35WebInspector.TimelineManager = function() 36{ 37 WebInspector.Object.call(this); 38 this._dispatcher = new WebInspector.TimelineDispatcher(this); 39 this._enablementCount = 0; 40} 41 42WebInspector.TimelineManager.EventTypes = { 43 TimelineStarted: "TimelineStarted", 44 TimelineStopped: "TimelineStopped", 45 TimelineEventRecorded: "TimelineEventRecorded" 46} 47 48WebInspector.TimelineManager.prototype = { 49 /** 50 * @param {number=} maxCallStackDepth 51 * @param {boolean=} includeDomCounters 52 * @param {boolean=} includeNativeMemoryStatistics 53 */ 54 start: function(maxCallStackDepth, includeDomCounters, includeNativeMemoryStatistics) 55 { 56 this._enablementCount++; 57 if (this._enablementCount === 1) 58 TimelineAgent.start(maxCallStackDepth, includeDomCounters, includeNativeMemoryStatistics, this._started.bind(this)); 59 }, 60 61 stop: function() 62 { 63 if (!this._enablementCount) { 64 console.error("WebInspector.TimelineManager start/stop calls are unbalanced"); 65 return; 66 } 67 this._enablementCount--; 68 if (!this._enablementCount) 69 TimelineAgent.stop(this._stopped.bind(this)); 70 }, 71 72 _started: function() 73 { 74 this.dispatchEventToListeners(WebInspector.TimelineManager.EventTypes.TimelineStarted); 75 }, 76 77 _stopped: function() 78 { 79 this.dispatchEventToListeners(WebInspector.TimelineManager.EventTypes.TimelineStopped); 80 }, 81 82 __proto__: WebInspector.Object.prototype 83} 84 85/** 86 * @constructor 87 * @implements {TimelineAgent.Dispatcher} 88 */ 89WebInspector.TimelineDispatcher = function(manager) 90{ 91 this._manager = manager; 92 InspectorBackend.registerTimelineDispatcher(this); 93} 94 95WebInspector.TimelineDispatcher.prototype = { 96 eventRecorded: function(record) 97 { 98 this._manager.dispatchEventToListeners(WebInspector.TimelineManager.EventTypes.TimelineEventRecorded, record); 99 } 100} 101 102/** 103 * @type {WebInspector.TimelineManager} 104 */ 105WebInspector.timelineManager; 106