summaryrefslogtreecommitdiffstats
path: root/devtools/client/netmonitor/selectors
diff options
context:
space:
mode:
authorjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-02-28 12:17:13 +0100
committerjanekptacijarabaci <janekptacijarabaci@seznam.cz>2018-02-28 12:17:13 +0100
commit627f167bf41935cad572b04c5b412f9294293ecb (patch)
tree76abf91246d7f90c25311d0fda82208169c7d8cc /devtools/client/netmonitor/selectors
parentb19e4e2cf0c1537c8c2a56d0b783d38b6b25de7f (diff)
downloadUXP-627f167bf41935cad572b04c5b412f9294293ecb.tar
UXP-627f167bf41935cad572b04c5b412f9294293ecb.tar.gz
UXP-627f167bf41935cad572b04c5b412f9294293ecb.tar.lz
UXP-627f167bf41935cad572b04c5b412f9294293ecb.tar.xz
UXP-627f167bf41935cad572b04c5b412f9294293ecb.zip
Bug 1309194: Implement summary info in Net Panel Toolbar; Bug 1317205: CSS improvement for summary button
Required for: https://github.com/MoonchildProductions/moebius/pull/93
Diffstat (limited to 'devtools/client/netmonitor/selectors')
-rw-r--r--devtools/client/netmonitor/selectors/index.js57
1 files changed, 56 insertions, 1 deletions
diff --git a/devtools/client/netmonitor/selectors/index.js b/devtools/client/netmonitor/selectors/index.js
index f473149b5..8cd6b6ffc 100644
--- a/devtools/client/netmonitor/selectors/index.js
+++ b/devtools/client/netmonitor/selectors/index.js
@@ -1,8 +1,63 @@
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
"use strict";
+const { createSelector } = require("devtools/client/shared/vendor/reselect");
+
+/**
+ * Gets the total number of bytes representing the cumulated content size of
+ * a set of requests. Returns 0 for an empty set.
+ *
+ * @param {array} items - an array of request items
+ * @return {number} total bytes of requests
+ */
+function getTotalBytesOfRequests(items) {
+ if (!items.length) {
+ return 0;
+ }
+
+ let result = 0;
+ items.forEach((item) => {
+ let size = item.attachment.contentSize;
+ result += (typeof size == "number") ? size : 0;
+ });
+
+ return result;
+}
+
+/**
+ * Gets the total milliseconds for all requests. Returns null for an
+ * empty set.
+ *
+ * @param {array} items - an array of request items
+ * @return {object} total milliseconds for all requests
+ */
+function getTotalMillisOfRequests(items) {
+ if (!items.length) {
+ return null;
+ }
+
+ const oldest = items.reduce((prev, curr) =>
+ prev.attachment.startedMillis < curr.attachment.startedMillis ?
+ prev : curr);
+ const newest = items.reduce((prev, curr) =>
+ prev.attachment.startedMillis > curr.attachment.startedMillis ?
+ prev : curr);
+
+ return newest.attachment.endedMillis - oldest.attachment.startedMillis;
+}
+
+const getSummary = createSelector(
+ (state) => state.requests.items,
+ (requests) => ({
+ count: requests.length,
+ totalBytes: getTotalBytesOfRequests(requests),
+ totalMillis: getTotalMillisOfRequests(requests),
+ })
+);
+
module.exports = {
- // selectors...
+ getSummary,
};