| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 }; |
| OLD | NEW |