diff options
Diffstat (limited to 'devtools/client/memory/telemetry.js')
-rw-r--r-- | devtools/client/memory/telemetry.js | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/devtools/client/memory/telemetry.js b/devtools/client/memory/telemetry.js new file mode 100644 index 000000000..1e55805d3 --- /dev/null +++ b/devtools/client/memory/telemetry.js @@ -0,0 +1,91 @@ +/* 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"); |