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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/perf_ui/FilmStripView.js

Issue 2623743002: DevTools: extract modules (non-extensions) (Closed)
Patch Set: rebaseline Created 3 years, 11 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
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 * @unrestricted 5 * @unrestricted
6 */ 6 */
7 Components.FilmStripView = class extends UI.HBox { 7 PerfUI.FilmStripView = class extends UI.HBox {
8 constructor() { 8 constructor() {
9 super(true); 9 super(true);
10 this.registerRequiredCSS('components_lazy/filmStripView.css'); 10 this.registerRequiredCSS('perf_ui/filmStripView.css');
11 this.contentElement.classList.add('film-strip-view'); 11 this.contentElement.classList.add('film-strip-view');
12 this._statusLabel = this.contentElement.createChild('div', 'label'); 12 this._statusLabel = this.contentElement.createChild('div', 'label');
13 this.reset(); 13 this.reset();
14 this.setMode(Components.FilmStripView.Modes.TimeBased); 14 this.setMode(PerfUI.FilmStripView.Modes.TimeBased);
15 } 15 }
16 16
17 /** 17 /**
18 * @param {!Element} imageElement 18 * @param {!Element} imageElement
19 * @param {?string} data 19 * @param {?string} data
20 */ 20 */
21 static _setImageData(imageElement, data) { 21 static _setImageData(imageElement, data) {
22 if (data) 22 if (data)
23 imageElement.src = 'data:image/jpg;base64,' + data; 23 imageElement.src = 'data:image/jpg;base64,' + data;
24 } 24 }
25 25
26 /** 26 /**
27 * @param {string} mode 27 * @param {string} mode
28 */ 28 */
29 setMode(mode) { 29 setMode(mode) {
30 this._mode = mode; 30 this._mode = mode;
31 this.contentElement.classList.toggle('time-based', mode === Components.FilmS tripView.Modes.TimeBased); 31 this.contentElement.classList.toggle('time-based', mode === PerfUI.FilmStrip View.Modes.TimeBased);
32 this.update(); 32 this.update();
33 } 33 }
34 34
35 /** 35 /**
36 * @param {!Components.FilmStripModel} filmStripModel 36 * @param {!SDK.FilmStripModel} filmStripModel
37 * @param {number} zeroTime 37 * @param {number} zeroTime
38 * @param {number} spanTime 38 * @param {number} spanTime
39 */ 39 */
40 setModel(filmStripModel, zeroTime, spanTime) { 40 setModel(filmStripModel, zeroTime, spanTime) {
41 this._model = filmStripModel; 41 this._model = filmStripModel;
42 this._zeroTime = zeroTime; 42 this._zeroTime = zeroTime;
43 this._spanTime = spanTime; 43 this._spanTime = spanTime;
44 var frames = filmStripModel.frames(); 44 var frames = filmStripModel.frames();
45 if (!frames.length) { 45 if (!frames.length) {
46 this.reset(); 46 this.reset();
47 return; 47 return;
48 } 48 }
49 this.update(); 49 this.update();
50 } 50 }
51 51
52 /** 52 /**
53 * @param {!Components.FilmStripModel.Frame} frame 53 * @param {!SDK.FilmStripModel.Frame} frame
54 * @return {!Promise<!Element>} 54 * @return {!Promise<!Element>}
55 */ 55 */
56 createFrameElement(frame) { 56 createFrameElement(frame) {
57 var time = frame.timestamp; 57 var time = frame.timestamp;
58 var element = createElementWithClass('div', 'frame'); 58 var element = createElementWithClass('div', 'frame');
59 element.title = Common.UIString('Doubleclick to zoom image. Click to view pr eceding requests.'); 59 element.title = Common.UIString('Doubleclick to zoom image. Click to view pr eceding requests.');
60 element.createChild('div', 'time').textContent = Number.millisToString(time - this._zeroTime); 60 element.createChild('div', 'time').textContent = Number.millisToString(time - this._zeroTime);
61 var imageElement = element.createChild('div', 'thumbnail').createChild('img' ); 61 var imageElement = element.createChild('div', 'thumbnail').createChild('img' );
62 element.addEventListener( 62 element.addEventListener(
63 'mousedown', this._onMouseEvent.bind(this, Components.FilmStripView.Even ts.FrameSelected, time), false); 63 'mousedown', this._onMouseEvent.bind(this, PerfUI.FilmStripView.Events.F rameSelected, time), false);
64 element.addEventListener( 64 element.addEventListener(
65 'mouseenter', this._onMouseEvent.bind(this, Components.FilmStripView.Eve nts.FrameEnter, time), false); 65 'mouseenter', this._onMouseEvent.bind(this, PerfUI.FilmStripView.Events. FrameEnter, time), false);
66 element.addEventListener( 66 element.addEventListener(
67 'mouseout', this._onMouseEvent.bind(this, Components.FilmStripView.Event s.FrameExit, time), false); 67 'mouseout', this._onMouseEvent.bind(this, PerfUI.FilmStripView.Events.Fr ameExit, time), false);
68 element.addEventListener('dblclick', this._onDoubleClick.bind(this, frame), false); 68 element.addEventListener('dblclick', this._onDoubleClick.bind(this, frame), false);
69 69
70 return frame.imageDataPromise() 70 return frame.imageDataPromise()
71 .then(Components.FilmStripView._setImageData.bind(null, imageElement)) 71 .then(PerfUI.FilmStripView._setImageData.bind(null, imageElement))
72 .then(returnElement); 72 .then(returnElement);
73 /** 73 /**
74 * @return {!Element} 74 * @return {!Element}
75 */ 75 */
76 function returnElement() { 76 function returnElement() {
77 return element; 77 return element;
78 } 78 }
79 } 79 }
80 80
81 /** 81 /**
82 * @param {number} time 82 * @param {number} time
83 * @return {!Components.FilmStripModel.Frame} 83 * @return {!SDK.FilmStripModel.Frame}
84 */ 84 */
85 frameByTime(time) { 85 frameByTime(time) {
86 /** 86 /**
87 * @param {number} time 87 * @param {number} time
88 * @param {!Components.FilmStripModel.Frame} frame 88 * @param {!SDK.FilmStripModel.Frame} frame
89 * @return {number} 89 * @return {number}
90 */ 90 */
91 function comparator(time, frame) { 91 function comparator(time, frame) {
92 return time - frame.timestamp; 92 return time - frame.timestamp;
93 } 93 }
94 // Using the first frame to fill the interval between recording start 94 // Using the first frame to fill the interval between recording start
95 // and a moment the frame is taken. 95 // and a moment the frame is taken.
96 var frames = this._model.frames(); 96 var frames = this._model.frames();
97 var index = Math.max(frames.upperBound(time, comparator) - 1, 0); 97 var index = Math.max(frames.upperBound(time, comparator) - 1, 0);
98 return frames[index]; 98 return frames[index];
99 } 99 }
100 100
101 update() { 101 update() {
102 if (!this._model) 102 if (!this._model)
103 return; 103 return;
104 var frames = this._model.frames(); 104 var frames = this._model.frames();
105 if (!frames.length) 105 if (!frames.length)
106 return; 106 return;
107 107
108 if (this._mode === Components.FilmStripView.Modes.FrameBased) { 108 if (this._mode === PerfUI.FilmStripView.Modes.FrameBased) {
109 Promise.all(frames.map(this.createFrameElement.bind(this))).then(appendEle ments.bind(this)); 109 Promise.all(frames.map(this.createFrameElement.bind(this))).then(appendEle ments.bind(this));
110 return; 110 return;
111 } 111 }
112 112
113 var width = this.contentElement.clientWidth; 113 var width = this.contentElement.clientWidth;
114 var scale = this._spanTime / width; 114 var scale = this._spanTime / width;
115 this.createFrameElement(frames[0]).then( 115 this.createFrameElement(frames[0]).then(
116 continueWhenFrameImageLoaded.bind(this)); // Calculate frame width basi ng on the first frame. 116 continueWhenFrameImageLoaded.bind(this)); // Calculate frame width basi ng on the first frame.
117 117
118 /** 118 /**
119 * @this {Components.FilmStripView} 119 * @this {PerfUI.FilmStripView}
120 * @param {!Element} element0 120 * @param {!Element} element0
121 */ 121 */
122 function continueWhenFrameImageLoaded(element0) { 122 function continueWhenFrameImageLoaded(element0) {
123 var frameWidth = Math.ceil(UI.measurePreferredSize(element0, this.contentE lement).width); 123 var frameWidth = Math.ceil(UI.measurePreferredSize(element0, this.contentE lement).width);
124 if (!frameWidth) 124 if (!frameWidth)
125 return; 125 return;
126 126
127 var promises = []; 127 var promises = [];
128 for (var pos = frameWidth; pos < width; pos += frameWidth) { 128 for (var pos = frameWidth; pos < width; pos += frameWidth) {
129 var time = pos * scale + this._zeroTime; 129 var time = pos * scale + this._zeroTime;
130 promises.push(this.createFrameElement(this.frameByTime(time)).then(fixWi dth)); 130 promises.push(this.createFrameElement(this.frameByTime(time)).then(fixWi dth));
131 } 131 }
132 Promise.all(promises).then(appendElements.bind(this)); 132 Promise.all(promises).then(appendElements.bind(this));
133 /** 133 /**
134 * @param {!Element} element 134 * @param {!Element} element
135 * @return {!Element} 135 * @return {!Element}
136 */ 136 */
137 function fixWidth(element) { 137 function fixWidth(element) {
138 element.style.width = frameWidth + 'px'; 138 element.style.width = frameWidth + 'px';
139 return element; 139 return element;
140 } 140 }
141 } 141 }
142 142
143 /** 143 /**
144 * @param {!Array.<!Element>} elements 144 * @param {!Array.<!Element>} elements
145 * @this {Components.FilmStripView} 145 * @this {PerfUI.FilmStripView}
146 */ 146 */
147 function appendElements(elements) { 147 function appendElements(elements) {
148 this.contentElement.removeChildren(); 148 this.contentElement.removeChildren();
149 for (var i = 0; i < elements.length; ++i) 149 for (var i = 0; i < elements.length; ++i)
150 this.contentElement.appendChild(elements[i]); 150 this.contentElement.appendChild(elements[i]);
151 } 151 }
152 } 152 }
153 153
154 /** 154 /**
155 * @override 155 * @override
156 */ 156 */
157 onResize() { 157 onResize() {
158 if (this._mode === Components.FilmStripView.Modes.FrameBased) 158 if (this._mode === PerfUI.FilmStripView.Modes.FrameBased)
159 return; 159 return;
160 this.update(); 160 this.update();
161 } 161 }
162 162
163 /** 163 /**
164 * @param {string} eventName 164 * @param {string} eventName
165 * @param {number} timestamp 165 * @param {number} timestamp
166 */ 166 */
167 _onMouseEvent(eventName, timestamp) { 167 _onMouseEvent(eventName, timestamp) {
168 this.dispatchEventToListeners(eventName, timestamp); 168 this.dispatchEventToListeners(eventName, timestamp);
169 } 169 }
170 170
171 /** 171 /**
172 * @param {!Components.FilmStripModel.Frame} filmStripFrame 172 * @param {!SDK.FilmStripModel.Frame} filmStripFrame
173 */ 173 */
174 _onDoubleClick(filmStripFrame) { 174 _onDoubleClick(filmStripFrame) {
175 new Components.FilmStripView.Dialog(filmStripFrame, this._zeroTime); 175 new PerfUI.FilmStripView.Dialog(filmStripFrame, this._zeroTime);
176 } 176 }
177 177
178 reset() { 178 reset() {
179 this._zeroTime = 0; 179 this._zeroTime = 0;
180 this.contentElement.removeChildren(); 180 this.contentElement.removeChildren();
181 this.contentElement.appendChild(this._statusLabel); 181 this.contentElement.appendChild(this._statusLabel);
182 } 182 }
183 183
184 /** 184 /**
185 * @param {string} text 185 * @param {string} text
186 */ 186 */
187 setStatusText(text) { 187 setStatusText(text) {
188 this._statusLabel.textContent = text; 188 this._statusLabel.textContent = text;
189 } 189 }
190 }; 190 };
191 191
192 /** @enum {symbol} */ 192 /** @enum {symbol} */
193 Components.FilmStripView.Events = { 193 PerfUI.FilmStripView.Events = {
194 FrameSelected: Symbol('FrameSelected'), 194 FrameSelected: Symbol('FrameSelected'),
195 FrameEnter: Symbol('FrameEnter'), 195 FrameEnter: Symbol('FrameEnter'),
196 FrameExit: Symbol('FrameExit'), 196 FrameExit: Symbol('FrameExit'),
197 }; 197 };
198 198
199 Components.FilmStripView.Modes = { 199 PerfUI.FilmStripView.Modes = {
200 TimeBased: 'TimeBased', 200 TimeBased: 'TimeBased',
201 FrameBased: 'FrameBased' 201 FrameBased: 'FrameBased'
202 }; 202 };
203 203
204 204
205 /** 205 /**
206 * @unrestricted 206 * @unrestricted
207 */ 207 */
208 Components.FilmStripView.Dialog = class extends UI.VBox { 208 PerfUI.FilmStripView.Dialog = class extends UI.VBox {
209 /** 209 /**
210 * @param {!Components.FilmStripModel.Frame} filmStripFrame 210 * @param {!SDK.FilmStripModel.Frame} filmStripFrame
211 * @param {number=} zeroTime 211 * @param {number=} zeroTime
212 */ 212 */
213 constructor(filmStripFrame, zeroTime) { 213 constructor(filmStripFrame, zeroTime) {
214 super(true); 214 super(true);
215 this.registerRequiredCSS('components_lazy/filmStripDialog.css'); 215 this.registerRequiredCSS('perf_ui/filmStripDialog.css');
216 this.contentElement.classList.add('filmstrip-dialog'); 216 this.contentElement.classList.add('filmstrip-dialog');
217 this.contentElement.tabIndex = 0; 217 this.contentElement.tabIndex = 0;
218 218
219 this._frames = filmStripFrame.model().frames(); 219 this._frames = filmStripFrame.model().frames();
220 this._index = filmStripFrame.index; 220 this._index = filmStripFrame.index;
221 this._zeroTime = zeroTime || filmStripFrame.model().zeroTime(); 221 this._zeroTime = zeroTime || filmStripFrame.model().zeroTime();
222 222
223 this._imageElement = this.contentElement.createChild('img'); 223 this._imageElement = this.contentElement.createChild('img');
224 var footerElement = this.contentElement.createChild('div', 'filmstrip-dialog -footer'); 224 var footerElement = this.contentElement.createChild('div', 'filmstrip-dialog -footer');
225 footerElement.createChild('div', 'flex-auto'); 225 footerElement.createChild('div', 'flex-auto');
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 this._render(); 298 this._render();
299 } 299 }
300 300
301 /** 301 /**
302 * @return {!Promise<undefined>} 302 * @return {!Promise<undefined>}
303 */ 303 */
304 _render() { 304 _render() {
305 var frame = this._frames[this._index]; 305 var frame = this._frames[this._index];
306 this._timeLabel.textContent = Number.millisToString(frame.timestamp - this._ zeroTime); 306 this._timeLabel.textContent = Number.millisToString(frame.timestamp - this._ zeroTime);
307 return frame.imageDataPromise() 307 return frame.imageDataPromise()
308 .then(Components.FilmStripView._setImageData.bind(null, this._imageEleme nt)) 308 .then(PerfUI.FilmStripView._setImageData.bind(null, this._imageElement))
309 .then(this._resize.bind(this)); 309 .then(this._resize.bind(this));
310 } 310 }
311 }; 311 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698