diff --git a/devtools/shared/DevToolsUtils.js b/devtools/shared/DevToolsUtils.js index d80d87ece9f..6a625838193 100644 --- a/devtools/shared/DevToolsUtils.js +++ b/devtools/shared/DevToolsUtils.js @@ -189,10 +189,17 @@ 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); diff --git a/devtools/shared/tests/unit/head_devtools.js b/devtools/shared/tests/unit/head_devtools.js index 8a93c7174fd..5b66328eec0 100644 --- a/devtools/shared/tests/unit/head_devtools.js +++ b/devtools/shared/tests/unit/head_devtools.js @@ -7,6 +7,11 @@ 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.