1f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)// found in the LICENSE file. 4f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 5f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)/** 6f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @constructor 77242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.TracingManager} tracingManager 8197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TracingModel} tracingModel 9197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TimelineModel.Filter} recordFilter 105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @extends {WebInspector.TimelineModel} 11f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano TucciWebInspector.TracingTimelineModel = function(tracingManager, tracingModel, recordFilter) 13f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles){ 14c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) WebInspector.TimelineModel.call(this); 157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingManager = tracingManager; 17f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._tracingModel = tracingModel; 18197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._recordFilter = recordFilter; 197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingManager.addEventListener(WebInspector.TracingManager.Events.TracingStarted, this._onTracingStarted, this); 207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingManager.addEventListener(WebInspector.TracingManager.Events.EventsCollected, this._onEventsCollected, this); 217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingManager.addEventListener(WebInspector.TracingManager.Events.TracingComplete, this._onTracingComplete, this); 225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this.reset(); 23f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 24f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 25f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)WebInspector.TracingTimelineModel.RecordType = { 26f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) Program: "Program", 27f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) EventDispatch: "EventDispatch", 28f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 29f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) GPUTask: "GPUTask", 30f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 31f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) RequestMainThreadFrame: "RequestMainThreadFrame", 32f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) BeginFrame: "BeginFrame", 33f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) BeginMainThreadFrame: "BeginMainThreadFrame", 34f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ActivateLayerTree: "ActivateLayerTree", 35f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) DrawFrame: "DrawFrame", 36f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ScheduleStyleRecalculation: "ScheduleStyleRecalculation", 37f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) RecalculateStyles: "RecalculateStyles", 38f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) InvalidateLayout: "InvalidateLayout", 39f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) Layout: "Layout", 405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) UpdateLayer: "UpdateLayer", 41197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch UpdateLayerTree: "UpdateLayerTree", 42f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) PaintSetup: "PaintSetup", 43f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) Paint: "Paint", 44f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) PaintImage: "PaintImage", 45f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) Rasterize: "Rasterize", 46f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) RasterTask: "RasterTask", 47f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ScrollLayer: "ScrollLayer", 48f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) CompositeLayers: "CompositeLayers", 49f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 50f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ParseHTML: "ParseHTML", 51f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 52f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) TimerInstall: "TimerInstall", 53f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) TimerRemove: "TimerRemove", 54f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) TimerFire: "TimerFire", 55f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 56f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) XHRReadyStateChange: "XHRReadyStateChange", 57f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) XHRLoad: "XHRLoad", 58f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) EvaluateScript: "EvaluateScript", 59f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 60f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) MarkLoad: "MarkLoad", 61f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) MarkDOMContent: "MarkDOMContent", 62f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) MarkFirstPaint: "MarkFirstPaint", 63f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 64f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) TimeStamp: "TimeStamp", 65f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ConsoleTime: "ConsoleTime", 66f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 67f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ResourceSendRequest: "ResourceSendRequest", 68f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ResourceReceiveResponse: "ResourceReceiveResponse", 69f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ResourceReceivedData: "ResourceReceivedData", 70f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ResourceFinish: "ResourceFinish", 71f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 72f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) FunctionCall: "FunctionCall", 73f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) GCEvent: "GCEvent", 74f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) JSFrame: "JSFrame", 75e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) JSSample: "JSSample", 76f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 77f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) UpdateCounters: "UpdateCounters", 78f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 79f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) RequestAnimationFrame: "RequestAnimationFrame", 80f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) CancelAnimationFrame: "CancelAnimationFrame", 81f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) FireAnimationFrame: "FireAnimationFrame", 82f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 83f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebSocketCreate : "WebSocketCreate", 84f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebSocketSendHandshakeRequest : "WebSocketSendHandshakeRequest", 85f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebSocketReceiveHandshakeResponse : "WebSocketReceiveHandshakeResponse", 86f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) WebSocketDestroy : "WebSocketDestroy", 87f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 88f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) EmbedderCallback : "EmbedderCallback", 89f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 90f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) CallStack: "CallStack", 91f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) SetLayerTreeId: "SetLayerTreeId", 92f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) TracingStartedInPage: "TracingStartedInPage", 937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci TracingSessionIdForWorker: "TracingSessionIdForWorker", 94f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 95f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) DecodeImage: "Decode Image", 96f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) ResizeImage: "Resize Image", 97f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) DrawLazyPixelRef: "Draw LazyPixelRef", 98f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) DecodeLazyPixelRef: "Decode LazyPixelRef", 99f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 100f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) LazyPixelRef: "LazyPixelRef", 1015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) LayerTreeHostImplSnapshot: "cc::LayerTreeHostImpl", 1025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) PictureSnapshot: "cc::Picture" 103f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)}; 104f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 105e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/** 106e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @constructor 107e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {string} name 108e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 109e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.TracingTimelineModel.VirtualThread = function(name) 110e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 111e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.name = name; 112e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** @type {!Array.<!WebInspector.TracingModel.Event>} */ 113e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this.events = []; 1147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** @type {!Array.<!Array.<!WebInspector.TracingModel.Event>>} */ 1157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this.asyncEvents = []; 116e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 117e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 118f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)WebInspector.TracingTimelineModel.prototype = { 119f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 120f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {boolean} captureStacks 121f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {boolean} captureMemory 1225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {boolean} capturePictures 123f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 1245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) startRecording: function(captureStacks, captureMemory, capturePictures) 125f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 126197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch function disabledByDefault(category) 127197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 128197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return "disabled-by-default-" + category; 129f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 1309e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) var categoriesArray = [ 1319e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) "-*", 1329e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) disabledByDefault("devtools.timeline"), 1339e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) disabledByDefault("devtools.timeline.frame"), 1349e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) WebInspector.TracingModel.ConsoleEventCategory 1359e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) ]; 136e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (captureStacks) { 137197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch categoriesArray.push(disabledByDefault("devtools.timeline.stack")); 1387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (Runtime.experiments.isEnabled("timelineJSCPUProfile")) { 139e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._jsProfilerStarted = true; 140e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._currentTarget = WebInspector.context.flavor(WebInspector.Target); 141e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._configureCpuProfilerSamplingInterval(); 142e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._currentTarget.profilerAgent().start(); 143e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 144e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 145197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (capturePictures) { 146197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch categoriesArray = categoriesArray.concat([ 147197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch disabledByDefault("devtools.timeline.layers"), 148197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch disabledByDefault("devtools.timeline.picture"), 149197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch disabledByDefault("blink.graphics_context_annotations")]); 150197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 151197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var categories = categoriesArray.join(","); 1525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._startRecordingWithCategories(categories); 153f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 154f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 155f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) stopRecording: function() 156f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 157e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._stopCallbackBarrier = new CallbackBarrier(); 158e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._jsProfilerStarted) { 159e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._currentTarget.profilerAgent().stop(this._stopCallbackBarrier.createCallback(this._didStopRecordingJSSamples.bind(this))); 160e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._jsProfilerStarted = false; 161e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 1627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingManager.stop(); 163f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 164f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 1655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 1667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!Array.<!WebInspector.TracingManager.EventPayload>} events 1675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 1687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci setEventsForTest: function(events) 169f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 170c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._onTracingStarted(); 1717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingModel.addEvents(events); 172c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this._onTracingComplete(); 1735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 1745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 175e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) _configureCpuProfilerSamplingInterval: function() 176e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 177e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var intervalUs = WebInspector.settings.highResolutionCpuProfiling.get() ? 100 : 1000; 178e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._currentTarget.profilerAgent().setSamplingInterval(intervalUs, didChangeInterval); 179e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 180e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) function didChangeInterval(error) 181e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 182e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (error) 183e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebInspector.console.error(error); 184e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 185e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 186e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 1885d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} categories 1895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 1905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) _startRecordingWithCategories: function(categories) 1915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 1927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingManager.start(categories, ""); 1935d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 1945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 195c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) _onTracingStarted: function() 1965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 197c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) this.reset(); 1987242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingModel.reset(); 1995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordingStarted); 200f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 201f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 2027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 2037242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.Event} event 2047242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 2057242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci _onEventsCollected: function(event) 2067242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 2077242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var traceEvents = /** @type {!Array.<!WebInspector.TracingManager.EventPayload>} */ (event.data); 2087242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingModel.addEvents(traceEvents); 2097242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 2107242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 211c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) _onTracingComplete: function() 212f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 2137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingModel.tracingComplete(); 214e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._stopCallbackBarrier) 215e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._stopCallbackBarrier.callWhenDone(this._didStopRecordingTraceEvents.bind(this)); 216e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) else 217e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._didStopRecordingTraceEvents(); 218e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 219e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 220e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 221e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {?Protocol.Error} error 222e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {?ProfilerAgent.CPUProfile} cpuProfile 223e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 224e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) _didStopRecordingJSSamples: function(error, cpuProfile) 225e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 226e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (error) 227e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebInspector.console.error(error); 228e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._cpuProfile = cpuProfile; 229e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 230e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 231e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) _didStopRecordingTraceEvents: function() 232e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 233e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._stopCallbackBarrier = null; 234e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var events = this._tracingModel.devtoolsPageMetadataEvents(); 235e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var workerMetadataEvents = this._tracingModel.devtoolsWorkerMetadataEvents(); 236f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 237f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._resetProcessingState(); 238f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = 0, length = events.length; i < length; i++) { 239f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var event = events[i]; 240f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var process = event.thread.process(); 241f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var startTime = event.startTime; 242f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 243f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var endTime = Infinity; 244f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (i + 1 < length) 245f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) endTime = events[i + 1].startTime; 246f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 247e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var threads = process.sortedThreads(); 248e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) for (var j = 0; j < threads.length; j++) { 249e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var thread = threads[j]; 2507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (thread.name() === "WebCore: Worker" && !workerMetadataEvents.some(function(e) { return e.args["data"]["workerThreadId"] === thread.id(); })) 251e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) continue; 252e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._processThreadEvents(startTime, endTime, event.thread, thread); 253e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 254f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 255f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._resetProcessingState(); 256f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 257f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._inspectedTargetEvents.sort(WebInspector.TracingModel.Event.compareStartTime); 258f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 259e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._cpuProfile) { 260e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var jsSamples = WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile(this, this._cpuProfile); 261e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._inspectedTargetEvents = this._inspectedTargetEvents.mergeOrdered(jsSamples, WebInspector.TracingModel.Event.orderedCompareStartTime); 262e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._setMainThreadEvents(this.mainThreadEvents().mergeOrdered(jsSamples, WebInspector.TracingModel.Event.orderedCompareStartTime)); 263e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._cpuProfile = null; 264e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 265e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 2665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._buildTimelineRecords(); 2675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordingStopped); 268f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 269f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 270f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 2715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {number} 272f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 273f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) minimumRecordTime: function() 274f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 275f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return this._tracingModel.minimumRecordTime(); 276f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 277f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 278f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 2795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {number} 280f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 281f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) maximumRecordTime: function() 282f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 283f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return this._tracingModel.maximumRecordTime(); 284f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 285f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 286f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 287f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {!Array.<!WebInspector.TracingModel.Event>} 288f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 289f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) inspectedTargetEvents: function() 290f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 291f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return this._inspectedTargetEvents; 292f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 293f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 294f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 295f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {!Array.<!WebInspector.TracingModel.Event>} 296f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 297f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) mainThreadEvents: function() 298f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 299e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return this._mainThreadEvents; 300197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 301197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 302197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 303e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!Array.<!WebInspector.TracingModel.Event>} events 304e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 305e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) _setMainThreadEvents: function(events) 306e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 307e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._mainThreadEvents = events; 308e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 309e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 310e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 3117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {!Array.<!Array.<!WebInspector.TracingModel.Event>>} 3127242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 3137242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci mainThreadAsyncEvents: function() 3147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 3157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this._mainThreadAsyncEvents; 3167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 3177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 3187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 319e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {!Array.<!WebInspector.TracingTimelineModel.VirtualThread>} 320197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 321197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch virtualThreads: function() 322197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 323197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._virtualThreads; 324f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 325f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 326e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 327e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!WebInspector.ChunkedFileReader} fileReader 328e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!WebInspector.Progress} progress 329e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @return {!WebInspector.OutputStream} 330e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 331e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) createLoader: function(fileReader, progress) 332e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 333e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return new WebInspector.TracingModelLoader(this, fileReader, progress); 334e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 335e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 336e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 337e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!WebInspector.OutputStream} stream 338e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 339e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) writeToStream: function(stream) 340e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 341e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var saver = new WebInspector.TracingTimelineSaver(stream); 3427242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._tracingModel.writeToStream(stream, saver); 343e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 344e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 3455d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) reset: function() 3465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 347e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._virtualThreads = []; 348e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._mainThreadEvents = []; 3497242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._mainThreadAsyncEvents = []; 3505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._inspectedTargetEvents = []; 3515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) WebInspector.TimelineModel.prototype.reset.call(this); 3525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 3535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 3545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) _buildTimelineRecords: function() 3555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 3565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var recordStack = []; 357197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var mainThreadEvents = this.mainThreadEvents(); 3587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 3597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 3607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.TracingTimelineModel.TraceEventRecord} record 3617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 3627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci function copyChildrenToParent(record) 3637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 3647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var parent = record.parent; 3657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var parentChildren = parent.children(); 3667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var children = record.children(); 3677242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var j = 0; j < children.length; ++j) 3687242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci children[j].parent = parent; 3697242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci parentChildren.splice.apply(parentChildren, [parentChildren.indexOf(record), 1].concat(children)); 3707242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 3717242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 3725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) for (var i = 0, size = mainThreadEvents.length; i < size; ++i) { 3735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var event = mainThreadEvents[i]; 3745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) while (recordStack.length) { 3755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var top = recordStack.peekLast(); 3767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // When we've got a not-yet-complete async event at the top of the stack, 3777242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // see if we can close it by a matching end event. If this doesn't happen 3787242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // before end of top-level event (presumably, a "Program"), pretend the 3797242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // async event never happened. 3807242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!top._event.endTime) { 3817242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event.phase !== WebInspector.TracingModel.Phase.AsyncEnd && recordStack[0]._event.endTime >= event.startTime) 3827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci break; 3837242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event.phase === WebInspector.TracingModel.Phase.AsyncEnd) { 3847242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (top._event.name === event.name) { 3857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci top.setEndTime(event.startTime); 3867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci recordStack.pop(); 3877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 3887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci break; 3897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 3907242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Delete incomplete async record from parent and adopt its children. 3917242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci recordStack.pop(); 3927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci copyChildrenToParent(top); 3937242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci continue; 3947242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } else if (top._event.endTime >= event.startTime) { 3955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) break; 3967242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 3975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) recordStack.pop(); 398197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!recordStack.length) 399197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._addTopLevelRecord(top); 4005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 4017242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event.phase === WebInspector.TracingModel.Phase.AsyncEnd) 4027242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci continue; 403197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var record = new WebInspector.TracingTimelineModel.TraceEventRecord(this, event); 404c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) if (WebInspector.TracingTimelineUIUtils.isMarkerEvent(event)) 4055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._eventDividerRecords.push(record); 406197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!this._recordFilter.accept(record)) 407197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch continue; 408197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var parentRecord = recordStack.peekLast(); 409197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (parentRecord) 410197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch parentRecord._addChild(record); 4117242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (event.endTime || (event.phase === WebInspector.TracingModel.Phase.AsyncBegin && parentRecord)) 4125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) recordStack.push(record); 4135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 4147242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 4157242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Close all remaining incomplete async events. 4167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci while (recordStack.length > 1) { 4177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var top = recordStack.pop(); 4187242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (!top._event.endTime) { 4197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci // Delete incomplete async record from parent and adopt its children. 4207242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci copyChildrenToParent(top); 4217242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 4227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 4237242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 424197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (recordStack.length) 425197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._addTopLevelRecord(recordStack[0]); 4265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 4275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 4285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 4295d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TracingTimelineModel.TraceEventRecord} record 4305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 4315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) _addTopLevelRecord: function(record) 4325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 4335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._updateBoundaries(record); 4345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._records.push(record); 435197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (record.type() === WebInspector.TracingTimelineModel.RecordType.Program) 4365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._mainThreadTasks.push(record); 437197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (record.type() === WebInspector.TracingTimelineModel.RecordType.GPUTask) 4385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._gpuThreadTasks.push(record); 4395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.TimelineModel.Events.RecordAdded, record); 4405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 4415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 442f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _resetProcessingState: function() 443f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 444f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._sendRequestEvents = {}; 445f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._timerEvents = {}; 446f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._requestAnimationFrameEvents = {}; 447f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._layoutInvalidate = {}; 448f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._lastScheduleStyleRecalculation = {}; 449f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._webSocketCreateEvents = {}; 450f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._paintImageEventByPixelRefId = {}; 4515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._lastPaintForLayer = {}; 452f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._lastRecalculateStylesEvent = null; 453f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._currentScriptEvent = null; 454f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._eventStack = []; 455f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 456f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 457f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 458f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number} startTime 459f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {?number} endTime 460f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Thread} mainThread 461f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Thread} thread 462f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 463f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _processThreadEvents: function(startTime, endTime, mainThread, thread) 464f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 465f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var events = thread.events(); 466f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var length = events.length; 467f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var i = events.lowerBound(startTime, function (time, event) { return time - event.startTime }); 468f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 469e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var threadEvents; 470e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (thread === mainThread) { 471e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) threadEvents = this._mainThreadEvents; 4727242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._mainThreadAsyncEvents = this._mainThreadAsyncEvents.concat(thread.asyncEvents()); 473e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } else { 474e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var virtualThread = new WebInspector.TracingTimelineModel.VirtualThread(thread.name()); 475e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) threadEvents = virtualThread.events; 4767242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci virtualThread.asyncEvents = virtualThread.asyncEvents.concat(thread.asyncEvents()); 477e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._virtualThreads.push(virtualThread); 478e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 479e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 480f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._eventStack = []; 481f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (; i < length; i++) { 482f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var event = events[i]; 483f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (endTime && event.startTime >= endTime) 484f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 485f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._processEvent(event); 486197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch threadEvents.push(event); 487f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._inspectedTargetEvents.push(event); 488f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 489f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 490f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 491f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 492f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {!WebInspector.TracingModel.Event} event 493f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 494f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _processEvent: function(event) 495f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 496f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var recordTypes = WebInspector.TracingTimelineModel.RecordType; 497f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 498f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var eventStack = this._eventStack; 499f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) while (eventStack.length && eventStack.peekLast().endTime < event.startTime) 500f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStack.pop(); 501f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var duration = event.duration; 502f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (duration) { 503f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (eventStack.length) { 504f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var parent = eventStack.peekLast(); 505f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) parent.selfTime -= duration; 506f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 507f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.selfTime = duration; 508f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) eventStack.push(event); 509f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 510f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 511f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (this._currentScriptEvent && event.startTime > this._currentScriptEvent.endTime) 512f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._currentScriptEvent = null; 513f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 514f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) switch (event.name) { 515f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.CallStack: 516197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var lastMainThreadEvent = this.mainThreadEvents().peekLast(); 517e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (lastMainThreadEvent && event.args["stack"] && event.args["stack"].length) 518e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) lastMainThreadEvent.stackTrace = event.args["stack"]; 519f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 520f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 521f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceSendRequest: 522e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._sendRequestEvents[event.args["data"]["requestId"]] = event; 523e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) event.imageURL = event.args["data"]["url"]; 524f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 525f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 526f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceReceiveResponse: 527f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceReceivedData: 528f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResourceFinish: 529e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) event.initiator = this._sendRequestEvents[event.args["data"]["requestId"]]; 530f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (event.initiator) 531f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.imageURL = event.initiator.imageURL; 532f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 533f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 534f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.TimerInstall: 535e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._timerEvents[event.args["data"]["timerId"]] = event; 536f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 537f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 538f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.TimerFire: 539e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) event.initiator = this._timerEvents[event.args["data"]["timerId"]]; 540f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 541f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 542f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.RequestAnimationFrame: 543e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._requestAnimationFrameEvents[event.args["data"]["id"]] = event; 544f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 545f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 546f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.FireAnimationFrame: 547e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) event.initiator = this._requestAnimationFrameEvents[event.args["data"]["id"]]; 548f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 549f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 550f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ScheduleStyleRecalculation: 551e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._lastScheduleStyleRecalculation[event.args["frame"]] = event; 552f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 553f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 554f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.RecalculateStyles: 555e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) event.initiator = this._lastScheduleStyleRecalculation[event.args["frame"]]; 556f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._lastRecalculateStylesEvent = event; 557f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 558f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 559f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.InvalidateLayout: 560f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // Consider style recalculation as a reason for layout invalidation, 561f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) // but only if we had no earlier layout invalidation records. 562f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var layoutInitator = event; 563e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var frameId = event.args["frame"]; 564f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!this._layoutInvalidate[frameId] && this._lastRecalculateStylesEvent && this._lastRecalculateStylesEvent.endTime > event.startTime) 565f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) layoutInitator = this._lastRecalculateStylesEvent.initiator; 566f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._layoutInvalidate[frameId] = layoutInitator; 567f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 568f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 569f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.Layout: 570f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var frameId = event.args["beginData"]["frame"]; 571f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.initiator = this._layoutInvalidate[frameId]; 572f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.backendNodeId = event.args["endData"]["rootNode"]; 5735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) event.highlightQuad = event.args["endData"]["root"]; 574f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._layoutInvalidate[frameId] = null; 575f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (this._currentScriptEvent) 576f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.warning = WebInspector.UIString("Forced synchronous layout is a possible performance bottleneck."); 577f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 578f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 579f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketCreate: 580e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._webSocketCreateEvents[event.args["data"]["identifier"]] = event; 581f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 582f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 583f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketSendHandshakeRequest: 584f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketReceiveHandshakeResponse: 585f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.WebSocketDestroy: 586e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) event.initiator = this._webSocketCreateEvents[event.args["data"]["identifier"]]; 587f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 588f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 589f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.EvaluateScript: 590f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.FunctionCall: 591f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!this._currentScriptEvent) 592f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._currentScriptEvent = event; 593f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 594f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 595f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.SetLayerTreeId: 596f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._inspectedTargetLayerTreeId = event.args["layerTreeId"]; 597f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 598f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 599f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.Paint: 6005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) event.highlightQuad = event.args["data"]["clip"]; 6015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) event.backendNodeId = event.args["data"]["nodeId"]; 6025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var layerUpdateEvent = this._findAncestorEvent(recordTypes.UpdateLayer); 6035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!layerUpdateEvent || layerUpdateEvent.args["layerTreeId"] !== this._inspectedTargetLayerTreeId) 6045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) break; 605197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // Only keep layer paint events, skip paints for subframes that get painted to the same layer as parent. 606197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch if (!event.args["data"]["layerId"]) 607197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch break; 6085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._lastPaintForLayer[layerUpdateEvent.args["layerId"]] = event; 6095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) break; 6105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 6115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) case recordTypes.PictureSnapshot: 6125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var layerUpdateEvent = this._findAncestorEvent(recordTypes.UpdateLayer); 6135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (!layerUpdateEvent || layerUpdateEvent.args["layerTreeId"] !== this._inspectedTargetLayerTreeId) 6145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) break; 6155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var paintEvent = this._lastPaintForLayer[layerUpdateEvent.args["layerId"]]; 6167242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci if (paintEvent) 6177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci paintEvent.picture = event; 6185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) break; 6195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 620f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ScrollLayer: 621f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.backendNodeId = event.args["data"]["nodeId"]; 622f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 623f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 624f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.PaintImage: 625f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.backendNodeId = event.args["data"]["nodeId"]; 626f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.imageURL = event.args["data"]["url"]; 627f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 628f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 629f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.DecodeImage: 630f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.ResizeImage: 631f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage); 632f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!paintImageEvent) { 633f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var decodeLazyPixelRefEvent = this._findAncestorEvent(recordTypes.DecodeLazyPixelRef); 634f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) paintImageEvent = decodeLazyPixelRefEvent && this._paintImageEventByPixelRefId[decodeLazyPixelRefEvent.args["LazyPixelRef"]]; 635f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 636f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!paintImageEvent) 637f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 638f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.backendNodeId = paintImageEvent.backendNodeId; 639f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.imageURL = paintImageEvent.imageURL; 640f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 641f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 642f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) case recordTypes.DrawLazyPixelRef: 643f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var paintImageEvent = this._findAncestorEvent(recordTypes.PaintImage); 644f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (!paintImageEvent) 645f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 646f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) this._paintImageEventByPixelRefId[event.args["LazyPixelRef"]] = paintImageEvent; 647f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.backendNodeId = paintImageEvent.backendNodeId; 648f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) event.imageURL = paintImageEvent.imageURL; 649f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) break; 650f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 651f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 652f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 653f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) /** 654f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {string} name 655f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @return {?WebInspector.TracingModel.Event} 656f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) */ 657f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) _findAncestorEvent: function(name) 658f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) { 659f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) for (var i = this._eventStack.length - 1; i >= 0; --i) { 660f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) var event = this._eventStack[i]; 661f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) if (event.name === name) 662f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return event; 663f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) } 664f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) return null; 665f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) }, 666f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) 6675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) __proto__: WebInspector.TimelineModel.prototype 6685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 6695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 6705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 671197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @interface 672197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 673197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.Filter = function() { } 674197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 675197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.Filter.prototype = { 676197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 677197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TracingModel.Event} event 678197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {boolean} 679197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 680197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch accept: function(event) { } 681197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 682197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 683197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 684197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @constructor 685197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @implements {WebInspector.TracingTimelineModel.Filter} 686197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Array.<string>} eventNames 687197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 688197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.EventNameFilter = function(eventNames) 689197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 690197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._eventNames = eventNames.keySet(); 691197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 692197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 693197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.EventNameFilter.prototype = { 694197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 695197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TracingModel.Event} event 696197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {boolean} 697197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 698197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch accept: function(event) 699197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 700197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch throw new Error("Not implemented."); 701197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch } 702197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 703197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 704197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 705197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @constructor 706197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.TracingTimelineModel.EventNameFilter} 707197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Array.<string>} includeNames 708197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 709197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.InclusiveEventNameFilter = function(includeNames) 710197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 711197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.TracingTimelineModel.EventNameFilter.call(this, includeNames) 712197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 713197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 714197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.InclusiveEventNameFilter.prototype = { 715197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 716197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @override 717197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TracingModel.Event} event 718197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {boolean} 719197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 720197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch accept: function(event) 721197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 7227242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return event.category === WebInspector.TracingModel.ConsoleEventCategory || !!this._eventNames[event.name]; 723197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 724197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch __proto__: WebInspector.TracingTimelineModel.EventNameFilter.prototype 725197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 726197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 727197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 728197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @constructor 729197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @extends {WebInspector.TracingTimelineModel.EventNameFilter} 730197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!Array.<string>} excludeNames 731197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 732197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.ExclusiveEventNameFilter = function(excludeNames) 733197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch{ 734197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch WebInspector.TracingTimelineModel.EventNameFilter.call(this, excludeNames) 735197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 736197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 737197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.ExclusiveEventNameFilter.prototype = { 738197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 739197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @override 740197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TracingModel.Event} event 741197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {boolean} 742197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 743197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch accept: function(event) 744197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 745197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return !this._eventNames[event.name]; 746197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 747197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch __proto__: WebInspector.TracingTimelineModel.EventNameFilter.prototype 748197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch} 749197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 750197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch/** 7515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @constructor 7525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @implements {WebInspector.TimelineModel.Record} 7535d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TimelineModel} model 7545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {!WebInspector.TracingModel.Event} traceEvent 7555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 756197021e6b966cfb06891637935ef33fff06433d1Ben MurdochWebInspector.TracingTimelineModel.TraceEventRecord = function(model, traceEvent) 7575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles){ 7585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._model = model; 7595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._event = traceEvent; 7605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) traceEvent._timelineRecord = this; 7615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._children = []; 7625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)} 7635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 7645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)WebInspector.TracingTimelineModel.TraceEventRecord.prototype = { 7655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 7665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Array.<!ConsoleAgent.CallFrame>} 7675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 7685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) callSiteStackTrace: function() 7695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 7705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var initiator = this._event.initiator; 7715d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return initiator ? initiator.stackTrace : null; 7725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 7735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 7745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 7755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?WebInspector.TimelineModel.Record} 7765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 7775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) initiator: function() 7785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 7795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) var initiator = this._event.initiator; 7805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return initiator ? initiator._timelineRecord : null; 7815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 7825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 7835d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 784c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) * @return {?WebInspector.Target} 7855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 7865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) target: function() 7875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 788c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles) return this._event.thread.target(); 7895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 7905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 7915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 7925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {number} 7935d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 7945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) selfTime: function() 7955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 7965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event.selfTime; 7975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 7985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 7995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!Array.<!WebInspector.TimelineModel.Record>} 8015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) children: function() 8035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._children; 8055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {number} 8095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) startTime: function() 8115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event.startTime; 8135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 816197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {string} 8175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) thread: function() 8195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 820197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch // FIXME: Should return the actual thread name. 821197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return WebInspector.TimelineModel.MainThreadName; 8225d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8235d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8245d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8255d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {number} 8265d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8275d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) endTime: function() 8285d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8297242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return this._endTime || this._event.endTime || this._event.startTime; 8305d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8315d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8325d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8335d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {number} endTime 8345d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8355d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) setEndTime: function(endTime) 8365d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._endTime = endTime; 8385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!Object} 8425d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8435d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) data: function() 8445d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 845e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return this._event.args["data"]; 8465d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8475d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8485d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8495d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {string} 8505d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8515d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) type: function() 8525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8539e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) if (this._event.category === WebInspector.TracingModel.ConsoleEventCategory) 8549e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) return WebInspector.TracingTimelineModel.RecordType.ConsoleTime; 8555d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event.name; 8565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8575d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8585d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8595d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {string} 8605d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8615d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) frameId: function() 8625d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8635d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) switch (this._event.name) { 8645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) case WebInspector.TracingTimelineModel.RecordType.ScheduleStyleRecalculation: 8655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) case WebInspector.TracingTimelineModel.RecordType.RecalculateStyles: 8665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) case WebInspector.TracingTimelineModel.RecordType.InvalidateLayout: 8675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event.args["frameId"]; 8685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) case WebInspector.TracingTimelineModel.RecordType.Layout: 8695d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event.args["beginData"]["frameId"]; 8705d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) default: 871e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var data = this._event.args["data"]; 8725d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return (data && data["frame"]) || ""; 8735d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 8745d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8755d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8765d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8775d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Array.<!ConsoleAgent.CallFrame>} 8785d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8795d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) stackTrace: function() 8805d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8815d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event.stackTrace; 8825d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8835d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8845d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8855d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} key 8865d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Object} 8875d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8885d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) getUserObject: function(key) 8895d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 8905d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (key === "TimelineUIUtils::preview-element") 8915d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event.previewElement; 8925d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) throw new Error("Unexpected key: " + key); 8935d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 8945d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 8955d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 8965d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {string} key 8975d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?Object|undefined} value 8985d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 8995d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) setUserObject: function(key, value) 9005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 9015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (key !== "TimelineUIUtils::preview-element") 9025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) throw new Error("Unexpected key: " + key); 9035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) this._event.previewElement = /** @type {?Element} */ (value); 9045d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 9055d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 9065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 9075d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Array.<string>} 9085d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 9095d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) warnings: function() 9105d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 9115d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (this._event.warning) 9125d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return [this._event.warning]; 9135d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return null; 9145d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) }, 9155d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) 9165d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) /** 9175d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {!WebInspector.TracingModel.Event} 9185d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 9195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) traceEvent: function() 9205d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) { 9215d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) return this._event; 922197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 923197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 924197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 925197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @param {!WebInspector.TracingTimelineModel.TraceEventRecord} child 926197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 927197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch _addChild: function(child) 928197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 929197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch this._children.push(child); 930197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch child.parent = this; 931197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch }, 932197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch 933197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch /** 934197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch * @return {!WebInspector.TimelineModel} 935197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch */ 936197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch timelineModel: function() 937197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch { 938197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch return this._model; 9395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) } 940f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles)} 941e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 942e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 943e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 944e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/** 945e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @constructor 946e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @implements {WebInspector.OutputStream} 947e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!WebInspector.TracingTimelineModel} model 948e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!{cancel: function()}} reader 949e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!WebInspector.Progress} progress 950e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 951e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.TracingModelLoader = function(model, reader, progress) 952e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 953e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._model = model; 954e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._reader = reader; 955e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._progress = progress; 956e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._buffer = ""; 957e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._firstChunk = true; 958e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._loader = new WebInspector.TracingModel.Loader(model._tracingModel); 959e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 960e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 961e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.TracingModelLoader.prototype = { 962e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) /** 963e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {string} chunk 964e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 965e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) write: function(chunk) 966e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 967e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var data = this._buffer + chunk; 968e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var lastIndex = 0; 969e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var index; 970e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) do { 971e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) index = lastIndex; 972e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) lastIndex = WebInspector.TextUtils.findBalancedCurlyBrackets(data, index); 973e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } while (lastIndex !== -1) 974e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 975e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var json = data.slice(0, index) + "]"; 976e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._buffer = data.slice(index); 977e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 978e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (!index) 979e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return; 980e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 981e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._firstChunk) { 9827242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._model._onTracingStarted(); 983e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } else { 984e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var commaIndex = json.indexOf(","); 985e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (commaIndex !== -1) 986e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) json = json.slice(commaIndex + 1); 987e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) json = "[" + json; 988e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 989e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 990e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) var items; 991e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) try { 9927242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci items = /** @type {!Array.<!WebInspector.TracingManager.EventPayload>} */ (JSON.parse(json)); 993e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } catch (e) { 994e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._reportErrorAndCancelLoading("Malformed timeline data: " + e); 995e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return; 996e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 997e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 998e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._firstChunk) { 999e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._firstChunk = false; 1000e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) if (this._looksLikeAppVersion(items[0])) { 1001e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._reportErrorAndCancelLoading("Old Timeline format is not supported."); 1002e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return; 1003e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 1004e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 1005e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1006e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) try { 1007e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._loader.loadNextChunk(items); 1008e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } catch(e) { 1009e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._reportErrorAndCancelLoading("Malformed timeline data: " + e); 1010e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return; 1011e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 1012e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 1013e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1014e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) _reportErrorAndCancelLoading: function(messsage) 1015e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 1016e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) WebInspector.console.error(messsage); 10177242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._model._onTracingComplete(); 1018e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._model.reset(); 1019e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._reader.cancel(); 1020e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._progress.done(); 1021e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 1022e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1023e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) _looksLikeAppVersion: function(item) 1024e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 1025e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) return typeof item === "string" && item.indexOf("Chrome") !== -1; 1026e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 1027e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1028e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) close: function() 1029e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 1030e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._loader.finish(); 10317242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._model._onTracingComplete(); 1032e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) } 1033e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 1034e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1035e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)/** 1036e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @constructor 1037e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) * @param {!WebInspector.OutputStream} stream 10387242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @implements {WebInspector.OutputStreamDelegate} 1039e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) */ 1040e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.TracingTimelineSaver = function(stream) 1041e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles){ 1042e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) this._stream = stream; 1043e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 1044e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 1045e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)WebInspector.TracingTimelineSaver.prototype = { 10467242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci onTransferStarted: function() 1047e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 10487242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._stream.write("["); 1049e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 1050e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 10517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci onTransferFinished: function() 1052e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) { 10537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci this._stream.write("]"); 1054e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) }, 1055e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles) 10567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 10577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.ChunkedReader} reader 10587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 10597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci onChunkTransferred: function(reader) { }, 10607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 10617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 10627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!WebInspector.ChunkedReader} reader 10637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @param {!Event} event 10647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 10657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci onError: function(reader, event) { }, 1066e38fbeeb576b5094e34e038ab88d9d6a5c5c2214Torne (Richard Coles)} 1067