Bug 1234600 - executeSoon async stacks only when DEBUG_JS_MODULES enabled. r=fitzgen
--- a/devtools/shared/DevToolsUtils.js
+++ b/devtools/shared/DevToolsUtils.js
@@ -184,20 +184,27 @@ exports.compose = function compose(...fu
/**
* Waits for the next tick in the event loop to execute a callback.
*/
exports.executeSoon = function executeSoon(aFn) {
if (isWorker) {
setImmediate(aFn);
} else {
- let stack = components.stack;
- let executor = () => {
- Cu.callFunctionWithAsyncStack(aFn, stack, "DevToolsUtils.executeSoon");
- };
+ let executor;
+ // Only enable async stack reporting when DEBUG_JS_MODULES is set
+ // (customized local builds) to avoid a performance penalty.
+ if (AppConstants.DEBUG_JS_MODULES || exports.testing) {
+ let stack = components.stack;
+ executor = () => {
+ Cu.callFunctionWithAsyncStack(aFn, stack, "DevToolsUtils.executeSoon");
+ };
+ } else {
+ executor = aFn;
+ }
Services.tm.mainThread.dispatch({
run: exports.makeInfallible(executor)
}, Ci.nsIThread.DISPATCH_NORMAL);
}
};
/**
* Waits for the next tick in the event loop.
--- a/devtools/shared/tests/unit/head_devtools.js
+++ b/devtools/shared/tests/unit/head_devtools.js
@@ -2,16 +2,21 @@
var Cc = Components.classes;
var Ci = Components.interfaces;
var Cu = Components.utils;
var Cr = Components.results;
var {require} = Cu.import("resource://devtools/shared/Loader.jsm");
const DevToolsUtils = require("devtools/shared/DevToolsUtils");
+DevToolsUtils.testing = true;
+do_register_cleanup(() => {
+ DevToolsUtils.testing = false;
+});
+
// Register a console listener, so console messages don't just disappear
// into the ether.
// If for whatever reason the test needs to post console errors that aren't
// failures, set this to true.
var ALLOW_CONSOLE_ERRORS = false;
var errorCount = 0;