summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/components/throttling/profiles.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/components/throttling/profiles.js')
-rw-r--r--devtools/client/shared/components/throttling/profiles.js122
1 files changed, 122 insertions, 0 deletions
diff --git a/devtools/client/shared/components/throttling/profiles.js b/devtools/client/shared/components/throttling/profiles.js
new file mode 100644
index 0000000000..cd61f70772
--- /dev/null
+++ b/devtools/client/shared/components/throttling/profiles.js
@@ -0,0 +1,122 @@
+/* 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 K = 1024;
+const M = 1024 * 1024;
+const Bps = 1 / 8;
+const KBps = K * Bps;
+const MBps = M * Bps;
+
+const { LocalizationHelper } = require("resource://devtools/shared/l10n.js");
+const L10N = new LocalizationHelper(
+ "devtools/client/locales/network-throttling.properties"
+);
+
+/**
+ * Predefined network throttling profiles.
+ * Speeds are in bytes per second. Latency is in ms.
+ */
+
+class ThrottlingProfile {
+ constructor({ id, download, upload, latency }) {
+ this.id = id;
+ this.download = download;
+ this.upload = upload;
+ this.latency = latency;
+ }
+
+ get description() {
+ const download = this.#toDescriptionData(this.download);
+ const upload = this.#toDescriptionData(this.upload);
+ return L10N.getFormatStr(
+ "throttling.profile.description",
+ download.value,
+ download.unit,
+ upload.value,
+ upload.unit,
+ this.latency
+ );
+ }
+
+ #toDescriptionData(val) {
+ if (val % MBps === 0) {
+ return { value: val / MBps, unit: "Mbps" };
+ }
+ return { value: val / KBps, unit: "Kbps" };
+ }
+}
+
+const PROFILE_CONSTANTS = {
+ GPRS: "GPRS",
+ REGULAR_2G: "Regular 2G",
+ GOOD_2G: "Good 2G",
+ REGULAR_3G: "Regular 3G",
+ GOOD_3G: "Good 3G",
+ REGULAR_4G_LTE: "Regular 4G / LTE",
+ DSL: "DSL",
+ WIFI: "Wi-Fi",
+ OFFLINE: "Offline",
+};
+
+// Should be synced with devtools/docs/user/network_monitor/throttling/index.rst
+const profiles = [
+ {
+ id: PROFILE_CONSTANTS.GPRS,
+ download: 50 * KBps,
+ upload: 20 * KBps,
+ latency: 500,
+ },
+ {
+ id: PROFILE_CONSTANTS.REGULAR_2G,
+ download: 250 * KBps,
+ upload: 50 * KBps,
+ latency: 300,
+ },
+ {
+ id: PROFILE_CONSTANTS.GOOD_2G,
+ download: 450 * KBps,
+ upload: 150 * KBps,
+ latency: 150,
+ },
+ {
+ id: PROFILE_CONSTANTS.REGULAR_3G,
+ download: 750 * KBps,
+ upload: 250 * KBps,
+ latency: 100,
+ },
+ {
+ id: PROFILE_CONSTANTS.GOOD_3G,
+ download: 1.5 * MBps,
+ upload: 750 * KBps,
+ latency: 40,
+ },
+ {
+ id: PROFILE_CONSTANTS.REGULAR_4G_LTE,
+ download: 4 * MBps,
+ upload: 3 * MBps,
+ latency: 20,
+ },
+ {
+ id: PROFILE_CONSTANTS.DSL,
+ download: 2 * MBps,
+ upload: 1 * MBps,
+ latency: 5,
+ },
+ {
+ id: PROFILE_CONSTANTS.WIFI,
+ download: 30 * MBps,
+ upload: 15 * MBps,
+ latency: 2,
+ },
+ {
+ id: PROFILE_CONSTANTS.OFFLINE,
+ download: 0,
+ upload: 0,
+ latency: 5,
+ },
+].map(profile => new ThrottlingProfile(profile));
+
+module.exports = { profiles, PROFILE_CONSTANTS };