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

Unified Diff: third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js

Issue 2914033002: [Devtools] NetworkLogView now uses NetworkLog as source of truth. (Closed)
Patch Set: fixes Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
diff --git a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
index c15bedf79c1a9cf4b6ea1e9a97643c0d5dad44e5..864534646ad4263d0f53e0ab78b248d8f500c91e 100644
--- a/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
+++ b/third_party/WebKit/Source/devtools/front_end/network/NetworkLogView.js
@@ -71,10 +71,10 @@ Network.NetworkLogView = class extends UI.VBox {
this._columns = new Network.NetworkLogViewColumns(
this, this._timeCalculator, this._durationCalculator, networkLogLargeRowsSetting);
- /** @type {!Map.<string, !Network.NetworkRequestNode>} */
- this._nodesByRequestId = new Map();
- /** @type {!Object.<string, boolean>} */
- this._staleRequestIds = {};
+ /** @type {!Set<!SDK.NetworkRequest>} */
+ this._staleRequests = new Set();
+ /** @type {!Set<!SDK.NetworkRequest>} */
+ this._nodesToRemove = new Set();
/** @type {number} */
this._mainRequestLoadTime = -1;
/** @type {number} */
@@ -114,12 +114,10 @@ Network.NetworkLogView = class extends UI.VBox {
.addChangeListener(this._invalidateAllItems.bind(this, false), this);
SDK.targetManager.observeModels(SDK.NetworkManager, this);
- SDK.targetManager.addModelListener(
- SDK.NetworkManager, SDK.NetworkManager.Events.RequestStarted, this._onRequestStarted, this);
- SDK.targetManager.addModelListener(
- SDK.NetworkManager, SDK.NetworkManager.Events.RequestUpdated, this._onRequestUpdated, this);
- SDK.targetManager.addModelListener(
- SDK.NetworkManager, SDK.NetworkManager.Events.RequestFinished, this._onRequestUpdated, this);
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestAdded, this._onRequestUpdated, this);
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestUpdated, this._onRequestUpdated, this);
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.Reset, this._reset, this);
+ NetworkLog.networkLog.addEventListener(NetworkLog.NetworkLog.Events.RequestsRemoved, this._onRequestsRemoved, this);
this._updateGroupByFrame();
Common.moduleSetting('network.group-by-frame').addChangeListener(() => this._updateGroupByFrame());
@@ -365,8 +363,6 @@ Network.NetworkLogView = class extends UI.VBox {
_setGrouping(groupKey) {
var groupLookup = groupKey ? this._groupLookups.get(groupKey) || null : null;
this._activeGroupLookup = groupLookup;
- if (groupLookup)
- groupLookup.reset();
this._invalidateAllItems();
}
@@ -379,7 +375,7 @@ Network.NetworkLogView = class extends UI.VBox {
* @return {?Network.NetworkRequestNode}
*/
nodeForRequest(request) {
- return this._nodesByRequestId.get(request.requestId());
+ return request[Network.NetworkLogView._networkNodeSymbol] || null;
}
/**
@@ -402,17 +398,15 @@ Network.NetworkLogView = class extends UI.VBox {
* @param {!SDK.NetworkManager} networkManager
*/
modelAdded(networkManager) {
- if (!networkManager.target().parentTarget()) {
- var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel);
- if (resourceTreeModel) {
- resourceTreeModel.addEventListener(
- SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
- resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this);
- resourceTreeModel.addEventListener(
- SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
- }
+ // TODO(allada) Remove dependency on networkManager and instead use NetworkLog and PageLoad for needed data.
+ if (networkManager.target().parentTarget())
+ return;
+ var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel);
+ if (resourceTreeModel) {
+ resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this);
+ resourceTreeModel.addEventListener(
+ SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
}
- NetworkLog.networkLog.requestsForManager(networkManager).forEach(this._appendRequest.bind(this));
}
/**
@@ -423,8 +417,6 @@ Network.NetworkLogView = class extends UI.VBox {
if (!networkManager.target().parentTarget()) {
var resourceTreeModel = networkManager.target().model(SDK.ResourceTreeModel);
if (resourceTreeModel) {
- resourceTreeModel.removeEventListener(
- SDK.ResourceTreeModel.Events.MainFrameNavigated, this._mainFrameNavigated, this);
resourceTreeModel.removeEventListener(SDK.ResourceTreeModel.Events.Load, this._loadEventFired, this);
resourceTreeModel.removeEventListener(
SDK.ResourceTreeModel.Events.DOMContentLoaded, this._domContentLoadedEventFired, this);
@@ -520,7 +512,7 @@ Network.NetworkLogView = class extends UI.VBox {
UI.formatLocalized('Perform a request or hit %s to record the reload.', [reloadShortcutNode]));
} else {
var recordNode = hintText.createChild('b');
- recordNode.textContent = UI.shortcutRegistry.shortcutTitleForAction('network.toggle-recording');
+ recordNode.textContent = UI.shortcutRegistry.shortcutTitleForAction('network_log.toggle-recording');
dgozman 2017/06/14 22:21:47 This does not work.
allada 2017/06/15 00:19:48 Done.
hintText.appendChild(UI.formatLocalized(
'Record (%s) or reload (%s) to display network activity.', [recordNode, reloadShortcutNode]));
}
@@ -600,26 +592,24 @@ Network.NetworkLogView = class extends UI.VBox {
}
_updateSummaryBar() {
- var requestsNumber = this._nodesByRequestId.size;
-
- if (!requestsNumber) {
- this._showRecordingHint();
- return;
- }
this._hideRecordingHint();
var transferSize = 0;
- var selectedRequestsNumber = 0;
+ var selectedNodeNumber = 0;
var selectedTransferSize = 0;
var baseTime = -1;
var maxTime = -1;
- var nodes = this._nodesByRequestId.valuesArray();
- for (var i = 0; i < nodes.length; ++i) {
- var request = nodes[i].request();
+
+ var nodeCount = 0;
+ for (var request of NetworkLog.networkLog.requests()) {
+ var node = request[Network.NetworkLogView._networkNodeSymbol];
+ if (!node)
+ continue;
+ nodeCount++;
var requestTransferSize = request.transferSize;
transferSize += requestTransferSize;
- if (!nodes[i][Network.NetworkLogView._isFilteredOutSymbol]) {
- selectedRequestsNumber++;
+ if (!node[Network.NetworkLogView._isFilteredOutSymbol]) {
+ selectedNodeNumber++;
selectedTransferSize += requestTransferSize;
}
if (request.url() === request.networkManager().target().inspectedURL() &&
@@ -629,6 +619,11 @@ Network.NetworkLogView = class extends UI.VBox {
maxTime = request.endTime;
}
+ if (!nodeCount) {
+ this._showRecordingHint();
+ return;
+ }
+
var summaryBar = this._summaryBarElement;
summaryBar.removeChildren();
var separator = '\u2002\u2758\u2002';
@@ -644,13 +639,13 @@ Network.NetworkLogView = class extends UI.VBox {
return span;
}
- if (selectedRequestsNumber !== requestsNumber) {
- appendChunk(Common.UIString('%d / %d requests', selectedRequestsNumber, requestsNumber));
+ if (selectedNodeNumber !== nodeCount) {
+ appendChunk(Common.UIString('%d / %d requests', selectedNodeNumber, nodeCount));
appendChunk(separator);
appendChunk(Common.UIString(
'%s / %s transferred', Number.bytesToString(selectedTransferSize), Number.bytesToString(transferSize)));
} else {
- appendChunk(Common.UIString('%d requests', requestsNumber));
+ appendChunk(Common.UIString('%d requests', nodeCount));
appendChunk(separator);
appendChunk(Common.UIString('%s transferred', Number.bytesToString(transferSize)));
}
@@ -709,9 +704,7 @@ Network.NetworkLogView = class extends UI.VBox {
* @param {boolean=} deferUpdate
*/
_invalidateAllItems(deferUpdate) {
- var requestIds = this._nodesByRequestId.keysArray();
- for (var i = 0; i < requestIds.length; ++i)
- this._staleRequestIds[requestIds[i]] = true;
+ this._staleRequests = new Set(NetworkLog.networkLog.requests());
if (deferUpdate)
this.scheduleRefresh();
else
@@ -832,10 +825,29 @@ Network.NetworkLogView = class extends UI.VBox {
var nodesToInsert = new Map();
/** @type {!Array<!Network.NetworkNode>} */
var nodesToRefresh = [];
- for (var requestId in this._staleRequestIds) {
- var node = this._nodesByRequestId.get(requestId);
+
+ /** @type {!Set<!Network.NetworkRequestNode>} */
+ var staleNodes = new Set();
+
+ for (var node of this._nodesToRemove) {
+ if (node.parent)
+ node.parent.removeChild(node);
+ }
+
+ this._nodesToRemove.clear();
+
+ // While creating nodes it may add more entries into _staleRequests because redirect request nodes update the parent
+ // node so we loop until we have no more stale requests.
+ while (this._staleRequests.size) {
+ var request = this._staleRequests.firstValue();
+ this._staleRequests.delete(request);
+ var node = request[Network.NetworkLogView._networkNodeSymbol];
if (!node)
- continue;
+ node = this._createNodeForRequest(request);
+ staleNodes.add(node);
+ }
+
+ for (var node of staleNodes) {
var isFilteredOut = !this._applyFilter(node);
if (isFilteredOut && node === this._hoveredNode)
this._setHoveredNode(null);
@@ -884,13 +896,16 @@ Network.NetworkLogView = class extends UI.VBox {
this._highlightNthMatchedRequestForSearch(
this._updateMatchCountAndFindMatchIndex(this._currentMatchedRequestNode), false);
- this._staleRequestIds = {};
this._updateSummaryBar();
if (nodesToInsert.size)
this._columns.sortByCurrentColumn();
this._dataGrid.updateInstantly();
+ this._didRefreshForTest();
+ }
+
+ _didRefreshForTest() {
}
/**
@@ -907,7 +922,7 @@ Network.NetworkLogView = class extends UI.VBox {
return groupNode;
}
- reset() {
+ _reset() {
this._requestWithHighlightedInitiators = null;
this.dispatchEventToListeners(Network.NetworkLogView.Events.RequestSelected, null);
@@ -923,10 +938,7 @@ Network.NetworkLogView = class extends UI.VBox {
this.linkifier.reset();
this.badgePool.reset();
- if (this._activeGroupLookup)
- this._activeGroupLookup.reset();
- this._nodesByRequestId.clear();
- this._staleRequestIds = {};
+ this._staleRequests.clear();
this._resetSuggestionBuilder();
this._mainRequestLoadTime = -1;
@@ -947,38 +959,46 @@ Network.NetworkLogView = class extends UI.VBox {
this._resourceCategoryFilterUI.reset();
}
- /**
- * @param {!Common.Event} event
- */
- _onRequestStarted(event) {
- if (!this._recording)
- return;
- var request = /** @type {!SDK.NetworkRequest} */ (event.data);
- this._appendRequest(request);
- }
-
/**
* @param {!SDK.NetworkRequest} request
*/
- _appendRequest(request) {
+ _createNodeForRequest(request) {
var node = new Network.NetworkRequestNode(this, request);
+ request[Network.NetworkLogView._networkNodeSymbol] = node;
node[Network.NetworkLogView._isFilteredOutSymbol] = true;
dgozman 2017/06/14 22:21:47 Why filtered by default?
allada 2017/06/15 00:19:48 This is what it was doing, I did not change the lo
node[Network.NetworkLogView._isMatchingSearchQuerySymbol] = false;
- // In case of redirect request id is reassigned to a redirected
- // request and we need to update _nodesByRequestId and search results.
- var originalRequestNode = this._nodesByRequestId.get(request.requestId());
- if (originalRequestNode)
- this._nodesByRequestId.set(originalRequestNode.request().requestId(), originalRequestNode);
- this._nodesByRequestId.set(request.requestId(), node);
-
- // Pull all the redirects of the main request upon commit load.
- if (request.redirects) {
- for (var i = 0; i < request.redirects.length; ++i)
- this._refreshRequest(request.redirects[i]);
+ if (request.redirects)
+ request.redirects.forEach(this._refreshRequest.bind(this));
+ return node;
+ }
+
+ /**
+ * @param {!Common.Event} event
+ */
+ _onRequestsRemoved(event) {
dgozman 2017/06/14 22:21:47 As discussed offline, let's recreate everything in
allada 2017/06/15 00:19:48 Done.
+ var requests = /** @type {!Set<!SDK.NetworkRequest>} */ (event.data);
+ var rootNode = this._dataGrid.rootNode();
+ for (var request of requests) {
+ var node = request[Network.NetworkLogView._networkNodeSymbol];
+ while (node && node.parent) {
+ var parent = node.parent;
+ this._nodesToRemove.add(node);
+ if (parent === rootNode || !parent.children.every(child => this._nodesToRemove.has(child)))
dgozman 2017/06/14 22:21:47 I think this is still O(n^2).
allada 2017/06/15 00:19:48 Acknowledged.
+ break;
+ node = parent;
+ }
+ this._staleRequests.delete(request);
+ delete request[Network.NetworkLogView._networkNodeSymbol];
}
- this._refreshRequest(request);
+ // TODO(allada) We need to unify these calculators with NetworkOverview.
+ this._calculator.reset();
+ this._durationCalculator.reset();
+ for (var request of NetworkLog.networkLog.requests()) {
+ this._timeCalculator.updateBoundaries(request);
+ this._durationCalculator.updateBoundaries(request);
+ }
}
/**
@@ -993,9 +1013,6 @@ Network.NetworkLogView = class extends UI.VBox {
* @param {!SDK.NetworkRequest} request
*/
_refreshRequest(request) {
- if (!this._nodesByRequestId.get(request.requestId()))
- return;
-
Network.NetworkLogView._subdomains(request.domain)
.forEach(
this._suggestionBuilder.addItem.bind(this._suggestionBuilder, Network.NetworkLogView.FilterType.Domain));
@@ -1037,46 +1054,10 @@ Network.NetworkLogView = class extends UI.VBox {
this._suggestionBuilder.addItem(Network.NetworkLogView.FilterType.SetCookieValue, cookie.value());
}
- this._staleRequestIds[request.requestId()] = true;
- this.dispatchEventToListeners(Network.NetworkLogView.Events.UpdateRequest, request);
+ this._staleRequests.add(request);
this.scheduleRefresh();
}
- /**
- * @param {!Common.Event} event
- */
- _mainFrameNavigated(event) {
- if (!this._recording)
- return;
-
- var frame = /** @type {!SDK.ResourceTreeFrame} */ (event.data);
- var loaderId = frame.loaderId;
-
- // Pick provisional load requests.
- var requestsToPick = [];
- var networkManager = frame.resourceTreeModel().target().model(SDK.NetworkManager);
- var requests = networkManager ? NetworkLog.networkLog.requestsForManager(networkManager) : [];
- for (var i = 0; i < requests.length; ++i) {
- var request = requests[i];
- if (request.loaderId === loaderId)
- requestsToPick.push(request);
- }
-
- if (!Common.moduleSetting('network.preserve-log').get()) {
- this.reset();
- for (var i = 0; i < requestsToPick.length; ++i)
- this._appendRequest(requestsToPick[i]);
- }
- for (var i = 0; i < requestsToPick.length; ++i) {
- var request = requestsToPick[i];
- var node = this._nodesByRequestId.get(request.requestId());
- if (node) {
- node.markAsNavigationRequest();
- break;
- }
- }
- }
-
/**
* @return {number}
*/
@@ -1185,10 +1166,7 @@ Network.NetworkLogView = class extends UI.VBox {
}
_harRequests() {
- var requests = this._nodesByRequestId.valuesArray().map(function(node) {
- return node.request();
- });
- var httpRequests = requests.filter(Network.NetworkLogView.HTTPRequestsFilter);
+ var httpRequests = NetworkLog.networkLog.requests().filter(Network.NetworkLogView.HTTPRequestsFilter);
return httpRequests.filter(Network.NetworkLogView.FinishedRequestsFilter);
}
@@ -1238,7 +1216,7 @@ Network.NetworkLogView = class extends UI.VBox {
* @param {string} platform
*/
_copyAllCurlCommand(platform) {
- var requests = this._nodesByRequestId.valuesArray().map(node => node.request());
+ var requests = NetworkLog.networkLog.requests();
var commands = [];
for (var request of requests)
commands.push(this._generateCurlCommand(request, platform));
@@ -1606,7 +1584,7 @@ Network.NetworkLogView = class extends UI.VBox {
revealAndHighlightRequest(request) {
this.removeAllNodeHighlights();
- var node = this._nodesByRequestId.get(request.requestId());
+ var node = request[Network.NetworkLogView._networkNodeSymbol];
if (node) {
node.reveal();
this._highlightNode(node);
@@ -1757,6 +1735,7 @@ Network.NetworkLogView = class extends UI.VBox {
Network.NetworkLogView._isFilteredOutSymbol = Symbol('isFilteredOut');
Network.NetworkLogView._isMatchingSearchQuerySymbol = Symbol('isMatchingSearchQuery');
+Network.NetworkLogView._networkNodeSymbol = Symbol('NetworkNode');
Network.NetworkLogView.HTTPSchemas = {
'http': true,
@@ -1769,8 +1748,7 @@ Network.NetworkLogView.HTTPSchemas = {
Network.NetworkLogView.Events = {
RequestSelected: Symbol('RequestSelected'),
SearchCountUpdated: Symbol('SearchCountUpdated'),
- SearchIndexUpdated: Symbol('SearchIndexUpdated'),
- UpdateRequest: Symbol('UpdateRequest')
+ SearchIndexUpdated: Symbol('SearchIndexUpdated')
};
/** @enum {string} */
@@ -1821,7 +1799,5 @@ Network.GroupLookupInterface.prototype = {
* @param {!SDK.NetworkRequest} request
* @return {?Network.NetworkGroupNode}
*/
- groupNodeForRequest: function(request) {},
-
- reset: function() {}
+ groupNodeForRequest: function(request) {}
};

Powered by Google App Engine
This is Rietveld 408576698