From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- devtools/client/performance/modules/categories.js | 128 ++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 devtools/client/performance/modules/categories.js (limited to 'devtools/client/performance/modules/categories.js') diff --git a/devtools/client/performance/modules/categories.js b/devtools/client/performance/modules/categories.js new file mode 100644 index 000000000..f3f05d567 --- /dev/null +++ b/devtools/client/performance/modules/categories.js @@ -0,0 +1,128 @@ +/* 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 { L10N } = require("devtools/client/performance/modules/global"); + +/** + * Details about each profile pseudo-stack entry cateogry. + * @see CATEGORY_MAPPINGS. + */ +const CATEGORIES = [{ + color: "#5e88b0", + abbrev: "other", + label: L10N.getStr("category.other") +}, { + color: "#46afe3", + abbrev: "css", + label: L10N.getStr("category.css") +}, { + color: "#d96629", + abbrev: "js", + label: L10N.getStr("category.js") +}, { + color: "#eb5368", + abbrev: "gc", + label: L10N.getStr("category.gc") +}, { + color: "#df80ff", + abbrev: "network", + label: L10N.getStr("category.network") +}, { + color: "#70bf53", + abbrev: "graphics", + label: L10N.getStr("category.graphics") +}, { + color: "#8fa1b2", + abbrev: "storage", + label: L10N.getStr("category.storage") +}, { + color: "#d99b28", + abbrev: "events", + label: L10N.getStr("category.events") +}, { + color: "#8fa1b2", + abbrev: "tools", + label: L10N.getStr("category.tools") +}]; + +/** + * Mapping from category bitmasks in the profiler data to additional details. + * To be kept in sync with the js::ProfileEntry::Category in ProfilingStack.h + */ +const CATEGORY_MAPPINGS = { + // js::ProfileEntry::Category::OTHER + "16": CATEGORIES[0], + // js::ProfileEntry::Category::CSS + "32": CATEGORIES[1], + // js::ProfileEntry::Category::JS + "64": CATEGORIES[2], + // js::ProfileEntry::Category::GC + "128": CATEGORIES[3], + // js::ProfileEntry::Category::CC + "256": CATEGORIES[3], + // js::ProfileEntry::Category::NETWORK + "512": CATEGORIES[4], + // js::ProfileEntry::Category::GRAPHICS + "1024": CATEGORIES[5], + // js::ProfileEntry::Category::STORAGE + "2048": CATEGORIES[6], + // js::ProfileEntry::Category::EVENTS + "4096": CATEGORIES[7], + // non-bitmasks for specially-assigned categories + "9000": CATEGORIES[8], +}; + +/** + * Get the numeric bitmask (or set of masks) for the given category + * abbreviation. See `CATEGORIES` and `CATEGORY_MAPPINGS` above. + * + * CATEGORY_MASK can be called with just a name if it is expected that the + * category is mapped to by exactly one bitmask. If the category is mapped + * to by multiple masks, CATEGORY_MASK for that name must be called with + * an additional argument specifying the desired id (in ascending order). + */ +const [CATEGORY_MASK, CATEGORY_MASK_LIST] = (() => { + let bitmasksForCategory = {}; + let all = Object.keys(CATEGORY_MAPPINGS); + + for (let category of CATEGORIES) { + bitmasksForCategory[category.abbrev] = all + .filter(mask => CATEGORY_MAPPINGS[mask] == category) + .map(mask => +mask) + .sort(); + } + + return [ + function (name, index) { + if (!(name in bitmasksForCategory)) { + throw new Error(`Category abbreviation "${name}" does not exist.`); + } + if (arguments.length == 1) { + if (bitmasksForCategory[name].length != 1) { + throw new Error(`Expected exactly one category number for "${name}".`); + } else { + return bitmasksForCategory[name][0]; + } + } else { + if (index > bitmasksForCategory[name].length) { + throw new Error(`Index "${index}" too high for category "${name}".`); + } + return bitmasksForCategory[name][index - 1]; + } + }, + + function (name) { + if (!(name in bitmasksForCategory)) { + throw new Error(`Category abbreviation "${name}" does not exist.`); + } + return bitmasksForCategory[name]; + } + ]; +})(); + +exports.CATEGORIES = CATEGORIES; +exports.CATEGORY_MAPPINGS = CATEGORY_MAPPINGS; +exports.CATEGORY_MASK = CATEGORY_MASK; +exports.CATEGORY_MASK_LIST = CATEGORY_MASK_LIST; -- cgit v1.2.3