Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / Source / devtools / front_end / components_lazy / FilmStripModel.js
blob362b0c710146da0fb1f214de64d41eb1d4115735
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 */
7 /**
8 * @constructor
9 * @param {!WebInspector.TracingModel} tracingModel
10 * @param {number=} zeroTime
12 WebInspector.FilmStripModel = function(tracingModel, zeroTime)
14 this._tracingModel = tracingModel;
15 this._zeroTime = zeroTime || tracingModel.minimumRecordTime();
17 /** @type {!Array<!WebInspector.FilmStripModel.Frame>} */
18 this._frames = [];
20 var browserProcess = tracingModel.processByName("Browser");
21 if (!browserProcess)
22 return;
23 var mainThread = browserProcess.threadByName("CrBrowserMain");
24 if (!mainThread)
25 return;
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(this, event, this._frames.length));
38 } else if (event.name === WebInspector.FilmStripModel.TraceEvents.Screenshot) {
39 this._frames.push(WebInspector.FilmStripModel.Frame._fromSnapshot(this, /** @type {!WebInspector.TracingModel.ObjectSnapshot} */ (event), this._frames.length));
44 WebInspector.FilmStripModel._category = "disabled-by-default-devtools.screenshot";
46 WebInspector.FilmStripModel.TraceEvents = {
47 CaptureFrame: "CaptureFrame",
48 Screenshot: "Screenshot"
51 WebInspector.FilmStripModel.prototype = {
52 /**
53 * @return {!Array<!WebInspector.FilmStripModel.Frame>}
55 frames: function()
57 return this._frames;
60 /**
61 * @return {number}
63 zeroTime: function()
65 return this._zeroTime;
68 /**
69 * @param {number} timestamp
70 * @return {?WebInspector.FilmStripModel.Frame}
72 frameByTimestamp: function(timestamp)
74 /**
75 * @param {number} timestamp
76 * @param {!WebInspector.FilmStripModel.Frame} frame
77 * @return {number}
79 function comparator(timestamp, frame)
81 return timestamp - frame.timestamp;
83 var index = this._frames.lowerBound(timestamp, comparator);
84 return index < this._frames.length ? this._frames[index] : null;
88 /**
89 * @constructor
90 * @param {!WebInspector.FilmStripModel} model
91 * @param {number} timestamp
92 * @param {number} index
94 WebInspector.FilmStripModel.Frame = function(model, timestamp, index)
96 this._model = model;
97 this.timestamp = timestamp;
98 this.index = index;
99 /** @type {?string} */
100 this._imageData = null;
101 /** @type {?WebInspector.TracingModel.ObjectSnapshot} */
102 this._snapshot = null;
106 * @param {!WebInspector.FilmStripModel} model
107 * @param {!WebInspector.TracingModel.Event} event
108 * @param {number} index
109 * @return {!WebInspector.FilmStripModel.Frame}
111 WebInspector.FilmStripModel.Frame._fromEvent = function(model, event, index)
113 var frame = new WebInspector.FilmStripModel.Frame(model, event.startTime, index);
114 frame._imageData = event.args["data"];
115 return frame;
119 * @param {!WebInspector.FilmStripModel} model
120 * @param {!WebInspector.TracingModel.ObjectSnapshot} snapshot
121 * @param {number} index
122 * @return {!WebInspector.FilmStripModel.Frame}
124 WebInspector.FilmStripModel.Frame._fromSnapshot = function(model, snapshot, index)
126 var frame = new WebInspector.FilmStripModel.Frame(model, snapshot.startTime, index);
127 frame._snapshot = snapshot;
128 return frame;
131 WebInspector.FilmStripModel.Frame.prototype = {
133 * @return {!WebInspector.FilmStripModel}
135 model: function()
137 return this._model;
141 * @return {!Promise<?string>}
143 imageDataPromise: function()
145 if (this._imageData || !this._snapshot)
146 return Promise.resolve(this._imageData);
148 return /** @type {!Promise<?string>} */ (this._snapshot.objectPromise());