Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: Source/devtools/front_end/components_lazy/FilmStripView.js

Issue 1184383002: DevTools: adopt FilmStripModel to new screenshot recorder trace format (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: make imageDataForFrame map a parameter, not a member Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 /** 5 /**
6 * @constructor 6 * @constructor
7 * @extends {WebInspector.HBox} 7 * @extends {WebInspector.HBox}
8 */ 8 */
9 WebInspector.FilmStripView = function() 9 WebInspector.FilmStripView = function()
10 { 10 {
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
54 this.update(); 54 this.update();
55 }, 55 },
56 56
57 update: function() 57 update: function()
58 { 58 {
59 if (!this._model) 59 if (!this._model)
60 return; 60 return;
61 var frames = this._model.frames(); 61 var frames = this._model.frames();
62 if (!frames.length) 62 if (!frames.length)
63 return; 63 return;
64 /** @type {!Map<!WebInspector.FilmStripModel.Frame, string>} */
65 var imageDataForFrame = new Map();
66
67 var pendingImages = frames.length;
68 for (var frame of frames)
69 frame.requestImageData(onImageData.bind(this, frame));
alph 2015/06/17 09:41:59 If you turn them into a promises, the code should
70
71 /**
72 * @this {WebInspector.FilmStripView}
73 * @param {!WebInspector.FilmStripModel.Frame} frame
74 * @param {?string} data
75 */
76 function onImageData(frame, data)
77 {
78 --pendingImages;
79 if (!data)
80 return;
81 imageDataForFrame.set(frame, data);
82 if (!pendingImages)
83 this._updateWhenImagesLoaded(imageDataForFrame);
84 }
85 },
86
87 /**
88 * @param {!Map<!WebInspector.FilmStripModel.Frame, string>} imageDataForFra me
89 */
90 _updateWhenImagesLoaded: function(imageDataForFrame)
91 {
64 this.contentElement.removeChildren(); 92 this.contentElement.removeChildren();
65 this._label.remove(); 93 this._label.remove();
66 var zeroTime = this._zeroTime; 94 var zeroTime = this._zeroTime;
95 var frames = this._model.frames();
67 96
68 /** 97 /**
69 * @param {!WebInspector.FilmStripModel.Frame} frame 98 * @param {!WebInspector.FilmStripModel.Frame} frame
70 * @param {boolean=} skipTimeLabel 99 * @param {boolean=} skipTimeLabel
71 * @return {!Element} 100 * @return {!Element}
72 * @this {WebInspector.FilmStripView} 101 * @this {WebInspector.FilmStripView}
73 */ 102 */
74 function createElementForFrame(frame, skipTimeLabel) 103 function createElementForFrame(frame, skipTimeLabel)
75 { 104 {
76 var time = frame.timestamp; 105 var time = frame.timestamp;
77 var element = createElementWithClass("div", "frame"); 106 var element = createElementWithClass("div", "frame");
78 element.createChild("div", "thumbnail").createChild("img").src = "da ta:image/jpg;base64," + frame.imageData; 107 element.createChild("div", "thumbnail").createChild("img").src = "da ta:image/jpg;base64," + imageDataForFrame.get(frame);
79 if (!skipTimeLabel) 108 if (!skipTimeLabel)
80 element.createChild("div", "time").textContent = Number.millisTo String(time - zeroTime); 109 element.createChild("div", "time").textContent = Number.millisTo String(time - zeroTime);
81 element.addEventListener("mousedown", this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameSelected, time), false); 110 element.addEventListener("mousedown", this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameSelected, time), false);
82 element.addEventListener("mouseenter", this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameEnter, time), false); 111 element.addEventListener("mouseenter", this._onMouseEvent.bind(this, WebInspector.FilmStripView.Events.FrameEnter, time), false);
83 element.addEventListener("mouseout", this._onMouseEvent.bind(this, W ebInspector.FilmStripView.Events.FrameExit, time), false); 112 element.addEventListener("mouseout", this._onMouseEvent.bind(this, W ebInspector.FilmStripView.Events.FrameExit, time), false);
84 element.addEventListener("dblclick", this._onDoubleClick.bind(this, frame), false); 113 element.addEventListener("dblclick", this._onDoubleClick.bind(this, frame), false);
85 this.contentElement.appendChild(element); 114 this.contentElement.appendChild(element);
86 return element; 115 return element;
87 } 116 }
88 117
(...skipping 22 matching lines...) Expand all
111 function comparator(time, frame) 140 function comparator(time, frame)
112 { 141 {
113 return time - frame.timestamp; 142 return time - frame.timestamp;
114 } 143 }
115 144
116 var width = this.contentElement.clientWidth; 145 var width = this.contentElement.clientWidth;
117 var scale = this._spanTime / width; 146 var scale = this._spanTime / width;
118 147
119 // Calculate frame width basing on the first frame. 148 // Calculate frame width basing on the first frame.
120 var tempElement = createElementWithClass("div", "frame"); 149 var tempElement = createElementWithClass("div", "frame");
121 tempElement.createChild("div", "thumbnail").createChild("img").src = "da ta:image/jpg;base64," + frames[0].imageData; 150 tempElement.createChild("div", "thumbnail").createChild("img").src = "da ta:image/jpg;base64," + imageDataForFrame.get(frames[0]);
122 var frameWidth = Math.ceil(WebInspector.measurePreferredSize(tempElement , this.contentElement).width); 151 var frameWidth = Math.ceil(WebInspector.measurePreferredSize(tempElement , this.contentElement).width);
123 if (!frameWidth) 152 if (!frameWidth)
124 return; 153 return;
125 154
126 for (var pos = frameWidth; pos < width; pos += frameWidth) { 155 for (var pos = frameWidth; pos < width; pos += frameWidth) {
127 var time = pos * scale + zeroTime; 156 var time = pos * scale + zeroTime;
128 var index = frames.upperBound(time, comparator) - 1; 157 var index = frames.upperBound(time, comparator) - 1;
129 var element = index >= 0 ? createElementForFrame.call(this, frames[i ndex], true) : createEmptyElement.call(this); 158 var element = index >= 0 ? createElementForFrame.call(this, frames[i ndex], true) : createEmptyElement.call(this);
130 element.style.width = frameWidth + "px"; 159 element.style.width = frameWidth + "px";
131 } 160 }
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
174 203
175 setFetching: function() 204 setFetching: function()
176 { 205 {
177 this._label.textContent = WebInspector.UIString("Fetching frames..."); 206 this._label.textContent = WebInspector.UIString("Fetching frames...");
178 }, 207 },
179 208
180 __proto__: WebInspector.HBox.prototype 209 __proto__: WebInspector.HBox.prototype
181 } 210 }
182 211
183 /** 212 /**
213 * @param {!Image} image
214 * @param {!WebInspector.FilmStripModel.Frame} frame
215 */
216 WebInspector.FilmStripView._loadImageForFrame = function(image, frame)
alph 2015/06/17 09:41:59 Can't find where is it used.
217 {
218 frame.requestImageData(onGotImageData);
219
220 /**
221 * @param {?string} data
222 */
223 function onGotImageData(data)
224 {
225 if (data)
226 image.src = "data:image/jpg;base64," + data;
227 }
228 }
229
230 /**
184 * @constructor 231 * @constructor
185 * @extends {WebInspector.DialogDelegate} 232 * @extends {WebInspector.DialogDelegate}
186 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame 233 * @param {!WebInspector.FilmStripModel.Frame} filmStripFrame
187 * @param {number=} zeroTime 234 * @param {number=} zeroTime
188 */ 235 */
189 WebInspector.FilmStripView.DialogDelegate = function(filmStripFrame, zeroTime) 236 WebInspector.FilmStripView.DialogDelegate = function(filmStripFrame, zeroTime)
190 { 237 {
191 WebInspector.DialogDelegate.call(this); 238 WebInspector.DialogDelegate.call(this);
192 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(this.element); 239 var shadowRoot = WebInspector.createShadowRootWithCoreStyles(this.element);
193 shadowRoot.appendChild(WebInspector.Widget.createStyleElement("components_la zy/filmStripDialog.css")); 240 shadowRoot.appendChild(WebInspector.Widget.createStyleElement("components_la zy/filmStripDialog.css"));
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 320
274 _onLastFrame: function() 321 _onLastFrame: function()
275 { 322 {
276 this._index = this._frames.length - 1; 323 this._index = this._frames.length - 1;
277 this._render(); 324 this._render();
278 }, 325 },
279 326
280 _render: function() 327 _render: function()
281 { 328 {
282 var frame = this._frames[this._index]; 329 var frame = this._frames[this._index];
283 this._imageElement.src = "data:image/jpg;base64," + frame.imageData; 330 frame.requestImageData(onGotImageData.bind(this));
331 /**
332 * @param {?string} data
333 * @this {WebInspector.DialogDelegate}
334 */
335 function onGotImageData(data)
336 {
337 if (data)
338 this._imageElement.src = "data:image/jpg;base64," + data;
339 }
284 this._timeLabel.textContent = Number.millisToString(frame.timestamp - th is._zeroTime); 340 this._timeLabel.textContent = Number.millisToString(frame.timestamp - th is._zeroTime);
285 }, 341 },
286 342
287 __proto__: WebInspector.DialogDelegate.prototype 343 __proto__: WebInspector.DialogDelegate.prototype
288 } 344 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698