OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 3 * Use of this source code is governed by a BSD-style license that can be |
4 * found in the LICENSE file. | 4 * found in the LICENSE file. |
5 */ | 5 */ |
6 | 6 |
7 /** | 7 /** |
8 * @constructor | 8 * @constructor |
9 * @param {!WebInspector.TracingModel} tracingModel | 9 * @param {!WebInspector.TracingModel} tracingModel |
10 * @param {number=} zeroTime | 10 * @param {number=} zeroTime |
11 */ | 11 */ |
12 WebInspector.FilmStripModel = function(tracingModel, zeroTime) | 12 WebInspector.FilmStripModel = function(tracingModel, zeroTime) |
13 { | 13 { |
14 this._tracingModel = tracingModel; | 14 this.reset(tracingModel, zeroTime); |
15 this._zeroTime = zeroTime || tracingModel.minimumRecordTime(); | |
16 | |
17 /** @type {!Array<!WebInspector.FilmStripModel.Frame>} */ | |
18 this._frames = []; | |
19 | |
20 var browserProcess = tracingModel.processByName("Browser"); | |
21 if (!browserProcess) | |
22 return; | |
23 var mainThread = browserProcess.threadByName("CrBrowserMain"); | |
24 if (!mainThread) | |
25 return; | |
26 | |
27 var events = mainThread.events(); | |
28 for (var i = 0; i < events.length; ++i) { | |
29 var event = events[i]; | |
30 if (event.startTime < this._zeroTime) | |
31 continue; | |
32 if (!event.hasCategory(WebInspector.FilmStripModel._category)) | |
33 continue; | |
34 if (event.name === WebInspector.FilmStripModel.TraceEvents.CaptureFrame)
{ | |
35 var data = event.args["data"]; | |
36 if (data) | |
37 this._frames.push(WebInspector.FilmStripModel.Frame._fromEvent(t
his, event, this._frames.length)); | |
38 } else if (event.name === WebInspector.FilmStripModel.TraceEvents.Screen
shot) { | |
39 this._frames.push(WebInspector.FilmStripModel.Frame._fromSnapshot(th
is, /** @type {!WebInspector.TracingModel.ObjectSnapshot} */ (event), this._fram
es.length)); | |
40 } | |
41 } | |
42 } | 15 } |
43 | 16 |
44 WebInspector.FilmStripModel._category = "disabled-by-default-devtools.screenshot
"; | 17 WebInspector.FilmStripModel._category = "disabled-by-default-devtools.screenshot
"; |
45 | 18 |
46 WebInspector.FilmStripModel.TraceEvents = { | 19 WebInspector.FilmStripModel.TraceEvents = { |
47 CaptureFrame: "CaptureFrame", | 20 CaptureFrame: "CaptureFrame", |
48 Screenshot: "Screenshot" | 21 Screenshot: "Screenshot" |
49 } | 22 } |
50 | 23 |
51 WebInspector.FilmStripModel.prototype = { | 24 WebInspector.FilmStripModel.prototype = { |
52 /** | 25 /** |
| 26 * @param {!WebInspector.TracingModel} tracingModel |
| 27 * @param {number=} zeroTime |
| 28 */ |
| 29 reset: function(tracingModel, zeroTime) |
| 30 { |
| 31 this._zeroTime = zeroTime || tracingModel.minimumRecordTime(); |
| 32 this._spanTime = tracingModel.maximumRecordTime() - this._zeroTime; |
| 33 |
| 34 /** @type {!Array<!WebInspector.FilmStripModel.Frame>} */ |
| 35 this._frames = []; |
| 36 |
| 37 var browserProcess = tracingModel.processByName("Browser"); |
| 38 if (!browserProcess) |
| 39 return; |
| 40 var mainThread = browserProcess.threadByName("CrBrowserMain"); |
| 41 if (!mainThread) |
| 42 return; |
| 43 |
| 44 var events = mainThread.events(); |
| 45 for (var i = 0; i < events.length; ++i) { |
| 46 var event = events[i]; |
| 47 if (event.startTime < this._zeroTime) |
| 48 continue; |
| 49 if (!event.hasCategory(WebInspector.FilmStripModel._category)) |
| 50 continue; |
| 51 if (event.name === WebInspector.FilmStripModel.TraceEvents.CaptureFr
ame) { |
| 52 var data = event.args["data"]; |
| 53 if (data) |
| 54 this._frames.push(WebInspector.FilmStripModel.Frame._fromEve
nt(this, event, this._frames.length)); |
| 55 } else if (event.name === WebInspector.FilmStripModel.TraceEvents.Sc
reenshot) { |
| 56 this._frames.push(WebInspector.FilmStripModel.Frame._fromSnapsho
t(this, /** @type {!WebInspector.TracingModel.ObjectSnapshot} */ (event), this._
frames.length)); |
| 57 } |
| 58 } |
| 59 }, |
| 60 |
| 61 /** |
53 * @return {!Array<!WebInspector.FilmStripModel.Frame>} | 62 * @return {!Array<!WebInspector.FilmStripModel.Frame>} |
54 */ | 63 */ |
55 frames: function() | 64 frames: function() |
56 { | 65 { |
57 return this._frames; | 66 return this._frames; |
58 }, | 67 }, |
59 | 68 |
60 /** | 69 /** |
61 * @return {number} | 70 * @return {number} |
62 */ | 71 */ |
63 zeroTime: function() | 72 zeroTime: function() |
64 { | 73 { |
65 return this._zeroTime; | 74 return this._zeroTime; |
66 }, | 75 }, |
67 | 76 |
68 /** | 77 /** |
| 78 * @return {number} |
| 79 */ |
| 80 spanTime: function() |
| 81 { |
| 82 return this._spanTime; |
| 83 }, |
| 84 |
| 85 /** |
69 * @param {number} timestamp | 86 * @param {number} timestamp |
70 * @return {?WebInspector.FilmStripModel.Frame} | 87 * @return {?WebInspector.FilmStripModel.Frame} |
71 */ | 88 */ |
72 frameByTimestamp: function(timestamp) | 89 frameByTimestamp: function(timestamp) |
73 { | 90 { |
74 var index = this._frames.upperBound(timestamp, (timestamp, frame) => tim
estamp - frame.timestamp) - 1; | 91 var index = this._frames.upperBound(timestamp, (timestamp, frame) => tim
estamp - frame.timestamp) - 1; |
75 return index >= 0 ? this._frames[index] : null; | 92 return index >= 0 ? this._frames[index] : null; |
76 } | 93 } |
77 } | 94 } |
78 | 95 |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 * @return {!Promise<?string>} | 149 * @return {!Promise<?string>} |
133 */ | 150 */ |
134 imageDataPromise: function() | 151 imageDataPromise: function() |
135 { | 152 { |
136 if (this._imageData || !this._snapshot) | 153 if (this._imageData || !this._snapshot) |
137 return Promise.resolve(this._imageData); | 154 return Promise.resolve(this._imageData); |
138 | 155 |
139 return /** @type {!Promise<?string>} */ (this._snapshot.objectPromise())
; | 156 return /** @type {!Promise<?string>} */ (this._snapshot.objectPromise())
; |
140 } | 157 } |
141 } | 158 } |
OLD | NEW |