1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /* 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/. */
- // This module exports methods to record telemetry data for memory tool usage.
- //
- // NB: Ensure that *every* exported function is wrapped in `makeInfallible` so
- // that our probes don't accidentally break code that actually does productive
- // work for the user!
- const { telemetry } = require("Services");
- const { makeInfallible, immutableUpdate } = require("devtools/shared/DevToolsUtils");
- const { labelDisplays, treeMapDisplays, censusDisplays } = require("./constants");
- exports.countTakeSnapshot = makeInfallible(function () {
- const histogram = telemetry.getHistogramById("DEVTOOLS_MEMORY_TAKE_SNAPSHOT_COUNT");
- histogram.add(1);
- }, "devtools/client/memory/telemetry#countTakeSnapshot");
- exports.countImportSnapshot = makeInfallible(function () {
- const histogram = telemetry.getHistogramById("DEVTOOLS_MEMORY_IMPORT_SNAPSHOT_COUNT");
- histogram.add(1);
- }, "devtools/client/memory/telemetry#countImportSnapshot");
- exports.countExportSnapshot = makeInfallible(function () {
- const histogram = telemetry.getHistogramById("DEVTOOLS_MEMORY_EXPORT_SNAPSHOT_COUNT");
- histogram.add(1);
- }, "devtools/client/memory/telemetry#countExportSnapshot");
- const COARSE_TYPE = "Coarse Type";
- const ALLOCATION_STACK = "Allocation Stack";
- const INVERTED_ALLOCATION_STACK = "Inverted Allocation Stack";
- const CUSTOM = "Custom";
- /**
- * @param {String|null} filter
- * The filter string used, if any.
- *
- * @param {Boolean} diffing
- * True if the census was a diffing census, false otherwise.
- *
- * @param {censusDisplayModel} display
- * The display used with the census.
- */
- exports.countCensus = makeInfallible(function ({ filter, diffing, display }) {
- let histogram = telemetry.getHistogramById("DEVTOOLS_MEMORY_INVERTED_CENSUS");
- histogram.add(!!display.inverted);
- histogram = telemetry.getHistogramById("DEVTOOLS_MEMORY_FILTER_CENSUS");
- histogram.add(!!filter);
- histogram = telemetry.getHistogramById("DEVTOOLS_MEMORY_DIFF_CENSUS");
- histogram.add(!!diffing);
- histogram = telemetry.getKeyedHistogramById("DEVTOOLS_MEMORY_BREAKDOWN_CENSUS_COUNT");
- if (display === censusDisplays.coarseType) {
- histogram.add(COARSE_TYPE);
- } else if (display === censusDisplays.allocationStack) {
- histogram.add(ALLOCATION_STACK);
- } else if (display === censusDisplays.invertedAllocationStack) {
- histogram.add(INVERTED_ALLOCATION_STACK);
- } else {
- histogram.add(CUSTOM);
- }
- }, "devtools/client/memory/telemetry#countCensus");
- /**
- * @param {Object} opts
- * The same parameters specified for countCensus.
- */
- exports.countDiff = makeInfallible(function (opts) {
- exports.countCensus(immutableUpdate(opts, { diffing: true }));
- }, "devtools/client/memory/telemetry#countDiff");
- /**
- * @param {Object} display
- * The display used to label nodes in the dominator tree.
- */
- exports.countDominatorTree = makeInfallible(function ({ display }) {
- let histogram = telemetry.getHistogramById("DEVTOOLS_MEMORY_DOMINATOR_TREE_COUNT");
- histogram.add(1);
- histogram = telemetry.getKeyedHistogramById("DEVTOOLS_MEMORY_BREAKDOWN_DOMINATOR_TREE_COUNT");
- if (display === labelDisplays.coarseType) {
- histogram.add(COARSE_TYPE);
- } else if (display === labelDisplays.allocationStack) {
- histogram.add(ALLOCATION_STACK);
- } else {
- histogram.add(CUSTOM);
- }
- }, "devtools/client/memory/telemetry#countDominatorTree");
|