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 |