fune/toolkit/components/telemetry/app/TelemetryController.jsm
Kris Maglione 977f86fb80 Bug 1645862: Part 1 - Split TelemetryController into parent and content modules. r=chutten
Most of TelemetryController is only used in the parent process, but is
currently loaded in all processes, where it needlessly consumes tens of KB of
memory. This patch splits the parent- and content-specific parts, and only
loads each in the processes where they're needed.

Differential Revision: https://phabricator.services.mozilla.com/D79870
2020-06-24 17:33:49 +00:00

45 lines
1.6 KiB
JavaScript

/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */
/* 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";
/**
* This module chooses the correct telemetry controller module to load
* based on the process:
*
* - TelemetryControllerParent is loaded only in the parent process, and
* contains code specific to the parent.
* - TelemetryControllerContent is loaded only in content processes, and
* contains code specific to them.
*
* Both the parent and the content modules load TelemetryControllerBase,
* which contains code which is common to all processes.
*
* This division is important for content process memory usage and
* startup time. The parent-specific code occupies tens of KB of memory
* which, multiplied by the number of content processes we have, adds up
* fast.
*/
var EXPORTED_SYMBOLS = ["TelemetryController"];
// We can't use Services.appinfo here because tests stub out the appinfo
// service, and if we touch Services.appinfo now, the built-in version
// will be cached in place of the stub.
const isParentProcess =
// eslint-disable-next-line mozilla/use-services
Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).processType ===
Ci.nsIXULRuntime.PROCESS_TYPE_DEFAULT;
var TelemetryController;
if (isParentProcess) {
({ TelemetryController } = ChromeUtils.import(
"resource://gre/modules/TelemetryControllerParent.jsm"
));
} else {
({ TelemetryController } = ChromeUtils.import(
"resource://gre/modules/TelemetryControllerContent.jsm"
));
}