| OLD | NEW |
| (Empty) |
| 1 /* | |
| 2 * Copyright 2015 The Chromium Authors. All rights reserved. | |
| 3 * Use of this source code is governed by a BSD-style license that can be | |
| 4 * found in the LICENSE file. | |
| 5 */ | |
| 6 | |
| 7 /** | |
| 8 * @unrestricted | |
| 9 */ | |
| 10 Components.FilmStripModel = class { | |
| 11 /** | |
| 12 * @param {!SDK.TracingModel} tracingModel | |
| 13 * @param {number=} zeroTime | |
| 14 */ | |
| 15 constructor(tracingModel, zeroTime) { | |
| 16 this.reset(tracingModel, zeroTime); | |
| 17 } | |
| 18 | |
| 19 /** | |
| 20 * @param {!SDK.TracingModel} tracingModel | |
| 21 * @param {number=} zeroTime | |
| 22 */ | |
| 23 reset(tracingModel, zeroTime) { | |
| 24 this._zeroTime = zeroTime || tracingModel.minimumRecordTime(); | |
| 25 this._spanTime = tracingModel.maximumRecordTime() - this._zeroTime; | |
| 26 | |
| 27 /** @type {!Array<!Components.FilmStripModel.Frame>} */ | |
| 28 this._frames = []; | |
| 29 var browserMain = SDK.TracingModel.browserMainThread(tracingModel); | |
| 30 if (!browserMain) | |
| 31 return; | |
| 32 | |
| 33 var events = browserMain.events(); | |
| 34 for (var i = 0; i < events.length; ++i) { | |
| 35 var event = events[i]; | |
| 36 if (event.startTime < this._zeroTime) | |
| 37 continue; | |
| 38 if (!event.hasCategory(Components.FilmStripModel._category)) | |
| 39 continue; | |
| 40 if (event.name === Components.FilmStripModel.TraceEvents.CaptureFrame) { | |
| 41 var data = event.args['data']; | |
| 42 if (data) | |
| 43 this._frames.push(Components.FilmStripModel.Frame._fromEvent(this, eve
nt, this._frames.length)); | |
| 44 } else if (event.name === Components.FilmStripModel.TraceEvents.Screenshot
) { | |
| 45 this._frames.push(Components.FilmStripModel.Frame._fromSnapshot( | |
| 46 this, /** @type {!SDK.TracingModel.ObjectSnapshot} */ (event), this.
_frames.length)); | |
| 47 } | |
| 48 } | |
| 49 } | |
| 50 | |
| 51 /** | |
| 52 * @return {!Array<!Components.FilmStripModel.Frame>} | |
| 53 */ | |
| 54 frames() { | |
| 55 return this._frames; | |
| 56 } | |
| 57 | |
| 58 /** | |
| 59 * @return {number} | |
| 60 */ | |
| 61 zeroTime() { | |
| 62 return this._zeroTime; | |
| 63 } | |
| 64 | |
| 65 /** | |
| 66 * @return {number} | |
| 67 */ | |
| 68 spanTime() { | |
| 69 return this._spanTime; | |
| 70 } | |
| 71 | |
| 72 /** | |
| 73 * @param {number} timestamp | |
| 74 * @return {?Components.FilmStripModel.Frame} | |
| 75 */ | |
| 76 frameByTimestamp(timestamp) { | |
| 77 var index = this._frames.upperBound(timestamp, (timestamp, frame) => timesta
mp - frame.timestamp) - 1; | |
| 78 return index >= 0 ? this._frames[index] : null; | |
| 79 } | |
| 80 }; | |
| 81 | |
| 82 Components.FilmStripModel._category = 'disabled-by-default-devtools.screenshot'; | |
| 83 | |
| 84 Components.FilmStripModel.TraceEvents = { | |
| 85 CaptureFrame: 'CaptureFrame', | |
| 86 Screenshot: 'Screenshot' | |
| 87 }; | |
| 88 | |
| 89 /** | |
| 90 * @unrestricted | |
| 91 */ | |
| 92 Components.FilmStripModel.Frame = class { | |
| 93 /** | |
| 94 * @param {!Components.FilmStripModel} model | |
| 95 * @param {number} timestamp | |
| 96 * @param {number} index | |
| 97 */ | |
| 98 constructor(model, timestamp, index) { | |
| 99 this._model = model; | |
| 100 this.timestamp = timestamp; | |
| 101 this.index = index; | |
| 102 /** @type {?string} */ | |
| 103 this._imageData = null; | |
| 104 /** @type {?SDK.TracingModel.ObjectSnapshot} */ | |
| 105 this._snapshot = null; | |
| 106 } | |
| 107 | |
| 108 /** | |
| 109 * @param {!Components.FilmStripModel} model | |
| 110 * @param {!SDK.TracingModel.Event} event | |
| 111 * @param {number} index | |
| 112 * @return {!Components.FilmStripModel.Frame} | |
| 113 */ | |
| 114 static _fromEvent(model, event, index) { | |
| 115 var frame = new Components.FilmStripModel.Frame(model, event.startTime, inde
x); | |
| 116 frame._imageData = event.args['data']; | |
| 117 return frame; | |
| 118 } | |
| 119 | |
| 120 /** | |
| 121 * @param {!Components.FilmStripModel} model | |
| 122 * @param {!SDK.TracingModel.ObjectSnapshot} snapshot | |
| 123 * @param {number} index | |
| 124 * @return {!Components.FilmStripModel.Frame} | |
| 125 */ | |
| 126 static _fromSnapshot(model, snapshot, index) { | |
| 127 var frame = new Components.FilmStripModel.Frame(model, snapshot.startTime, i
ndex); | |
| 128 frame._snapshot = snapshot; | |
| 129 return frame; | |
| 130 } | |
| 131 | |
| 132 /** | |
| 133 * @return {!Components.FilmStripModel} | |
| 134 */ | |
| 135 model() { | |
| 136 return this._model; | |
| 137 } | |
| 138 | |
| 139 /** | |
| 140 * @return {!Promise<?string>} | |
| 141 */ | |
| 142 imageDataPromise() { | |
| 143 if (this._imageData || !this._snapshot) | |
| 144 return Promise.resolve(this._imageData); | |
| 145 | |
| 146 return /** @type {!Promise<?string>} */ (this._snapshot.objectPromise()); | |
| 147 } | |
| 148 }; | |
| OLD | NEW |