| Index: third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js
|
| diff --git a/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js b/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js
|
| index f8049baaa136258be8713e6684e96bdb90e1051e..a1001b2ea7a33e11ee852e02b62ccf3df928c0f9 100644
|
| --- a/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js
|
| +++ b/third_party/WebKit/Source/devtools/front_end/network/RequestTimingView.js
|
| @@ -27,135 +27,88 @@
|
| * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| */
|
| -
|
| /**
|
| - * @constructor
|
| - * @extends {WebInspector.VBox}
|
| - * @param {!WebInspector.NetworkRequest} request
|
| - * @param {!WebInspector.NetworkTimeCalculator} calculator
|
| + * @unrestricted
|
| */
|
| -WebInspector.RequestTimingView = function(request, calculator)
|
| -{
|
| - WebInspector.VBox.call(this);
|
| - this.element.classList.add("resource-timing-view");
|
| +WebInspector.RequestTimingView = class extends WebInspector.VBox {
|
| + /**
|
| + * @param {!WebInspector.NetworkRequest} request
|
| + * @param {!WebInspector.NetworkTimeCalculator} calculator
|
| + */
|
| + constructor(request, calculator) {
|
| + super();
|
| + this.element.classList.add('resource-timing-view');
|
|
|
| this._request = request;
|
| this._calculator = calculator;
|
| -};
|
| -
|
| -WebInspector.RequestTimingView.prototype = {
|
| - wasShown: function()
|
| - {
|
| - this._request.addEventListener(WebInspector.NetworkRequest.Events.TimingChanged, this._refresh, this);
|
| - this._request.addEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refresh, this);
|
| - this._calculator.addEventListener(WebInspector.NetworkTimeCalculator.Events.BoundariesChanged, this._refresh, this);
|
| - this._refresh();
|
| - },
|
| -
|
| - willHide: function()
|
| - {
|
| - this._request.removeEventListener(WebInspector.NetworkRequest.Events.TimingChanged, this._refresh, this);
|
| - this._request.removeEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refresh, this);
|
| - this._calculator.removeEventListener(WebInspector.NetworkTimeCalculator.Events.BoundariesChanged, this._refresh, this);
|
| - },
|
| -
|
| - _refresh: function()
|
| - {
|
| - if (this._tableElement)
|
| - this._tableElement.remove();
|
| -
|
| - this._tableElement = WebInspector.RequestTimingView.createTimingTable(this._request, this._calculator.minimumBoundary());
|
| - this.element.appendChild(this._tableElement);
|
| - },
|
| -
|
| - __proto__: WebInspector.VBox.prototype
|
| -};
|
| -
|
| -/** @enum {string} */
|
| -WebInspector.RequestTimeRangeNames = {
|
| - Push: "push",
|
| - Queueing: "queueing",
|
| - Blocking: "blocking",
|
| - Connecting: "connecting",
|
| - DNS: "dns",
|
| - Proxy: "proxy",
|
| - Receiving: "receiving",
|
| - ReceivingPush: "receiving-push",
|
| - Sending: "sending",
|
| - ServiceWorker: "serviceworker",
|
| - ServiceWorkerPreparation: "serviceworker-preparation",
|
| - SSL: "ssl",
|
| - Total: "total",
|
| - Waiting: "waiting"
|
| -};
|
| + }
|
|
|
| -WebInspector.RequestTimingView.ConnectionSetupRangeNames = new Set([
|
| - WebInspector.RequestTimeRangeNames.Queueing,
|
| - WebInspector.RequestTimeRangeNames.Blocking,
|
| - WebInspector.RequestTimeRangeNames.Connecting,
|
| - WebInspector.RequestTimeRangeNames.DNS,
|
| - WebInspector.RequestTimeRangeNames.Proxy,
|
| - WebInspector.RequestTimeRangeNames.SSL
|
| -]);
|
| -
|
| -/** @typedef {{name: !WebInspector.RequestTimeRangeNames, start: number, end: number}} */
|
| -WebInspector.RequestTimeRange;
|
| -
|
| -/**
|
| - * @param {!WebInspector.RequestTimeRangeNames} name
|
| - * @return {string}
|
| - */
|
| -WebInspector.RequestTimingView._timeRangeTitle = function(name)
|
| -{
|
| + /**
|
| + * @param {!WebInspector.RequestTimeRangeNames} name
|
| + * @return {string}
|
| + */
|
| + static _timeRangeTitle(name) {
|
| switch (name) {
|
| - case WebInspector.RequestTimeRangeNames.Push: return WebInspector.UIString("Receiving Push");
|
| - case WebInspector.RequestTimeRangeNames.Queueing: return WebInspector.UIString("Queueing");
|
| - case WebInspector.RequestTimeRangeNames.Blocking: return WebInspector.UIString("Stalled");
|
| - case WebInspector.RequestTimeRangeNames.Connecting: return WebInspector.UIString("Initial connection");
|
| - case WebInspector.RequestTimeRangeNames.DNS: return WebInspector.UIString("DNS Lookup");
|
| - case WebInspector.RequestTimeRangeNames.Proxy: return WebInspector.UIString("Proxy negotiation");
|
| - case WebInspector.RequestTimeRangeNames.ReceivingPush: return WebInspector.UIString("Reading Push");
|
| - case WebInspector.RequestTimeRangeNames.Receiving: return WebInspector.UIString("Content Download");
|
| - case WebInspector.RequestTimeRangeNames.Sending: return WebInspector.UIString("Request sent");
|
| - case WebInspector.RequestTimeRangeNames.ServiceWorker: return WebInspector.UIString("Request to ServiceWorker");
|
| - case WebInspector.RequestTimeRangeNames.ServiceWorkerPreparation: return WebInspector.UIString("ServiceWorker Preparation");
|
| - case WebInspector.RequestTimeRangeNames.SSL: return WebInspector.UIString("SSL");
|
| - case WebInspector.RequestTimeRangeNames.Total: return WebInspector.UIString("Total");
|
| - case WebInspector.RequestTimeRangeNames.Waiting: return WebInspector.UIString("Waiting (TTFB)");
|
| - default: return WebInspector.UIString(name);
|
| + case WebInspector.RequestTimeRangeNames.Push:
|
| + return WebInspector.UIString('Receiving Push');
|
| + case WebInspector.RequestTimeRangeNames.Queueing:
|
| + return WebInspector.UIString('Queueing');
|
| + case WebInspector.RequestTimeRangeNames.Blocking:
|
| + return WebInspector.UIString('Stalled');
|
| + case WebInspector.RequestTimeRangeNames.Connecting:
|
| + return WebInspector.UIString('Initial connection');
|
| + case WebInspector.RequestTimeRangeNames.DNS:
|
| + return WebInspector.UIString('DNS Lookup');
|
| + case WebInspector.RequestTimeRangeNames.Proxy:
|
| + return WebInspector.UIString('Proxy negotiation');
|
| + case WebInspector.RequestTimeRangeNames.ReceivingPush:
|
| + return WebInspector.UIString('Reading Push');
|
| + case WebInspector.RequestTimeRangeNames.Receiving:
|
| + return WebInspector.UIString('Content Download');
|
| + case WebInspector.RequestTimeRangeNames.Sending:
|
| + return WebInspector.UIString('Request sent');
|
| + case WebInspector.RequestTimeRangeNames.ServiceWorker:
|
| + return WebInspector.UIString('Request to ServiceWorker');
|
| + case WebInspector.RequestTimeRangeNames.ServiceWorkerPreparation:
|
| + return WebInspector.UIString('ServiceWorker Preparation');
|
| + case WebInspector.RequestTimeRangeNames.SSL:
|
| + return WebInspector.UIString('SSL');
|
| + case WebInspector.RequestTimeRangeNames.Total:
|
| + return WebInspector.UIString('Total');
|
| + case WebInspector.RequestTimeRangeNames.Waiting:
|
| + return WebInspector.UIString('Waiting (TTFB)');
|
| + default:
|
| + return WebInspector.UIString(name);
|
| }
|
| -};
|
| -
|
| -/**
|
| - * @param {!WebInspector.NetworkRequest} request
|
| - * @param {number} navigationStart
|
| - * @return {!Array.<!WebInspector.RequestTimeRange>}
|
| - */
|
| -WebInspector.RequestTimingView.calculateRequestTimeRanges = function(request, navigationStart)
|
| -{
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.NetworkRequest} request
|
| + * @param {number} navigationStart
|
| + * @return {!Array.<!WebInspector.RequestTimeRange>}
|
| + */
|
| + static calculateRequestTimeRanges(request, navigationStart) {
|
| var result = [];
|
| /**
|
| * @param {!WebInspector.RequestTimeRangeNames} name
|
| * @param {number} start
|
| * @param {number} end
|
| */
|
| - function addRange(name, start, end)
|
| - {
|
| - if (start < Number.MAX_VALUE && start <= end)
|
| - result.push({name: name, start: start, end: end});
|
| + function addRange(name, start, end) {
|
| + if (start < Number.MAX_VALUE && start <= end)
|
| + result.push({name: name, start: start, end: end});
|
| }
|
|
|
| /**
|
| * @param {!Array.<number>} numbers
|
| * @return {number|undefined}
|
| */
|
| - function firstPositive(numbers)
|
| - {
|
| - for (var i = 0; i < numbers.length; ++i) {
|
| - if (numbers[i] > 0)
|
| - return numbers[i];
|
| - }
|
| - return undefined;
|
| + function firstPositive(numbers) {
|
| + for (var i = 0; i < numbers.length; ++i) {
|
| + if (numbers[i] > 0)
|
| + return numbers[i];
|
| + }
|
| + return undefined;
|
| }
|
|
|
| /**
|
| @@ -163,21 +116,20 @@ WebInspector.RequestTimingView.calculateRequestTimeRanges = function(request, na
|
| * @param {number} start
|
| * @param {number} end
|
| */
|
| - function addOffsetRange(name, start, end)
|
| - {
|
| - if (start >= 0 && end >= 0)
|
| - addRange(name, startTime + (start / 1000), startTime + (end / 1000));
|
| + function addOffsetRange(name, start, end) {
|
| + if (start >= 0 && end >= 0)
|
| + addRange(name, startTime + (start / 1000), startTime + (end / 1000));
|
| }
|
|
|
| var timing = request.timing;
|
| if (!timing) {
|
| - var start = request.issueTime() !== -1 ? request.issueTime() : request.startTime !== -1 ? request.startTime : 0;
|
| - var middle = (request.responseReceivedTime === -1) ? Number.MAX_VALUE : request.responseReceivedTime;
|
| - var end = (request.endTime === -1) ? Number.MAX_VALUE : request.endTime;
|
| - addRange(WebInspector.RequestTimeRangeNames.Total, start, end);
|
| - addRange(WebInspector.RequestTimeRangeNames.Blocking, start, middle);
|
| - addRange(WebInspector.RequestTimeRangeNames.Receiving, middle, end);
|
| - return result;
|
| + var start = request.issueTime() !== -1 ? request.issueTime() : request.startTime !== -1 ? request.startTime : 0;
|
| + var middle = (request.responseReceivedTime === -1) ? Number.MAX_VALUE : request.responseReceivedTime;
|
| + var end = (request.endTime === -1) ? Number.MAX_VALUE : request.endTime;
|
| + addRange(WebInspector.RequestTimeRangeNames.Total, start, end);
|
| + addRange(WebInspector.RequestTimeRangeNames.Blocking, start, middle);
|
| + addRange(WebInspector.RequestTimeRangeNames.Receiving, middle, end);
|
| + return result;
|
| }
|
|
|
| var issueTime = request.issueTime();
|
| @@ -186,49 +138,52 @@ WebInspector.RequestTimingView.calculateRequestTimeRanges = function(request, na
|
|
|
| addRange(WebInspector.RequestTimeRangeNames.Total, issueTime < startTime ? issueTime : startTime, endTime);
|
| if (timing.pushStart) {
|
| - var pushEnd = timing.pushEnd || endTime;
|
| - // Only show the part of push that happened after the navigation/reload.
|
| - // Pushes that happened on the same connection before we started main request will not be shown.
|
| - if (pushEnd > navigationStart)
|
| - addRange(WebInspector.RequestTimeRangeNames.Push, Math.max(timing.pushStart, navigationStart), pushEnd);
|
| + var pushEnd = timing.pushEnd || endTime;
|
| + // Only show the part of push that happened after the navigation/reload.
|
| + // Pushes that happened on the same connection before we started main request will not be shown.
|
| + if (pushEnd > navigationStart)
|
| + addRange(WebInspector.RequestTimeRangeNames.Push, Math.max(timing.pushStart, navigationStart), pushEnd);
|
| }
|
| if (issueTime < startTime)
|
| - addRange(WebInspector.RequestTimeRangeNames.Queueing, issueTime, startTime);
|
| + addRange(WebInspector.RequestTimeRangeNames.Queueing, issueTime, startTime);
|
|
|
| if (request.fetchedViaServiceWorker) {
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.Blocking, 0, timing.workerStart);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.ServiceWorkerPreparation, timing.workerStart, timing.workerReady);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.ServiceWorker, timing.workerReady, timing.sendEnd);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.Waiting, timing.sendEnd, timing.receiveHeadersEnd);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.Blocking, 0, timing.workerStart);
|
| + addOffsetRange(
|
| + WebInspector.RequestTimeRangeNames.ServiceWorkerPreparation, timing.workerStart, timing.workerReady);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.ServiceWorker, timing.workerReady, timing.sendEnd);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.Waiting, timing.sendEnd, timing.receiveHeadersEnd);
|
| } else if (!timing.pushStart) {
|
| - var blocking = firstPositive([timing.dnsStart, timing.connectStart, timing.sendStart]) || 0;
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.Blocking, 0, blocking);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.Proxy, timing.proxyStart, timing.proxyEnd);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.DNS, timing.dnsStart, timing.dnsEnd);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.Connecting, timing.connectStart, timing.connectEnd);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.SSL, timing.sslStart, timing.sslEnd);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.Sending, timing.sendStart, timing.sendEnd);
|
| - addOffsetRange(WebInspector.RequestTimeRangeNames.Waiting, timing.sendEnd, timing.receiveHeadersEnd);
|
| + var blocking = firstPositive([timing.dnsStart, timing.connectStart, timing.sendStart]) || 0;
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.Blocking, 0, blocking);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.Proxy, timing.proxyStart, timing.proxyEnd);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.DNS, timing.dnsStart, timing.dnsEnd);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.Connecting, timing.connectStart, timing.connectEnd);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.SSL, timing.sslStart, timing.sslEnd);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.Sending, timing.sendStart, timing.sendEnd);
|
| + addOffsetRange(WebInspector.RequestTimeRangeNames.Waiting, timing.sendEnd, timing.receiveHeadersEnd);
|
| }
|
|
|
| if (request.endTime !== -1)
|
| - addRange(timing.pushStart ? WebInspector.RequestTimeRangeNames.ReceivingPush : WebInspector.RequestTimeRangeNames.Receiving, request.responseReceivedTime, endTime);
|
| + addRange(
|
| + timing.pushStart ? WebInspector.RequestTimeRangeNames.ReceivingPush :
|
| + WebInspector.RequestTimeRangeNames.Receiving,
|
| + request.responseReceivedTime, endTime);
|
|
|
| return result;
|
| -};
|
| -
|
| -/**
|
| - * @param {!WebInspector.NetworkRequest} request
|
| - * @param {number} navigationStart
|
| - * @return {!Element}
|
| - */
|
| -WebInspector.RequestTimingView.createTimingTable = function(request, navigationStart)
|
| -{
|
| - var tableElement = createElementWithClass("table", "network-timing-table");
|
| - var colgroup = tableElement.createChild("colgroup");
|
| - colgroup.createChild("col", "labels");
|
| - colgroup.createChild("col", "bars");
|
| - colgroup.createChild("col", "duration");
|
| + }
|
| +
|
| + /**
|
| + * @param {!WebInspector.NetworkRequest} request
|
| + * @param {number} navigationStart
|
| + * @return {!Element}
|
| + */
|
| + static createTimingTable(request, navigationStart) {
|
| + var tableElement = createElementWithClass('table', 'network-timing-table');
|
| + var colgroup = tableElement.createChild('colgroup');
|
| + colgroup.createChild('col', 'labels');
|
| + colgroup.createChild('col', 'bars');
|
| + colgroup.createChild('col', 'duration');
|
|
|
| var timeRanges = WebInspector.RequestTimingView.calculateRequestTimeRanges(request, navigationStart);
|
| var startTime = timeRanges.map(r => r.start).reduce((a, b) => Math.min(a, b));
|
| @@ -240,110 +195,167 @@ WebInspector.RequestTimingView.createTimingTable = function(request, navigationS
|
| var totalDuration = 0;
|
|
|
| for (var i = 0; i < timeRanges.length; ++i) {
|
| - var range = timeRanges[i];
|
| - var rangeName = range.name;
|
| - if (rangeName === WebInspector.RequestTimeRangeNames.Total) {
|
| - totalDuration = range.end - range.start;
|
| - continue;
|
| - }
|
| - if (rangeName === WebInspector.RequestTimeRangeNames.Push) {
|
| - createHeader(WebInspector.UIString("Server Push"));
|
| - } else if (WebInspector.RequestTimingView.ConnectionSetupRangeNames.has(rangeName)) {
|
| - if (!connectionHeader)
|
| - connectionHeader = createHeader(WebInspector.UIString("Connection Setup"));
|
| - } else {
|
| - if (!dataHeader)
|
| - dataHeader = createHeader(WebInspector.UIString("Request/Response"));
|
| - }
|
| -
|
| - var left = (scale * (range.start - startTime));
|
| - var right = (scale * (endTime - range.end));
|
| - var duration = range.end - range.start;
|
| -
|
| - var tr = tableElement.createChild("tr");
|
| - tr.createChild("td").createTextChild(WebInspector.RequestTimingView._timeRangeTitle(rangeName));
|
| -
|
| - var row = tr.createChild("td").createChild("div", "network-timing-row");
|
| - var bar = row.createChild("span", "network-timing-bar " + rangeName);
|
| - bar.style.left = left + "%";
|
| - bar.style.right = right + "%";
|
| - bar.textContent = "\u200B"; // Important for 0-time items to have 0 width.
|
| - var label = tr.createChild("td").createChild("div", "network-timing-bar-title");
|
| - label.textContent = Number.secondsToString(duration, true);
|
| + var range = timeRanges[i];
|
| + var rangeName = range.name;
|
| + if (rangeName === WebInspector.RequestTimeRangeNames.Total) {
|
| + totalDuration = range.end - range.start;
|
| + continue;
|
| + }
|
| + if (rangeName === WebInspector.RequestTimeRangeNames.Push) {
|
| + createHeader(WebInspector.UIString('Server Push'));
|
| + } else if (WebInspector.RequestTimingView.ConnectionSetupRangeNames.has(rangeName)) {
|
| + if (!connectionHeader)
|
| + connectionHeader = createHeader(WebInspector.UIString('Connection Setup'));
|
| + } else {
|
| + if (!dataHeader)
|
| + dataHeader = createHeader(WebInspector.UIString('Request/Response'));
|
| + }
|
| +
|
| + var left = (scale * (range.start - startTime));
|
| + var right = (scale * (endTime - range.end));
|
| + var duration = range.end - range.start;
|
| +
|
| + var tr = tableElement.createChild('tr');
|
| + tr.createChild('td').createTextChild(WebInspector.RequestTimingView._timeRangeTitle(rangeName));
|
| +
|
| + var row = tr.createChild('td').createChild('div', 'network-timing-row');
|
| + var bar = row.createChild('span', 'network-timing-bar ' + rangeName);
|
| + bar.style.left = left + '%';
|
| + bar.style.right = right + '%';
|
| + bar.textContent = '\u200B'; // Important for 0-time items to have 0 width.
|
| + var label = tr.createChild('td').createChild('div', 'network-timing-bar-title');
|
| + label.textContent = Number.secondsToString(duration, true);
|
| }
|
|
|
| if (!request.finished) {
|
| - var cell = tableElement.createChild("tr").createChild("td", "caution");
|
| - cell.colSpan = 3;
|
| - cell.createTextChild(WebInspector.UIString("CAUTION: request is not finished yet!"));
|
| + var cell = tableElement.createChild('tr').createChild('td', 'caution');
|
| + cell.colSpan = 3;
|
| + cell.createTextChild(WebInspector.UIString('CAUTION: request is not finished yet!'));
|
| }
|
|
|
| - var footer = tableElement.createChild("tr", "network-timing-footer");
|
| - var note = footer.createChild("td");
|
| + var footer = tableElement.createChild('tr', 'network-timing-footer');
|
| + var note = footer.createChild('td');
|
| note.colSpan = 2;
|
| - note.appendChild(WebInspector.linkifyDocumentationURLAsNode("profile/network-performance/resource-loading#view-network-timing-details-for-a-specific-resource", WebInspector.UIString("Explanation")));
|
| - footer.createChild("td").createTextChild(Number.secondsToString(totalDuration, true));
|
| + note.appendChild(WebInspector.linkifyDocumentationURLAsNode(
|
| + 'profile/network-performance/resource-loading#view-network-timing-details-for-a-specific-resource',
|
| + WebInspector.UIString('Explanation')));
|
| + footer.createChild('td').createTextChild(Number.secondsToString(totalDuration, true));
|
|
|
| var serverTimings = request.serverTimings;
|
| if (!serverTimings)
|
| - return tableElement;
|
| + return tableElement;
|
|
|
| var lastTimingRightEdge = right === undefined ? 100 : right;
|
|
|
| - var breakElement = tableElement.createChild("tr", "network-timing-table-header").createChild("td");
|
| + var breakElement = tableElement.createChild('tr', 'network-timing-table-header').createChild('td');
|
| breakElement.colSpan = 3;
|
| - breakElement.createChild("hr", "break");
|
| + breakElement.createChild('hr', 'break');
|
|
|
| - var serverHeader = tableElement.createChild("tr", "network-timing-table-header");
|
| - serverHeader.createChild("td").createTextChild(WebInspector.UIString("Server Timing"));
|
| - serverHeader.createChild("td");
|
| - serverHeader.createChild("td").createTextChild(WebInspector.UIString("TIME"));
|
| + var serverHeader = tableElement.createChild('tr', 'network-timing-table-header');
|
| + serverHeader.createChild('td').createTextChild(WebInspector.UIString('Server Timing'));
|
| + serverHeader.createChild('td');
|
| + serverHeader.createChild('td').createTextChild(WebInspector.UIString('TIME'));
|
|
|
| - serverTimings.filter(item => item.metric.toLowerCase() !== "total").forEach(item => addTiming(item, lastTimingRightEdge));
|
| - serverTimings.filter(item => item.metric.toLowerCase() === "total").forEach(item => addTiming(item, lastTimingRightEdge));
|
| + serverTimings.filter(item => item.metric.toLowerCase() !== 'total')
|
| + .forEach(item => addTiming(item, lastTimingRightEdge));
|
| + serverTimings.filter(item => item.metric.toLowerCase() === 'total')
|
| + .forEach(item => addTiming(item, lastTimingRightEdge));
|
|
|
| return tableElement;
|
|
|
| -
|
| /**
|
| * @param {!WebInspector.ServerTiming} serverTiming
|
| * @param {number} right
|
| */
|
| - function addTiming(serverTiming, right)
|
| - {
|
| - var colorGenerator = new WebInspector.FlameChart.ColorGenerator(
|
| - { min: 0, max: 360, count:36 },
|
| - { min: 50, max: 80 },
|
| - 80
|
| - );
|
| - var isTotal = serverTiming.metric.toLowerCase() === "total";
|
| - var tr = tableElement.createChild("tr", isTotal ? "network-timing-footer" : "");
|
| - var metric = tr.createChild("td", "network-timing-metric");
|
| - metric.createTextChild(serverTiming.description || serverTiming.metric);
|
| - var row = tr.createChild("td").createChild("div", "network-timing-row");
|
| - var left = scale * (endTime - startTime - serverTiming.value);
|
| - if (serverTiming.value && left >= 0) { // don't chart values too big or too small
|
| - var bar = row.createChild("span", "network-timing-bar server-timing");
|
| - bar.style.left = left + "%";
|
| - bar.style.right = right + "%";
|
| - bar.textContent = "\u200B"; // Important for 0-time items to have 0 width.
|
| - if (!isTotal)
|
| - bar.style.backgroundColor = colorGenerator.colorForID(serverTiming.metric);
|
| - }
|
| - var label = tr.createChild("td").createChild("div", "network-timing-bar-title");
|
| - if (typeof serverTiming.value === "number") // a metric timing value is optional
|
| - label.textContent = Number.secondsToString(serverTiming.value, true);
|
| + function addTiming(serverTiming, right) {
|
| + var colorGenerator =
|
| + new WebInspector.FlameChart.ColorGenerator({min: 0, max: 360, count: 36}, {min: 50, max: 80}, 80);
|
| + var isTotal = serverTiming.metric.toLowerCase() === 'total';
|
| + var tr = tableElement.createChild('tr', isTotal ? 'network-timing-footer' : '');
|
| + var metric = tr.createChild('td', 'network-timing-metric');
|
| + metric.createTextChild(serverTiming.description || serverTiming.metric);
|
| + var row = tr.createChild('td').createChild('div', 'network-timing-row');
|
| + var left = scale * (endTime - startTime - serverTiming.value);
|
| + if (serverTiming.value && left >= 0) { // don't chart values too big or too small
|
| + var bar = row.createChild('span', 'network-timing-bar server-timing');
|
| + bar.style.left = left + '%';
|
| + bar.style.right = right + '%';
|
| + bar.textContent = '\u200B'; // Important for 0-time items to have 0 width.
|
| + if (!isTotal)
|
| + bar.style.backgroundColor = colorGenerator.colorForID(serverTiming.metric);
|
| + }
|
| + var label = tr.createChild('td').createChild('div', 'network-timing-bar-title');
|
| + if (typeof serverTiming.value === 'number') // a metric timing value is optional
|
| + label.textContent = Number.secondsToString(serverTiming.value, true);
|
| }
|
|
|
| /**
|
| * param {string} title
|
| */
|
| - function createHeader(title)
|
| - {
|
| - var dataHeader = tableElement.createChild("tr", "network-timing-table-header");
|
| - dataHeader.createChild("td").createTextChild(title);
|
| - dataHeader.createChild("td").createTextChild("");
|
| - dataHeader.createChild("td").createTextChild(WebInspector.UIString("TIME"));
|
| - return dataHeader;
|
| + function createHeader(title) {
|
| + var dataHeader = tableElement.createChild('tr', 'network-timing-table-header');
|
| + dataHeader.createChild('td').createTextChild(title);
|
| + dataHeader.createChild('td').createTextChild('');
|
| + dataHeader.createChild('td').createTextChild(WebInspector.UIString('TIME'));
|
| + return dataHeader;
|
| }
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + wasShown() {
|
| + this._request.addEventListener(WebInspector.NetworkRequest.Events.TimingChanged, this._refresh, this);
|
| + this._request.addEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refresh, this);
|
| + this._calculator.addEventListener(WebInspector.NetworkTimeCalculator.Events.BoundariesChanged, this._refresh, this);
|
| + this._refresh();
|
| + }
|
| +
|
| + /**
|
| + * @override
|
| + */
|
| + willHide() {
|
| + this._request.removeEventListener(WebInspector.NetworkRequest.Events.TimingChanged, this._refresh, this);
|
| + this._request.removeEventListener(WebInspector.NetworkRequest.Events.FinishedLoading, this._refresh, this);
|
| + this._calculator.removeEventListener(
|
| + WebInspector.NetworkTimeCalculator.Events.BoundariesChanged, this._refresh, this);
|
| + }
|
| +
|
| + _refresh() {
|
| + if (this._tableElement)
|
| + this._tableElement.remove();
|
| +
|
| + this._tableElement =
|
| + WebInspector.RequestTimingView.createTimingTable(this._request, this._calculator.minimumBoundary());
|
| + this.element.appendChild(this._tableElement);
|
| + }
|
| +};
|
| +
|
| +/** @enum {string} */
|
| +WebInspector.RequestTimeRangeNames = {
|
| + Push: 'push',
|
| + Queueing: 'queueing',
|
| + Blocking: 'blocking',
|
| + Connecting: 'connecting',
|
| + DNS: 'dns',
|
| + Proxy: 'proxy',
|
| + Receiving: 'receiving',
|
| + ReceivingPush: 'receiving-push',
|
| + Sending: 'sending',
|
| + ServiceWorker: 'serviceworker',
|
| + ServiceWorkerPreparation: 'serviceworker-preparation',
|
| + SSL: 'ssl',
|
| + Total: 'total',
|
| + Waiting: 'waiting'
|
| };
|
| +
|
| +WebInspector.RequestTimingView.ConnectionSetupRangeNames = new Set([
|
| + WebInspector.RequestTimeRangeNames.Queueing, WebInspector.RequestTimeRangeNames.Blocking,
|
| + WebInspector.RequestTimeRangeNames.Connecting, WebInspector.RequestTimeRangeNames.DNS,
|
| + WebInspector.RequestTimeRangeNames.Proxy, WebInspector.RequestTimeRangeNames.SSL
|
| +]);
|
| +
|
| +/** @typedef {{name: !WebInspector.RequestTimeRangeNames, start: number, end: number}} */
|
| +WebInspector.RequestTimeRange;
|
| +
|
| +
|
|
|