| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008 Apple Inc. All rights reserved. |
| 3 * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org> | 3 * Copyright (C) 2008, 2009 Anthony Ricaud <rik@webkit.org> |
| 4 * Copyright (C) 2011 Google Inc. All rights reserved. | 4 * Copyright (C) 2011 Google Inc. All rights reserved. |
| 5 * | 5 * |
| 6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
| 7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
| 8 * are met: | 8 * are met: |
| 9 * | 9 * |
| 10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 85 this._popupLinkifier = new WebInspector.Linkifier(); | 85 this._popupLinkifier = new WebInspector.Linkifier(); |
| 86 /** @type {!WebInspector.Linkifier} */ | 86 /** @type {!WebInspector.Linkifier} */ |
| 87 this.linkifier = new WebInspector.Linkifier(); | 87 this.linkifier = new WebInspector.Linkifier(); |
| 88 | 88 |
| 89 this._gridMode = true; | 89 this._gridMode = true; |
| 90 this._recording = false; | 90 this._recording = false; |
| 91 this._preserveLog = false; | 91 this._preserveLog = false; |
| 92 | 92 |
| 93 /** @type {number} */ | 93 /** @type {number} */ |
| 94 this._rowHeight = 0; | 94 this._rowHeight = 0; |
| 95 /** @type {!WebInspector.NetworkTimeCalculator} */ |
| 96 this._calculator = new WebInspector.NetworkTimeCalculator(); |
| 95 | 97 |
| 96 this._addFilters(); | 98 this._addFilters(); |
| 97 this._resetSuggestionBuilder(); | 99 this._resetSuggestionBuilder(); |
| 98 this._initializeView(); | 100 this._initializeView(); |
| 99 | 101 |
| 100 this._overview.addEventListener(WebInspector.NetworkOverview.Events.WindowCh
anged, this._onWindowChanged, this); | 102 this._overview.addEventListener(WebInspector.NetworkOverview.Events.WindowCh
anged, this._onWindowChanged, this); |
| 101 | 103 |
| 102 WebInspector.moduleSetting("networkColorCodeResourceTypes").addChangeListene
r(this._invalidateAllItems, this); | 104 WebInspector.moduleSetting("networkColorCodeResourceTypes").addChangeListene
r(this._invalidateAllItems, this); |
| 103 this._networkLogLargeRowsSetting.addChangeListener(this._updateRowsSize, thi
s); | 105 this._networkLogLargeRowsSetting.addChangeListener(this._updateRowsSize, thi
s); |
| 104 | 106 |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 | 217 |
| 216 /** | 218 /** |
| 217 * @param {!WebInspector.Event} event | 219 * @param {!WebInspector.Event} event |
| 218 */ | 220 */ |
| 219 _onWindowChanged: function(event) | 221 _onWindowChanged: function(event) |
| 220 { | 222 { |
| 221 var start = /** @type {number} */ (event.data.start); | 223 var start = /** @type {number} */ (event.data.start); |
| 222 var end = /** @type {number} */ (event.data.end); | 224 var end = /** @type {number} */ (event.data.end); |
| 223 if (!start && !end) { | 225 if (!start && !end) { |
| 224 this._timeFilter = null; | 226 this._timeFilter = null; |
| 225 this._timeCalculator.setWindow(null); | 227 this._calculator.setWindow(null); |
| 226 } else { | 228 } else { |
| 227 this._timeFilter = WebInspector.NetworkLogView._requestTimeFilter.bi
nd(null, start, end); | 229 this._timeFilter = WebInspector.NetworkLogView._requestTimeFilter.bi
nd(null, start, end); |
| 228 this._timeCalculator.setWindow(new WebInspector.NetworkTimeBoundary(
start, end)); | 230 this._calculator.setWindow(new WebInspector.NetworkTimeBoundary(star
t, end)); |
| 229 } | 231 } |
| 230 this._updateDividersIfNeeded(); | 232 this._updateDividersIfNeeded(); |
| 231 this._filterRequests(); | 233 this._filterRequests(); |
| 232 }, | 234 }, |
| 233 | 235 |
| 234 clearSelection: function() | 236 clearSelection: function() |
| 235 { | 237 { |
| 236 if (this._dataGrid.selectedNode) | 238 if (this._dataGrid.selectedNode) |
| 237 this._dataGrid.selectedNode.deselect(); | 239 this._dataGrid.selectedNode.deselect(); |
| 238 }, | 240 }, |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 278 this._removeAllNodeHighlights(); | 280 this._removeAllNodeHighlights(); |
| 279 this._parseFilterQuery(this._textFilterUI.value()); | 281 this._parseFilterQuery(this._textFilterUI.value()); |
| 280 this._filterRequests(); | 282 this._filterRequests(); |
| 281 }, | 283 }, |
| 282 | 284 |
| 283 _initializeView: function() | 285 _initializeView: function() |
| 284 { | 286 { |
| 285 this.element.id = "network-container"; | 287 this.element.id = "network-container"; |
| 286 | 288 |
| 287 this._createSortingFunctions(); | 289 this._createSortingFunctions(); |
| 288 this._createCalculators(); | |
| 289 this._createTable(); | 290 this._createTable(); |
| 290 this._createTimelineGrid(); | 291 this._createTimelineGrid(); |
| 291 this._summaryBarElement = this.element.createChild("div", "network-summa
ry-bar"); | 292 this._summaryBarElement = this.element.createChild("div", "network-summa
ry-bar"); |
| 292 | 293 |
| 293 this._updateRowsSize(); | 294 this._updateRowsSize(); |
| 294 | 295 |
| 295 this._popoverHelper = new WebInspector.PopoverHelper(this.element, this.
_getPopoverAnchor.bind(this), this._showPopover.bind(this), this._onHidePopover.
bind(this)); | 296 this._popoverHelper = new WebInspector.PopoverHelper(this.element, this.
_getPopoverAnchor.bind(this), this._showPopover.bind(this), this._onHidePopover.
bind(this)); |
| 296 // Enable faster hint. | 297 // Enable faster hint. |
| 297 this._popoverHelper.setTimeout(250, 250); | 298 this._popoverHelper.setTimeout(250, 250); |
| 298 | 299 |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 440 weight: 6 | 441 weight: 6 |
| 441 }; | 442 }; |
| 442 if (headerName === "Content-Length") | 443 if (headerName === "Content-Length") |
| 443 descriptor.align = WebInspector.DataGrid.Align.Right; | 444 descriptor.align = WebInspector.DataGrid.Align.Right; |
| 444 columns.push(descriptor); | 445 columns.push(descriptor); |
| 445 } | 446 } |
| 446 | 447 |
| 447 columns.push({ | 448 columns.push({ |
| 448 id: "timeline", | 449 id: "timeline", |
| 449 title: WebInspector.NetworkLogView._columnTitles["timeline"], | 450 title: WebInspector.NetworkLogView._columnTitles["timeline"], |
| 450 sortable: false, | 451 sortable: true, |
| 451 weight: 40, | 452 weight: 40, |
| 452 sort: WebInspector.DataGrid.Order.Ascending | 453 sort: WebInspector.DataGrid.Order.Ascending |
| 453 }); | 454 }); |
| 454 | 455 |
| 455 this._dataGrid = new WebInspector.SortableDataGrid(columns); | 456 this._dataGrid = new WebInspector.SortableDataGrid(columns); |
| 456 this._dataGrid.setStickToBottom(true); | 457 this._dataGrid.setStickToBottom(true); |
| 457 this._updateColumns(); | 458 this._updateColumns(); |
| 458 this._dataGrid.setName("networkLog"); | 459 this._dataGrid.setName("networkLog"); |
| 459 this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last); | 460 this._dataGrid.setResizeMethod(WebInspector.DataGrid.ResizeMethod.Last); |
| 460 this._dataGrid.element.classList.add("network-log-grid"); | 461 this._dataGrid.element.classList.add("network-log-grid"); |
| 461 this._dataGrid.element.addEventListener("contextmenu", this._contextMenu
.bind(this), true); | 462 this._dataGrid.element.addEventListener("contextmenu", this._contextMenu
.bind(this), true); |
| 462 this._dataGrid.element.addEventListener("mousedown", this._dataGridMouse
Down.bind(this), true); | 463 this._dataGrid.element.addEventListener("mousedown", this._dataGridMouse
Down.bind(this), true); |
| 463 this._dataGrid.show(this.element); | 464 this._dataGrid.show(this.element); |
| 464 | 465 |
| 465 // Event listeners need to be added _after_ we attach to the document, s
o that owner document is properly update. | 466 // Event listeners need to be added _after_ we attach to the document, s
o that owner document is properly update. |
| 466 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChan
ged, this._sortItems, this); | 467 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.SortingChan
ged, this._sortItems, this); |
| 467 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResi
zed, this._updateDividersIfNeeded, this); | 468 this._dataGrid.addEventListener(WebInspector.DataGrid.Events.ColumnsResi
zed, this._updateDividersIfNeeded, this); |
| 468 | 469 |
| 469 this._patchTimelineHeader(); | 470 this._sortItems(); |
| 470 this._dataGrid.sortNodes(this._sortingFunctions.startTime, false); | |
| 471 }, | 471 }, |
| 472 | 472 |
| 473 /** | 473 /** |
| 474 * @param {!Event} event | 474 * @param {!Event} event |
| 475 */ | 475 */ |
| 476 _dataGridMouseDown: function(event) | 476 _dataGridMouseDown: function(event) |
| 477 { | 477 { |
| 478 if ((!this._dataGrid.selectedNode && event.button) || event.target.enclo
singNodeOrSelfWithNodeName("a")) | 478 if ((!this._dataGrid.selectedNode && event.button) || event.target.enclo
singNodeOrSelfWithNodeName("a")) |
| 479 event.consume(); | 479 event.consume(); |
| 480 }, | 480 }, |
| 481 | 481 |
| 482 /** | 482 /** |
| 483 * @param {string} title | 483 * @param {string} title |
| 484 * @param {string} subtitle | 484 * @param {string} subtitle |
| 485 * @return {!DocumentFragment} | 485 * @return {!DocumentFragment} |
| 486 */ | 486 */ |
| 487 _makeHeaderFragment: function(title, subtitle) | 487 _makeHeaderFragment: function(title, subtitle) |
| 488 { | 488 { |
| 489 var fragment = createDocumentFragment(); | 489 var fragment = createDocumentFragment(); |
| 490 fragment.createTextChild(title); | 490 fragment.createTextChild(title); |
| 491 var subtitleDiv = fragment.createChild("div", "network-header-subtitle")
; | 491 var subtitleDiv = fragment.createChild("div", "network-header-subtitle")
; |
| 492 subtitleDiv.createTextChild(subtitle); | 492 subtitleDiv.createTextChild(subtitle); |
| 493 return fragment; | 493 return fragment; |
| 494 }, | 494 }, |
| 495 | 495 |
| 496 _patchTimelineHeader: function() | |
| 497 { | |
| 498 var timelineSorting = createElement("select"); | |
| 499 | |
| 500 var option = createElement("option"); | |
| 501 option.value = "startTime"; | |
| 502 option.label = WebInspector.UIString("Timeline"); | |
| 503 timelineSorting.appendChild(option); | |
| 504 | |
| 505 option = createElement("option"); | |
| 506 option.value = "startTime"; | |
| 507 option.label = WebInspector.UIString("Start Time"); | |
| 508 timelineSorting.appendChild(option); | |
| 509 | |
| 510 option = createElement("option"); | |
| 511 option.value = "responseTime"; | |
| 512 option.label = WebInspector.UIString("Response Time"); | |
| 513 timelineSorting.appendChild(option); | |
| 514 | |
| 515 option = createElement("option"); | |
| 516 option.value = "endTime"; | |
| 517 option.label = WebInspector.UIString("End Time"); | |
| 518 timelineSorting.appendChild(option); | |
| 519 | |
| 520 option = createElement("option"); | |
| 521 option.value = "duration"; | |
| 522 option.label = WebInspector.UIString("Duration"); | |
| 523 timelineSorting.appendChild(option); | |
| 524 | |
| 525 option = createElement("option"); | |
| 526 option.value = "latency"; | |
| 527 option.label = WebInspector.UIString("Latency"); | |
| 528 timelineSorting.appendChild(option); | |
| 529 | |
| 530 var header = this._dataGrid.headerTableHeader("timeline"); | |
| 531 header.replaceChild(timelineSorting, header.firstChild); | |
| 532 | |
| 533 timelineSorting.addEventListener("click", function(event) { event.consum
e(); }, false); | |
| 534 timelineSorting.addEventListener("change", this._sortByTimeline.bind(thi
s), false); | |
| 535 this._timelineSortSelector = timelineSorting; | |
| 536 }, | |
| 537 | |
| 538 _createSortingFunctions: function() | 496 _createSortingFunctions: function() |
| 539 { | 497 { |
| 540 this._sortingFunctions = {}; | 498 this._sortingFunctions = {}; |
| 541 this._sortingFunctions.name = WebInspector.NetworkDataGridNode.NameCompa
rator; | 499 this._sortingFunctions.name = WebInspector.NetworkDataGridNode.NameCompa
rator; |
| 542 this._sortingFunctions.method = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "method", false); | 500 this._sortingFunctions.method = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "method", false); |
| 543 this._sortingFunctions.status = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "statusCode", false); | 501 this._sortingFunctions.status = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "statusCode", false); |
| 544 this._sortingFunctions.protocol = WebInspector.NetworkDataGridNode.Reque
stPropertyComparator.bind(null, "protocol", false); | 502 this._sortingFunctions.protocol = WebInspector.NetworkDataGridNode.Reque
stPropertyComparator.bind(null, "protocol", false); |
| 545 this._sortingFunctions.scheme = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "scheme", false); | 503 this._sortingFunctions.scheme = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "scheme", false); |
| 546 this._sortingFunctions.domain = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "domain", false); | 504 this._sortingFunctions.domain = WebInspector.NetworkDataGridNode.Request
PropertyComparator.bind(null, "domain", false); |
| 547 this._sortingFunctions.remoteAddress = WebInspector.NetworkDataGridNode.
RemoteAddressComparator; | 505 this._sortingFunctions.remoteAddress = WebInspector.NetworkDataGridNode.
RemoteAddressComparator; |
| 548 this._sortingFunctions.type = WebInspector.NetworkDataGridNode.RequestPr
opertyComparator.bind(null, "mimeType", false); | 506 this._sortingFunctions.type = WebInspector.NetworkDataGridNode.RequestPr
opertyComparator.bind(null, "mimeType", false); |
| 549 this._sortingFunctions.initiator = WebInspector.NetworkDataGridNode.Init
iatorComparator; | 507 this._sortingFunctions.initiator = WebInspector.NetworkDataGridNode.Init
iatorComparator; |
| 550 this._sortingFunctions.cookies = WebInspector.NetworkDataGridNode.Reques
tCookiesCountComparator; | 508 this._sortingFunctions.cookies = WebInspector.NetworkDataGridNode.Reques
tCookiesCountComparator; |
| 551 this._sortingFunctions.setCookies = WebInspector.NetworkDataGridNode.Res
ponseCookiesCountComparator; | 509 this._sortingFunctions.setCookies = WebInspector.NetworkDataGridNode.Res
ponseCookiesCountComparator; |
| 552 this._sortingFunctions.size = WebInspector.NetworkDataGridNode.SizeCompa
rator; | 510 this._sortingFunctions.size = WebInspector.NetworkDataGridNode.SizeCompa
rator; |
| 553 this._sortingFunctions.time = WebInspector.NetworkDataGridNode.RequestPr
opertyComparator.bind(null, "duration", false); | 511 this._sortingFunctions.time = WebInspector.NetworkDataGridNode.RequestPr
opertyComparator.bind(null, "duration", false); |
| 554 this._sortingFunctions.connectionId = WebInspector.NetworkDataGridNode.R
equestPropertyComparator.bind(null, "connectionId", false); | 512 this._sortingFunctions.connectionId = WebInspector.NetworkDataGridNode.R
equestPropertyComparator.bind(null, "connectionId", false); |
| 555 this._sortingFunctions.timeline = WebInspector.NetworkDataGridNode.Reque
stPropertyComparator.bind(null, "startTime", false); | 513 this._sortingFunctions.timeline = WebInspector.NetworkDataGridNode.Reque
stPropertyComparator.bind(null, "startTime", false); |
| 556 this._sortingFunctions.startTime = WebInspector.NetworkDataGridNode.Requ
estPropertyComparator.bind(null, "startTime", false); | |
| 557 this._sortingFunctions.endTime = WebInspector.NetworkDataGridNode.Reques
tPropertyComparator.bind(null, "endTime", false); | |
| 558 this._sortingFunctions.responseTime = WebInspector.NetworkDataGridNode.R
equestPropertyComparator.bind(null, "responseReceivedTime", false); | |
| 559 this._sortingFunctions.duration = WebInspector.NetworkDataGridNode.Reque
stPropertyComparator.bind(null, "duration", true); | |
| 560 this._sortingFunctions.latency = WebInspector.NetworkDataGridNode.Reques
tPropertyComparator.bind(null, "latency", true); | |
| 561 }, | |
| 562 | |
| 563 _createCalculators: function() | |
| 564 { | |
| 565 /** @type {!WebInspector.NetworkTransferTimeCalculator} */ | |
| 566 this._timeCalculator = new WebInspector.NetworkTransferTimeCalculator(); | |
| 567 /** @type {!WebInspector.NetworkTransferDurationCalculator} */ | |
| 568 this._durationCalculator = new WebInspector.NetworkTransferDurationCalcu
lator(); | |
| 569 | |
| 570 /** @type {!Object.<string, !WebInspector.NetworkTimeCalculator>} */ | |
| 571 this._calculators = {}; | |
| 572 this._calculators.timeline = this._timeCalculator; | |
| 573 this._calculators.startTime = this._timeCalculator; | |
| 574 this._calculators.endTime = this._timeCalculator; | |
| 575 this._calculators.responseTime = this._timeCalculator; | |
| 576 this._calculators.duration = this._durationCalculator; | |
| 577 this._calculators.latency = this._durationCalculator; | |
| 578 | |
| 579 this._calculator = this._timeCalculator; | |
| 580 }, | 514 }, |
| 581 | 515 |
| 582 _sortItems: function() | 516 _sortItems: function() |
| 583 { | 517 { |
| 584 this._removeAllNodeHighlights(); | 518 this._removeAllNodeHighlights(); |
| 585 var columnIdentifier = this._dataGrid.sortColumnIdentifier(); | 519 var columnIdentifier = this._dataGrid.sortColumnIdentifier(); |
| 586 if (columnIdentifier === "timeline") { | |
| 587 this._sortByTimeline(); | |
| 588 return; | |
| 589 } | |
| 590 var sortingFunction = this._sortingFunctions[columnIdentifier]; | 520 var sortingFunction = this._sortingFunctions[columnIdentifier]; |
| 591 if (!sortingFunction) | 521 if (!sortingFunction) |
| 592 return; | 522 return; |
| 593 | 523 |
| 594 this._dataGrid.sortNodes(sortingFunction, !this._dataGrid.isSortOrderAsc
ending()); | 524 this._dataGrid.sortNodes(sortingFunction, !this._dataGrid.isSortOrderAsc
ending()); |
| 595 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM
atchIndex(this._currentMatchedRequestNode), false); | 525 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM
atchIndex(this._currentMatchedRequestNode), false); |
| 596 this._timelineSortSelector.selectedIndex = 0; | |
| 597 }, | |
| 598 | |
| 599 _sortByTimeline: function() | |
| 600 { | |
| 601 this._removeAllNodeHighlights(); | |
| 602 var selectedIndex = this._timelineSortSelector.selectedIndex; | |
| 603 if (!selectedIndex) | |
| 604 selectedIndex = 1; // Sort by start time by default. | |
| 605 var selectedOption = this._timelineSortSelector[selectedIndex]; | |
| 606 var value = selectedOption.value; | |
| 607 | |
| 608 this._setCalculator(this._calculators[value]); | |
| 609 var sortingFunction = this._sortingFunctions[value]; | |
| 610 this._dataGrid.sortNodes(sortingFunction); | |
| 611 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM
atchIndex(this._currentMatchedRequestNode), false); | |
| 612 this._dataGrid.markColumnAsSortedBy("timeline", WebInspector.DataGrid.Or
der.Ascending); | |
| 613 }, | 526 }, |
| 614 | 527 |
| 615 _updateSummaryBar: function() | 528 _updateSummaryBar: function() |
| 616 { | 529 { |
| 617 var requestsNumber = this._nodesByRequestId.size; | 530 var requestsNumber = this._nodesByRequestId.size; |
| 618 | 531 |
| 619 if (!requestsNumber) { | 532 if (!requestsNumber) { |
| 620 if (this._summaryBarElement._isDisplayingWarning) | 533 if (this._summaryBarElement._isDisplayingWarning) |
| 621 return; | 534 return; |
| 622 this._summaryBarElement._isDisplayingWarning = true; | 535 this._summaryBarElement._isDisplayingWarning = true; |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 711 | 624 |
| 712 var timelineOffset = this._dataGrid.columnOffset("timeline"); | 625 var timelineOffset = this._dataGrid.columnOffset("timeline"); |
| 713 // Position timline grid location. | 626 // Position timline grid location. |
| 714 if (timelineOffset) | 627 if (timelineOffset) |
| 715 this._timelineGrid.element.style.left = timelineOffset + "px"; | 628 this._timelineGrid.element.style.left = timelineOffset + "px"; |
| 716 | 629 |
| 717 var calculator = this.calculator(); | 630 var calculator = this.calculator(); |
| 718 calculator.setDisplayWindow(this._timelineGrid.dividersElement.clientWid
th); | 631 calculator.setDisplayWindow(this._timelineGrid.dividersElement.clientWid
th); |
| 719 this._timelineGrid.updateDividers(calculator, 50); | 632 this._timelineGrid.updateDividers(calculator, 50); |
| 720 | 633 |
| 721 if (calculator.startAtZero) { | |
| 722 // If our current sorting method starts at zero, that means it shows
all | |
| 723 // requests starting at the same point, and so onLoad event and DOMC
ontent | |
| 724 // event lines really wouldn't make much sense here, so don't render
them. | |
| 725 return; | |
| 726 } | |
| 727 | |
| 728 this._updateEventDividers(); | 634 this._updateEventDividers(); |
| 729 }, | 635 }, |
| 730 | 636 |
| 731 _updateEventDividers: function() | 637 _updateEventDividers: function() |
| 732 { | 638 { |
| 733 var calculator = this.calculator(); | 639 var calculator = this.calculator(); |
| 734 | 640 |
| 735 var loadTimePercent = calculator.computePercentageFromEventTime(this._ma
inRequestLoadTime); | 641 var loadTimePercent = calculator.computePercentageFromEventTime(this._ma
inRequestLoadTime); |
| 736 this._loadDivider.classList.toggle("invisible", this._mainRequestLoadTim
e === -1 || loadTimePercent < 0); | 642 this._loadDivider.classList.toggle("invisible", this._mainRequestLoadTim
e === -1 || loadTimePercent < 0); |
| 737 this._loadDivider.style.left = loadTimePercent + "%"; | 643 this._loadDivider.style.left = loadTimePercent + "%"; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 751 { | 657 { |
| 752 var requestIds = this._nodesByRequestId.keysArray(); | 658 var requestIds = this._nodesByRequestId.keysArray(); |
| 753 for (var i = 0; i < requestIds.length; ++i) | 659 for (var i = 0; i < requestIds.length; ++i) |
| 754 this._staleRequestIds[requestIds[i]] = true; | 660 this._staleRequestIds[requestIds[i]] = true; |
| 755 this.refresh(); | 661 this.refresh(); |
| 756 }, | 662 }, |
| 757 | 663 |
| 758 /** | 664 /** |
| 759 * @return {!WebInspector.NetworkTimeCalculator} | 665 * @return {!WebInspector.NetworkTimeCalculator} |
| 760 */ | 666 */ |
| 761 timeCalculator: function() | |
| 762 { | |
| 763 return this._timeCalculator; | |
| 764 }, | |
| 765 | |
| 766 /** | |
| 767 * @return {!WebInspector.NetworkTimeCalculator} | |
| 768 */ | |
| 769 calculator: function() | 667 calculator: function() |
| 770 { | 668 { |
| 771 return this._calculator; | 669 return this._calculator; |
| 772 }, | 670 }, |
| 773 | 671 |
| 774 /** | 672 /** |
| 775 * @param {!WebInspector.NetworkTimeCalculator} x | |
| 776 */ | |
| 777 _setCalculator: function(x) | |
| 778 { | |
| 779 if (!x || this._calculator === x) | |
| 780 return; | |
| 781 | |
| 782 this._calculator = x; | |
| 783 this._calculator.reset(); | |
| 784 | |
| 785 if (this._calculator.startAtZero) | |
| 786 this._timelineGrid.hideEventDividers(); | |
| 787 else | |
| 788 this._timelineGrid.showEventDividers(); | |
| 789 | |
| 790 this._invalidateAllItems(); | |
| 791 }, | |
| 792 | |
| 793 /** | |
| 794 * @param {!WebInspector.Event} event | 673 * @param {!WebInspector.Event} event |
| 795 */ | 674 */ |
| 796 _loadEventFired: function(event) | 675 _loadEventFired: function(event) |
| 797 { | 676 { |
| 798 if (!this._recording) | 677 if (!this._recording) |
| 799 return; | 678 return; |
| 800 | 679 |
| 801 var data = /** @type {number} */ (event.data); | 680 var data = /** @type {number} */ (event.data); |
| 802 this._mainRequestLoadTime = data || -1; | 681 this._mainRequestLoadTime = data || -1; |
| 803 // Schedule refresh to update boundaries and draw the new line. | 682 // Schedule refresh to update boundaries and draw the new line. |
| (...skipping 27 matching lines...) Expand all Loading... |
| 831 { | 710 { |
| 832 this._needsRefresh = false; | 711 this._needsRefresh = false; |
| 833 if (this._refreshTimeout) { | 712 if (this._refreshTimeout) { |
| 834 clearTimeout(this._refreshTimeout); | 713 clearTimeout(this._refreshTimeout); |
| 835 delete this._refreshTimeout; | 714 delete this._refreshTimeout; |
| 836 } | 715 } |
| 837 | 716 |
| 838 this._removeAllNodeHighlights(); | 717 this._removeAllNodeHighlights(); |
| 839 | 718 |
| 840 var oldBoundary = this.calculator().boundary(); | 719 var oldBoundary = this.calculator().boundary(); |
| 841 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestLoadT
ime); | 720 this._calculator.updateBoundariesForEventTime(this._mainRequestLoadTime)
; |
| 842 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestL
oadTime); | 721 this._calculator.updateBoundariesForEventTime(this._mainRequestDOMConten
tLoadedTime); |
| 843 this._timeCalculator.updateBoundariesForEventTime(this._mainRequestDOMCo
ntentLoadedTime); | |
| 844 this._durationCalculator.updateBoundariesForEventTime(this._mainRequestD
OMContentLoadedTime); | |
| 845 | 722 |
| 846 var dataGrid = this._dataGrid; | 723 var dataGrid = this._dataGrid; |
| 847 var rootNode = dataGrid.rootNode(); | 724 var rootNode = dataGrid.rootNode(); |
| 848 var nodesToInsert = []; | 725 var nodesToInsert = []; |
| 849 for (var requestId in this._staleRequestIds) { | 726 for (var requestId in this._staleRequestIds) { |
| 850 var node = this._nodesByRequestId.get(requestId); | 727 var node = this._nodesByRequestId.get(requestId); |
| 851 if (!node) | 728 if (!node) |
| 852 continue; | 729 continue; |
| 853 if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol]) | 730 if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol]) |
| 854 rootNode.removeChild(node); | 731 rootNode.removeChild(node); |
| 855 node[WebInspector.NetworkLogView._isFilteredOutSymbol] = !this._appl
yFilter(node); | 732 node[WebInspector.NetworkLogView._isFilteredOutSymbol] = !this._appl
yFilter(node); |
| 856 if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol]) | 733 if (!node[WebInspector.NetworkLogView._isFilteredOutSymbol]) |
| 857 nodesToInsert.push(node); | 734 nodesToInsert.push(node); |
| 858 var request = node.request(); | 735 var request = node.request(); |
| 859 this._timeCalculator.updateBoundaries(request); | 736 this._calculator.updateBoundaries(request); |
| 860 this._durationCalculator.updateBoundaries(request); | |
| 861 } | 737 } |
| 862 | 738 |
| 863 for (var i = 0; i < nodesToInsert.length; ++i) { | 739 for (var i = 0; i < nodesToInsert.length; ++i) { |
| 864 var node = nodesToInsert[i]; | 740 var node = nodesToInsert[i]; |
| 865 var request = node.request(); | 741 var request = node.request(); |
| 866 node.refresh(); | 742 node.refresh(); |
| 867 dataGrid.insertChild(node); | 743 dataGrid.insertChild(node); |
| 868 node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = thi
s._matchRequest(request); | 744 node[WebInspector.NetworkLogView._isMatchingSearchQuerySymbol] = thi
s._matchRequest(request); |
| 869 } | 745 } |
| 870 | 746 |
| 871 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM
atchIndex(this._currentMatchedRequestNode), false); | 747 this._highlightNthMatchedRequestForSearch(this._updateMatchCountAndFindM
atchIndex(this._currentMatchedRequestNode), false); |
| 872 | 748 |
| 873 if (this._shouldSetWaterfallWindow && this._mainRequestLoadTime !== -1)
{ | 749 if (this._shouldSetWaterfallWindow && this._mainRequestLoadTime !== -1)
{ |
| 874 var waterfallWindow = this.calculator().boundary(); | 750 var waterfallWindow = this.calculator().boundary(); |
| 875 var overtime = this._mainRequestLoadTime - waterfallWindow.minimum; | 751 var overtime = this._mainRequestLoadTime - waterfallWindow.minimum; |
| 876 overtime = Number.constrain(overtime, WebInspector.NetworkLogView._w
aterfallMinOvertime, WebInspector.NetworkLogView._waterfallMaxOvertime) | 752 overtime = Number.constrain(overtime, WebInspector.NetworkLogView._w
aterfallMinOvertime, WebInspector.NetworkLogView._waterfallMaxOvertime) |
| 877 var waterfallEnd = this._mainRequestLoadTime + overtime; | 753 var waterfallEnd = this._mainRequestLoadTime + overtime; |
| 878 if (waterfallEnd <= waterfallWindow.maximum) { | 754 if (waterfallEnd <= waterfallWindow.maximum) { |
| 879 waterfallWindow.maximum = waterfallEnd; | 755 waterfallWindow.maximum = waterfallEnd; |
| 880 this._shouldSetWaterfallWindow = false; | 756 this._shouldSetWaterfallWindow = false; |
| 881 this._timeCalculator.setWindow(waterfallWindow); | 757 this._calculator.setWindow(waterfallWindow); |
| 882 } | 758 } |
| 883 } | 759 } |
| 884 | 760 |
| 885 if (!this.calculator().boundary().equals(oldBoundary)) { | 761 if (!this.calculator().boundary().equals(oldBoundary)) { |
| 886 // The boundaries changed, so all item graphs are stale. | 762 // The boundaries changed, so all item graphs are stale. |
| 887 this._updateDividersIfNeeded(); | 763 this._updateDividersIfNeeded(); |
| 888 var nodes = this._nodesByRequestId.valuesArray(); | 764 var nodes = this._nodesByRequestId.valuesArray(); |
| 889 for (var i = 0; i < nodes.length; ++i) | 765 for (var i = 0; i < nodes.length; ++i) |
| 890 nodes[i].refreshGraph(); | 766 nodes[i].refreshGraph(); |
| 891 } | 767 } |
| (...skipping 10 matching lines...) Expand all Loading... |
| 902 this._shouldSetWaterfallWindow = Runtime.experiments.isEnabled("showPrim
aryLoadWaterfallInNetworkTimeline") && this._networkShowPrimaryLoadWaterfallSett
ing.get(); | 778 this._shouldSetWaterfallWindow = Runtime.experiments.isEnabled("showPrim
aryLoadWaterfallInNetworkTimeline") && this._networkShowPrimaryLoadWaterfallSett
ing.get(); |
| 903 | 779 |
| 904 this._clearSearchMatchedList(); | 780 this._clearSearchMatchedList(); |
| 905 if (this._popoverHelper) | 781 if (this._popoverHelper) |
| 906 this._popoverHelper.hidePopover(); | 782 this._popoverHelper.hidePopover(); |
| 907 | 783 |
| 908 this._overview.reset(); | 784 this._overview.reset(); |
| 909 this._timeFilter = null; | 785 this._timeFilter = null; |
| 910 this._calculator.reset(); | 786 this._calculator.reset(); |
| 911 | 787 |
| 912 this._timeCalculator.setWindow(null); | 788 this._calculator.setWindow(null); |
| 913 | 789 |
| 914 var nodes = this._nodesByRequestId.valuesArray(); | 790 var nodes = this._nodesByRequestId.valuesArray(); |
| 915 for (var i = 0; i < nodes.length; ++i) | 791 for (var i = 0; i < nodes.length; ++i) |
| 916 nodes[i].dispose(); | 792 nodes[i].dispose(); |
| 917 | 793 |
| 918 this._nodesByRequestId.clear(); | 794 this._nodesByRequestId.clear(); |
| 919 this._staleRequestIds = {}; | 795 this._staleRequestIds = {}; |
| 920 this._resetSuggestionBuilder(); | 796 this._resetSuggestionBuilder(); |
| 921 | 797 |
| 922 this._mainRequestLoadTime = -1; | 798 this._mainRequestLoadTime = -1; |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1109 */ | 985 */ |
| 1110 _showPopover: function(anchor, popover) | 986 _showPopover: function(anchor, popover) |
| 1111 { | 987 { |
| 1112 var content; | 988 var content; |
| 1113 if (anchor.classList.contains("network-script-initiated")) { | 989 if (anchor.classList.contains("network-script-initiated")) { |
| 1114 var request = /** @type {!WebInspector.NetworkRequest} */ (anchor.re
quest); | 990 var request = /** @type {!WebInspector.NetworkRequest} */ (anchor.re
quest); |
| 1115 var initiator = /** @type {!NetworkAgent.Initiator} */ (request.init
iator()); | 991 var initiator = /** @type {!NetworkAgent.Initiator} */ (request.init
iator()); |
| 1116 content = WebInspector.DOMPresentationUtils.buildStackTracePreviewCo
ntents(request.target(), this._popupLinkifier, initiator.stackTrace, initiator.a
syncStackTrace); | 992 content = WebInspector.DOMPresentationUtils.buildStackTracePreviewCo
ntents(request.target(), this._popupLinkifier, initiator.stackTrace, initiator.a
syncStackTrace); |
| 1117 popover.setCanShrink(true); | 993 popover.setCanShrink(true); |
| 1118 } else { | 994 } else { |
| 1119 content = WebInspector.RequestTimingView.createTimingTable(anchor.pa
rentElement.request, this._timeCalculator.minimumBoundary()); | 995 content = WebInspector.RequestTimingView.createTimingTable(anchor.pa
rentElement.request, this._calculator.minimumBoundary()); |
| 1120 popover.setCanShrink(false); | 996 popover.setCanShrink(false); |
| 1121 } | 997 } |
| 1122 popover.showForAnchor(content, anchor); | 998 popover.showForAnchor(content, anchor); |
| 1123 }, | 999 }, |
| 1124 | 1000 |
| 1125 _onHidePopover: function() | 1001 _onHidePopover: function() |
| 1126 { | 1002 { |
| 1127 this._popupLinkifier.reset(); | 1003 this._popupLinkifier.reset(); |
| 1128 }, | 1004 }, |
| 1129 | 1005 |
| (...skipping 855 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1985 if (request.endTime !== -1 && request.endTime < windowStart) | 1861 if (request.endTime !== -1 && request.endTime < windowStart) |
| 1986 return false; | 1862 return false; |
| 1987 return true; | 1863 return true; |
| 1988 } | 1864 } |
| 1989 | 1865 |
| 1990 WebInspector.NetworkLogView.EventTypes = { | 1866 WebInspector.NetworkLogView.EventTypes = { |
| 1991 RequestSelected: "RequestSelected", | 1867 RequestSelected: "RequestSelected", |
| 1992 SearchCountUpdated: "SearchCountUpdated", | 1868 SearchCountUpdated: "SearchCountUpdated", |
| 1993 SearchIndexUpdated: "SearchIndexUpdated" | 1869 SearchIndexUpdated: "SearchIndexUpdated" |
| 1994 }; | 1870 }; |
| OLD | NEW |