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

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/network/NetworkWaterfallColumn.js

Issue 2514123002: [Devtools] Moved NetworkWaterfallColumn to use NetworkLogEntry (Closed)
Patch Set: changes Created 4 years 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 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 Network.NetworkWaterfallColumn = class extends UI.VBox { 7 Network.NetworkWaterfallColumn = class extends UI.VBox {
8 /** 8 /**
9 * @param {number} rowHeight 9 * @param {number} rowHeight
10 * @param {!Network.NetworkTimeCalculator} calculator 10 * @param {!Network.NetworkTimeCalculator} calculator
(...skipping 16 matching lines...) Expand all
27 this._rightPadding = 0; 27 this._rightPadding = 0;
28 28
29 this._rowHeight = rowHeight; 29 this._rowHeight = rowHeight;
30 this._headerHeight = 0; 30 this._headerHeight = 0;
31 this._calculator = calculator; 31 this._calculator = calculator;
32 32
33 this._popoverHelper = new UI.PopoverHelper(this.element); 33 this._popoverHelper = new UI.PopoverHelper(this.element);
34 this._popoverHelper.initializeCallbacks(this._getPopoverAnchor.bind(this), t his._showPopover.bind(this)); 34 this._popoverHelper.initializeCallbacks(this._getPopoverAnchor.bind(this), t his._showPopover.bind(this));
35 this._popoverHelper.setTimeout(300, 300); 35 this._popoverHelper.setTimeout(300, 300);
36 36
37 /** @type {!Array<!SDK.NetworkRequest>} */ 37 /** @type {!Array<!Network.NetworkLogEntry>} */
38 this._requestData = []; 38 this._logEntries = [];
39 39
40 /** @type {?SDK.NetworkRequest} */ 40 /** @type {?Network.NetworkLogEntry} */
41 this._hoveredRequest = null; 41 this._hoveredLogEntry = null;
42 /** @type {?SDK.NetworkRequest.InitiatorGraph} */ 42 /** @type {?SDK.NetworkRequest.InitiatorGraph} */
43 this._initiatorGraph = null; 43 this._initiatorGraph = null;
44 44
45 /** @type {?SDK.NetworkRequest} */
46 this._navigationRequest = null;
47
48 /** @type {!Map<string, !Array<number>>} */ 45 /** @type {!Map<string, !Array<number>>} */
49 this._eventDividers = new Map(); 46 this._eventDividers = new Map();
50 47
51 var colorUsage = UI.ThemeSupport.ColorUsage; 48 var colorUsage = UI.ThemeSupport.ColorUsage;
52 this._rowNavigationRequestColor = UI.themeSupport.patchColor('#def', colorUs age.Background); 49 this._rowNavigationRequestColor = UI.themeSupport.patchColor('#def', colorUs age.Background);
53 this._rowStripeColor = UI.themeSupport.patchColor('#f5f5f5', colorUsage.Back ground); 50 this._rowStripeColor = UI.themeSupport.patchColor('#f5f5f5', colorUsage.Back ground);
54 this._rowHoverColor = UI.themeSupport.patchColor( 51 this._rowHoverColor = UI.themeSupport.patchColor(
55 '#ebf2fc', /** @type {!UI.ThemeSupport.ColorUsage} */ (colorUsage.Backgr ound | colorUsage.Selection)); 52 '#ebf2fc', /** @type {!UI.ThemeSupport.ColorUsage} */ (colorUsage.Backgr ound | colorUsage.Selection));
56 this._parentInitiatorColor = UI.themeSupport.patchColor('hsla(120, 68%, 54%, 0.2)', colorUsage.Background); 53 this._parentInitiatorColor = UI.themeSupport.patchColor('hsla(120, 68%, 54%, 0.2)', colorUsage.Background);
57 this._initiatedColor = UI.themeSupport.patchColor('hsla(0, 68%, 54%, 0.2)', colorUsage.Background); 54 this._initiatedColor = UI.themeSupport.patchColor('hsla(0, 68%, 54%, 0.2)', colorUsage.Background);
(...skipping 17 matching lines...) Expand all
75 wasShown() { 72 wasShown() {
76 this.update(); 73 this.update();
77 } 74 }
78 75
79 /** 76 /**
80 * @param {!Element} element 77 * @param {!Element} element
81 * @param {!Event} event 78 * @param {!Event} event
82 * @return {!AnchorBox|undefined} 79 * @return {!AnchorBox|undefined}
83 */ 80 */
84 _getPopoverAnchor(element, event) { 81 _getPopoverAnchor(element, event) {
85 if (!this._hoveredRequest) 82 if (!this._hoveredLogEntry)
86 return; 83 return;
87 var useTimingBars = !Common.moduleSetting('networkColorCodeResourceTypes').g et() && !this._calculator.startAtZero; 84 var useTimingBars = !Common.moduleSetting('networkColorCodeResourceTypes').g et() && !this._calculator.startAtZero;
88 if (useTimingBars) { 85 if (useTimingBars) {
89 var range = Network.RequestTimingView.calculateRequestTimeRanges(this._hov eredRequest, 0) 86 var range = Network.RequestTimingView.calculateRequestTimeRanges(this._hov eredLogEntry.request(), 0)
90 .find(data => data.name === Network.RequestTimeRangeNames. Total); 87 .find(data => data.name === Network.RequestTimeRangeNames. Total);
91 var start = this._timeToPosition(range.start); 88 var start = this._timeToPosition(range.start);
92 var end = this._timeToPosition(range.end); 89 var end = this._timeToPosition(range.end);
93 } else { 90 } else {
94 var range = this._getSimplifiedBarRange(this._hoveredRequest, 0); 91 var range = this._getSimplifiedBarRange(this._hoveredLogEntry, 0);
95 var start = range.start; 92 var start = range.start;
96 var end = range.end; 93 var end = range.end;
97 } 94 }
98 95
99 if (end - start < 50) { 96 if (end - start < 50) {
100 var halfWidth = (end - start) / 2; 97 var halfWidth = (end - start) / 2;
101 start = start + halfWidth - 25; 98 start = start + halfWidth - 25;
102 end = end - halfWidth + 25; 99 end = end - halfWidth + 25;
103 } 100 }
104 101
105 if (event.clientX < this._canvasPosition.left + start || event.clientX > thi s._canvasPosition.left + end) 102 if (event.clientX < this._canvasPosition.left + start || event.clientX > thi s._canvasPosition.left + end)
106 return; 103 return;
107 104
108 var rowIndex = this._requestData.findIndex(request => this._hoveredRequest = == request); 105 var rowIndex = this._logEntries.findIndex(logEntry => this._hoveredLogEntry === logEntry);
109 var barHeight = this._getBarHeight(range.name); 106 var barHeight = this._getBarHeight(range.name);
110 var y = this._headerHeight + (this._rowHeight * rowIndex - this._scrollTop) + ((this._rowHeight - barHeight) / 2); 107 var y = this._headerHeight + (this._rowHeight * rowIndex - this._scrollTop) + ((this._rowHeight - barHeight) / 2);
111 108
112 if (event.clientY < this._canvasPosition.top + y || event.clientY > this._ca nvasPosition.top + y + barHeight) 109 if (event.clientY < this._canvasPosition.top + y || event.clientY > this._ca nvasPosition.top + y + barHeight)
113 return; 110 return;
114 111
115 var anchorBox = this.element.boxInWindow(); 112 var anchorBox = this.element.boxInWindow();
116 anchorBox.x += start; 113 anchorBox.x += start;
117 anchorBox.y += y; 114 anchorBox.y += y;
118 anchorBox.width = end - start; 115 anchorBox.width = end - start;
119 anchorBox.height = barHeight; 116 anchorBox.height = barHeight;
120 return anchorBox; 117 return anchorBox;
121 } 118 }
122 119
123 /** 120 /**
124 * @param {!Element|!AnchorBox} anchor 121 * @param {!Element|!AnchorBox} anchor
125 * @param {!UI.Popover} popover 122 * @param {!UI.Popover} popover
126 */ 123 */
127 _showPopover(anchor, popover) { 124 _showPopover(anchor, popover) {
128 if (!this._hoveredRequest) 125 if (!this._hoveredLogEntry)
129 return; 126 return;
130 var content = Network.RequestTimingView.createTimingTable(this._hoveredReque st, this._calculator.minimumBoundary()); 127 var content = Network.RequestTimingView.createTimingTable(
128 this._hoveredLogEntry.request(), this._calculator.minimumBoundary());
131 popover.showForAnchor(content, anchor); 129 popover.showForAnchor(content, anchor);
132 } 130 }
133 131
134 /** 132 /**
135 * @param {?SDK.NetworkRequest} request 133 * @param {?Network.NetworkLogEntry} logEntry
136 * @param {boolean} highlightInitiatorChain 134 * @param {boolean} highlightInitiatorChain
137 */ 135 */
138 setHoveredRequest(request, highlightInitiatorChain) { 136 setHoveredLogEntry(logEntry, highlightInitiatorChain) {
139 this._hoveredRequest = request; 137 this._hoveredLogEntry = logEntry;
140 this._initiatorGraph = (highlightInitiatorChain && request) ? request.initia torGraph() : null; 138 this._initiatorGraph = (highlightInitiatorChain && logEntry) ? logEntry.requ est().initiatorGraph() : null;
141 this.update(); 139 this.update();
142 } 140 }
143 141
144 /** 142 /**
145 * @param {number} height 143 * @param {number} height
146 */ 144 */
147 setRowHeight(height) { 145 setRowHeight(height) {
148 this._rowHeight = height; 146 this._rowHeight = height;
149 } 147 }
150 148
(...skipping 15 matching lines...) Expand all
166 /** 164 /**
167 * @param {!Network.NetworkTimeCalculator} calculator 165 * @param {!Network.NetworkTimeCalculator} calculator
168 */ 166 */
169 setCalculator(calculator) { 167 setCalculator(calculator) {
170 this._calculator = calculator; 168 this._calculator = calculator;
171 } 169 }
172 170
173 /** 171 /**
174 * @param {number} x 172 * @param {number} x
175 * @param {number} y 173 * @param {number} y
176 * @return {?SDK.NetworkRequest} 174 * @return {?Network.NetworkLogEntry}
177 */ 175 */
178 getRequestFromPoint(x, y) { 176 getLogEntryFromPoint(x, y) {
179 return this._requestData[Math.floor((this._scrollTop + y - this._headerHeigh t) / this._rowHeight)] || null; 177 return this._logEntries[Math.floor((this._scrollTop + y - this._headerHeight ) / this._rowHeight)];
180 } 178 }
181 179
182 scheduleDraw() { 180 scheduleDraw() {
183 if (this._updateRequestID) 181 if (this._updateRequestID)
184 return; 182 return;
185 this._updateRequestID = this.element.window().requestAnimationFrame(() => th is.update()); 183 this._updateRequestID = this.element.window().requestAnimationFrame(() => th is.update());
186 } 184 }
187 185
188 /** 186 /**
189 * @param {number=} scrollTop 187 * @param {number=} scrollTop
190 * @param {!Map<string, !Array<number>>=} eventDividers 188 * @param {!Map<string, !Array<number>>=} eventDividers
191 * @param {!Network.NetworkWaterfallColumn.RequestData=} requestData 189 * @param {!Array<!Network.NetworkLogEntry>=} logEntries
192 */ 190 */
193 update(scrollTop, eventDividers, requestData) { 191 update(scrollTop, eventDividers, logEntries) {
194 if (scrollTop !== undefined) 192 if (scrollTop !== undefined)
195 this._scrollTop = scrollTop; 193 this._scrollTop = scrollTop;
196 if (requestData) { 194 if (logEntries) {
197 this._requestData = requestData.requests; 195 this._logEntries = logEntries;
198 this._navigationRequest = requestData.navigationRequest;
199 this._calculateCanvasSize(); 196 this._calculateCanvasSize();
200 } 197 }
201 if (eventDividers !== undefined) 198 if (eventDividers !== undefined)
202 this._eventDividers = eventDividers; 199 this._eventDividers = eventDividers;
203 this.element.window().cancelAnimationFrame(this._updateRequestID); 200 this.element.window().cancelAnimationFrame(this._updateRequestID);
204 this._updateRequestID = null; 201 this._updateRequestID = null;
205 202
206 this._startTime = this._calculator.minimumBoundary(); 203 this._startTime = this._calculator.minimumBoundary();
207 this._endTime = this._calculator.maximumBoundary(); 204 this._endTime = this._calculator.maximumBoundary();
208 this._resetCanvas(); 205 this._resetCanvas();
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
274 var availableWidth = this._offsetWidth - this._leftPadding; 271 var availableWidth = this._offsetWidth - this._leftPadding;
275 var timeToPixel = availableWidth / (this._endTime - this._startTime); 272 var timeToPixel = availableWidth / (this._endTime - this._startTime);
276 return Math.floor(this._leftPadding + (time - this._startTime) * timeToPixel ); 273 return Math.floor(this._leftPadding + (time - this._startTime) * timeToPixel );
277 } 274 }
278 275
279 _didDrawForTest() { 276 _didDrawForTest() {
280 } 277 }
281 278
282 _draw() { 279 _draw() {
283 var useTimingBars = !Common.moduleSetting('networkColorCodeResourceTypes').g et() && !this._calculator.startAtZero; 280 var useTimingBars = !Common.moduleSetting('networkColorCodeResourceTypes').g et() && !this._calculator.startAtZero;
284 var requests = this._requestData; 281 var logEntries = this._logEntries;
285 var context = this._canvas.getContext('2d'); 282 var context = this._canvas.getContext('2d');
286 context.save(); 283 context.save();
287 context.scale(window.devicePixelRatio, window.devicePixelRatio); 284 context.scale(window.devicePixelRatio, window.devicePixelRatio);
288 context.translate(0, this._headerHeight); 285 context.translate(0, this._headerHeight);
289 context.rect(0, 0, this._offsetWidth, this._offsetHeight); 286 context.rect(0, 0, this._offsetWidth, this._offsetHeight);
290 context.clip(); 287 context.clip();
291 var firstRequestIndex = Math.floor(this._scrollTop / this._rowHeight); 288 var firstRequestIndex = Math.floor(this._scrollTop / this._rowHeight);
292 var lastRequestIndex = 289 var lastRequestIndex =
293 Math.min(requests.length, firstRequestIndex + Math.ceil(this._offsetHeig ht / this._rowHeight)); 290 Math.min(logEntries.length, firstRequestIndex + Math.ceil(this._offsetHe ight / this._rowHeight));
294 for (var i = firstRequestIndex; i < lastRequestIndex; i++) { 291 for (var i = firstRequestIndex; i < lastRequestIndex; i++) {
295 var rowOffset = this._rowHeight * i; 292 var rowOffset = this._rowHeight * i;
296 var request = requests[i]; 293 var logEntry = logEntries[i];
297 this._decorateRow(context, request, i, rowOffset - this._scrollTop); 294 this._decorateRow(context, logEntry, i, rowOffset - this._scrollTop);
298 if (useTimingBars) 295 if (useTimingBars)
299 this._drawTimingBars(context, request, rowOffset - this._scrollTop); 296 this._drawTimingBars(context, logEntry, rowOffset - this._scrollTop);
300 else 297 else
301 this._drawSimplifiedBars(context, request, rowOffset - this._scrollTop); 298 this._drawSimplifiedBars(context, logEntry, rowOffset - this._scrollTop) ;
302 } 299 }
303 this._drawEventDividers(context); 300 this._drawEventDividers(context);
304 context.restore(); 301 context.restore();
305 302
306 const freeZoneAtLeft = 75; 303 const freeZoneAtLeft = 75;
307 UI.TimelineGrid.drawCanvasGrid(context, this._calculator, this._fontSize, fr eeZoneAtLeft); 304 UI.TimelineGrid.drawCanvasGrid(context, this._calculator, this._fontSize, fr eeZoneAtLeft);
308 this._didDrawForTest(); 305 this._didDrawForTest();
309 } 306 }
310 307
311 /** 308 /**
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
348 case types.Blocking: 345 case types.Blocking:
349 case types.Push: 346 case types.Push:
350 case types.Queueing: 347 case types.Queueing:
351 return 7; 348 return 7;
352 default: 349 default:
353 return 13; 350 return 13;
354 } 351 }
355 } 352 }
356 353
357 /** 354 /**
358 * @param {!SDK.NetworkRequest} request 355 * @param {!Network.NetworkLogEntry} logEntry
359 * @return {string} 356 * @return {string}
360 */ 357 */
361 _borderColorForResourceType(request) { 358 _borderColorForResourceType(logEntry) {
362 var resourceType = request.resourceType(); 359 var resourceType = logEntry.request().resourceType();
363 if (this._borderColorsForResourceTypeCache.has(resourceType)) 360 if (this._borderColorsForResourceTypeCache.has(resourceType))
364 return this._borderColorsForResourceTypeCache.get(resourceType); 361 return this._borderColorsForResourceTypeCache.get(resourceType);
365 var colorsForResourceType = Network.NetworkWaterfallColumn._colorsForResourc eType; 362 var colorsForResourceType = Network.NetworkWaterfallColumn._colorsForResourc eType;
366 var color = colorsForResourceType[resourceType] || colorsForResourceType.Oth er; 363 var color = colorsForResourceType[resourceType] || colorsForResourceType.Oth er;
367 var parsedColor = Common.Color.parse(color); 364 var parsedColor = Common.Color.parse(color);
368 var hsla = parsedColor.hsla(); 365 var hsla = parsedColor.hsla();
369 hsla[1] /= 2; 366 hsla[1] /= 2;
370 hsla[2] -= Math.min(hsla[2], 0.2); 367 hsla[2] -= Math.min(hsla[2], 0.2);
371 var resultColor = /** @type {string} */ (parsedColor.asString(null)); 368 var resultColor = /** @type {string} */ (parsedColor.asString(null));
372 this._borderColorsForResourceTypeCache.set(resourceType, resultColor); 369 this._borderColorsForResourceTypeCache.set(resourceType, resultColor);
373 return resultColor; 370 return resultColor;
374 } 371 }
375 372
376 /** 373 /**
377 * @param {!CanvasRenderingContext2D} context 374 * @param {!CanvasRenderingContext2D} context
378 * @param {!SDK.NetworkRequest} request 375 * @param {!Network.NetworkLogEntry} logEntry
379 * @return {string|!CanvasGradient} 376 * @return {string|!CanvasGradient}
380 */ 377 */
381 _colorForResourceType(context, request) { 378 _colorForResourceType(context, logEntry) {
379 var request = logEntry.request();
382 var colorsForResourceType = Network.NetworkWaterfallColumn._colorsForResourc eType; 380 var colorsForResourceType = Network.NetworkWaterfallColumn._colorsForResourc eType;
383 var resourceType = request.resourceType(); 381 var resourceType = request.resourceType();
384 var color = colorsForResourceType[resourceType] || colorsForResourceType.Oth er; 382 var color = colorsForResourceType[resourceType] || colorsForResourceType.Oth er;
385 if (request.cached()) 383 if (request.cached())
386 return color; 384 return color;
387 385
388 if (this._colorsForResourceTypeCache.has(color)) 386 if (this._colorsForResourceTypeCache.has(color))
389 return this._colorsForResourceTypeCache.get(color); 387 return this._colorsForResourceTypeCache.get(color);
390 var parsedColor = Common.Color.parse(color); 388 var parsedColor = Common.Color.parse(color);
391 var hsla = parsedColor.hsla(); 389 var hsla = parsedColor.hsla();
392 hsla[1] -= Math.min(hsla[1], 0.28); 390 hsla[1] -= Math.min(hsla[1], 0.28);
393 hsla[2] -= Math.min(hsla[2], 0.15); 391 hsla[2] -= Math.min(hsla[2], 0.15);
394 var gradient = context.createLinearGradient(0, 0, 0, this._getBarHeight()); 392 var gradient = context.createLinearGradient(0, 0, 0, this._getBarHeight());
395 gradient.addColorStop(0, color); 393 gradient.addColorStop(0, color);
396 gradient.addColorStop(1, /** @type {string} */ (parsedColor.asString(null))) ; 394 gradient.addColorStop(1, /** @type {string} */ (parsedColor.asString(null))) ;
397 this._colorsForResourceTypeCache.set(color, gradient); 395 this._colorsForResourceTypeCache.set(color, gradient);
398 return gradient; 396 return gradient;
399 } 397 }
400 398
401 /** 399 /**
402 * @param {!SDK.NetworkRequest} request 400 * @param {!Network.NetworkLogEntry} logEntry
403 * @param {number} borderOffset 401 * @param {number} borderOffset
404 * @return {!{start: number, mid: number, end: number}} 402 * @return {!{start: number, mid: number, end: number}}
405 */ 403 */
406 _getSimplifiedBarRange(request, borderOffset) { 404 _getSimplifiedBarRange(logEntry, borderOffset) {
407 var drawWidth = this._offsetWidth - this._leftPadding; 405 var drawWidth = this._offsetWidth - this._leftPadding;
408 var percentages = this._calculator.computeBarGraphPercentages(request); 406 var percentages = this._calculator.computeBarGraphPercentages(logEntry.reque st());
409 return { 407 return {
410 start: this._leftPadding + Math.floor((percentages.start / 100) * drawWidt h) + borderOffset, 408 start: this._leftPadding + Math.floor((percentages.start / 100) * drawWidt h) + borderOffset,
411 mid: this._leftPadding + Math.floor((percentages.middle / 100) * drawWidth ) + borderOffset, 409 mid: this._leftPadding + Math.floor((percentages.middle / 100) * drawWidth ) + borderOffset,
412 end: this._leftPadding + Math.floor((percentages.end / 100) * drawWidth) + borderOffset 410 end: this._leftPadding + Math.floor((percentages.end / 100) * drawWidth) + borderOffset
413 }; 411 };
414 } 412 }
415 413
416 /** 414 /**
417 * @param {!CanvasRenderingContext2D} context 415 * @param {!CanvasRenderingContext2D} context
418 * @param {!SDK.NetworkRequest} request 416 * @param {!Network.NetworkLogEntry} logEntry
419 * @param {number} y 417 * @param {number} y
420 */ 418 */
421 _drawSimplifiedBars(context, request, y) { 419 _drawSimplifiedBars(context, logEntry, y) {
422 const borderWidth = 1; 420 const borderWidth = 1;
423 var borderOffset = borderWidth % 2 === 0 ? 0 : 0.5; 421 var borderOffset = borderWidth % 2 === 0 ? 0 : 0.5;
424 422
425 context.save(); 423 context.save();
426 var ranges = this._getSimplifiedBarRange(request, borderOffset); 424 var ranges = this._getSimplifiedBarRange(logEntry, borderOffset);
427 var height = this._getBarHeight(); 425 var height = this._getBarHeight();
428 y += Math.floor(this._rowHeight / 2 - height / 2 + borderWidth) - borderWidt h / 2; 426 y += Math.floor(this._rowHeight / 2 - height / 2 + borderWidth) - borderWidt h / 2;
429 427
430 context.translate(0, y); 428 context.translate(0, y);
431 context.fillStyle = this._colorForResourceType(context, request); 429 context.fillStyle = this._colorForResourceType(context, logEntry);
432 context.strokeStyle = this._borderColorForResourceType(request); 430 context.strokeStyle = this._borderColorForResourceType(logEntry);
433 context.lineWidth = borderWidth; 431 context.lineWidth = borderWidth;
434 432
435 context.beginPath(); 433 context.beginPath();
436 context.globalAlpha = 0.5; 434 context.globalAlpha = 0.5;
437 context.rect(ranges.start, 0, ranges.mid - ranges.start, height - borderWidt h); 435 context.rect(ranges.start, 0, ranges.mid - ranges.start, height - borderWidt h);
438 context.fill(); 436 context.fill();
439 context.stroke(); 437 context.stroke();
440 438
441 var barWidth = Math.max(2, ranges.end - ranges.mid); 439 var barWidth = Math.max(2, ranges.end - ranges.mid);
442 context.beginPath(); 440 context.beginPath();
443 context.globalAlpha = 1; 441 context.globalAlpha = 1;
444 context.rect(ranges.mid, 0, barWidth, height - borderWidth); 442 context.rect(ranges.mid, 0, barWidth, height - borderWidth);
445 context.fill(); 443 context.fill();
446 context.stroke(); 444 context.stroke();
447 445
448 /** @type {?{left: string, right: string, tooltip: (string|undefined)}} */ 446 /** @type {?{left: string, right: string, tooltip: (string|undefined)}} */
449 var labels = null; 447 var labels = null;
450 if (request === this._hoveredRequest) { 448 if (logEntry === this._hoveredLogEntry) {
451 labels = this._calculator.computeBarGraphLabels(request); 449 labels = this._calculator.computeBarGraphLabels(logEntry.request());
452 this._drawSimplifiedBarDetails( 450 this._drawSimplifiedBarDetails(
453 context, labels.left, labels.right, ranges.start, ranges.mid, ranges.m id + barWidth + borderOffset); 451 context, labels.left, labels.right, ranges.start, ranges.mid, ranges.m id + barWidth + borderOffset);
454 } 452 }
455 453
456 if (!this._calculator.startAtZero) { 454 if (!this._calculator.startAtZero) {
457 var queueingRange = Network.RequestTimingView.calculateRequestTimeRanges(r equest, 0) 455 var queueingRange = Network.RequestTimingView.calculateRequestTimeRanges(l ogEntry.request(), 0)
458 .find(data => data.name === Network.RequestTimeRan geNames.Total); 456 .find(data => data.name === Network.RequestTimeRan geNames.Total);
459 var leftLabelWidth = labels ? context.measureText(labels.left).width : 0; 457 var leftLabelWidth = labels ? context.measureText(labels.left).width : 0;
460 var leftTextPlacedInBar = leftLabelWidth < ranges.mid - ranges.start; 458 var leftTextPlacedInBar = leftLabelWidth < ranges.mid - ranges.start;
461 const wiskerTextPadding = 13; 459 const wiskerTextPadding = 13;
462 var textOffset = (labels && !leftTextPlacedInBar) ? leftLabelWidth + wiske rTextPadding : 0; 460 var textOffset = (labels && !leftTextPlacedInBar) ? leftLabelWidth + wiske rTextPadding : 0;
463 var queueingStart = this._timeToPosition(queueingRange.start); 461 var queueingStart = this._timeToPosition(queueingRange.start);
464 if (ranges.start - textOffset > queueingStart) { 462 if (ranges.start - textOffset > queueingStart) {
465 context.beginPath(); 463 context.beginPath();
466 context.globalAlpha = 1; 464 context.globalAlpha = 1;
467 context.strokeStyle = UI.themeSupport.patchColor('#a5a5a5', UI.ThemeSupp ort.ColorUsage.Foreground); 465 context.strokeStyle = UI.themeSupport.patchColor('#a5a5a5', UI.ThemeSupp ort.ColorUsage.Foreground);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
523 context.lineWidth = 1; 521 context.lineWidth = 1;
524 context.moveTo(endX, Math.floor(height / 2)); 522 context.moveTo(endX, Math.floor(height / 2));
525 context.lineTo(endX + barDotLineLength, Math.floor(height / 2)); 523 context.lineTo(endX + barDotLineLength, Math.floor(height / 2));
526 context.stroke(); 524 context.stroke();
527 } 525 }
528 context.restore(); 526 context.restore();
529 } 527 }
530 528
531 /** 529 /**
532 * @param {!CanvasRenderingContext2D} context 530 * @param {!CanvasRenderingContext2D} context
533 * @param {!SDK.NetworkRequest} request 531 * @param {!Network.NetworkLogEntry} logEntry
534 * @param {number} y 532 * @param {number} y
535 */ 533 */
536 _drawTimingBars(context, request, y) { 534 _drawTimingBars(context, logEntry, y) {
537 context.save(); 535 context.save();
538 var ranges = Network.RequestTimingView.calculateRequestTimeRanges(request, 0 ); 536 var ranges = Network.RequestTimingView.calculateRequestTimeRanges(logEntry.r equest(), 0);
539 for (var range of ranges) { 537 for (var range of ranges) {
540 if (range.name === Network.RequestTimeRangeNames.Total || range.name === N etwork.RequestTimeRangeNames.Sending || 538 if (range.name === Network.RequestTimeRangeNames.Total || range.name === N etwork.RequestTimeRangeNames.Sending ||
541 range.end - range.start === 0) 539 range.end - range.start === 0)
542 continue; 540 continue;
543 context.beginPath(); 541 context.beginPath();
544 var lineWidth = 0; 542 var lineWidth = 0;
545 var color = this._colorForType(range.name); 543 var color = this._colorForType(range.name);
546 var borderColor = color; 544 var borderColor = color;
547 if (range.name === Network.RequestTimeRangeNames.Queueing) { 545 if (range.name === Network.RequestTimeRangeNames.Queueing) {
548 borderColor = 'lightgrey'; 546 borderColor = 'lightgrey';
(...skipping 12 matching lines...) Expand all
561 context.strokeStyle = borderColor; 559 context.strokeStyle = borderColor;
562 context.stroke(); 560 context.stroke();
563 } 561 }
564 context.fill(); 562 context.fill();
565 } 563 }
566 context.restore(); 564 context.restore();
567 } 565 }
568 566
569 /** 567 /**
570 * @param {!CanvasRenderingContext2D} context 568 * @param {!CanvasRenderingContext2D} context
571 * @param {!SDK.NetworkRequest} request 569 * @param {!Network.NetworkLogEntry} logEntry
572 * @param {number} rowNumber 570 * @param {number} rowNumber
573 * @param {number} y 571 * @param {number} y
574 */ 572 */
575 _decorateRow(context, request, rowNumber, y) { 573 _decorateRow(context, logEntry, rowNumber, y) {
576 if (rowNumber % 2 === 1 && this._hoveredRequest !== request && this._navigat ionRequest !== request && 574 var isOddRow = rowNumber % 2 === 1;
577 !this._initiatorGraph) 575 if (isOddRow && this._hoveredLogEntry !== logEntry && !logEntry.isNavigation Request() && !this._initiatorGraph)
578 return; 576 return;
579 577
580 var color = getRowColor.call(this); 578 var color = getRowColor.call(this);
581 if (color === 'transparent') 579 if (color === 'transparent')
582 return; 580 return;
583 context.save(); 581 context.save();
584 context.beginPath(); 582 context.beginPath();
585 context.fillStyle = color; 583 context.fillStyle = color;
586 context.rect(0, y, this._offsetWidth, this._rowHeight); 584 context.rect(0, y, this._offsetWidth, this._rowHeight);
587 context.fill(); 585 context.fill();
588 context.restore(); 586 context.restore();
589 587
590 /** 588 /**
591 * @return {string} 589 * @return {string}
592 * @this {Network.NetworkWaterfallColumn} 590 * @this {Network.NetworkWaterfallColumn}
593 */ 591 */
594 function getRowColor() { 592 function getRowColor() {
595 if (this._hoveredRequest === request) 593 var request = logEntry.request();
594 if (this._hoveredLogEntry === logEntry)
596 return this._rowHoverColor; 595 return this._rowHoverColor;
597 if (this._initiatorGraph) { 596 if (this._initiatorGraph) {
598 if (this._initiatorGraph.initiators.has(request)) 597 if (this._initiatorGraph.initiators.has(request))
599 return this._parentInitiatorColor; 598 return this._parentInitiatorColor;
600 if (this._initiatorGraph.initiated.has(request)) 599 if (this._initiatorGraph.initiated.has(request))
601 return this._initiatedColor; 600 return this._initiatedColor;
602 } 601 }
603 if (this._navigationRequest === request) 602 if (logEntry.isNavigationRequest())
604 return this._rowNavigationRequestColor; 603 return this._rowNavigationRequestColor;
605 if (rowNumber % 2 === 1) 604 if (rowNumber % 2 === 1)
606 return 'transparent'; 605 return 'transparent';
607 return this._rowStripeColor; 606 return this._rowStripeColor;
608 } 607 }
609 } 608 }
610 }; 609 };
611 610
612 /**
613 * @typedef {{requests: !Array<!SDK.NetworkRequest>, navigationRequest: ?SDK.Net workRequest}}
614 */
615 Network.NetworkWaterfallColumn.RequestData;
616
617 Network.NetworkWaterfallColumn._colorsForResourceType = { 611 Network.NetworkWaterfallColumn._colorsForResourceType = {
618 document: 'hsl(215, 100%, 80%)', 612 document: 'hsl(215, 100%, 80%)',
619 font: 'hsl(8, 100%, 80%)', 613 font: 'hsl(8, 100%, 80%)',
620 media: 'hsl(90, 50%, 80%)', 614 media: 'hsl(90, 50%, 80%)',
621 image: 'hsl(90, 50%, 80%)', 615 image: 'hsl(90, 50%, 80%)',
622 script: 'hsl(31, 100%, 80%)', 616 script: 'hsl(31, 100%, 80%)',
623 stylesheet: 'hsl(272, 64%, 80%)', 617 stylesheet: 'hsl(272, 64%, 80%)',
624 texttrack: 'hsl(8, 100%, 80%)', 618 texttrack: 'hsl(8, 100%, 80%)',
625 websocket: 'hsl(0, 0%, 95%)', 619 websocket: 'hsl(0, 0%, 95%)',
626 xhr: 'hsl(53, 100%, 80%)', 620 xhr: 'hsl(53, 100%, 80%)',
627 other: 'hsl(0, 0%, 95%)' 621 other: 'hsl(0, 0%, 95%)'
628 }; 622 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698