Bug 1234600 - executeSoon async stacks only when DEBUG_JS_MODULES enabled. r=fitzgen draft
authorJ. Ryan Stinnett <jryans@gmail.com>
Thu, 07 Jan 2016 18:37:12 -0600
changeset 319870 ed14d6fb6a5ddd3b246af850ba8993b209907e8e
parent 319368 c1959d17af7cb8048f48c71727fcea8b9fcf17ae
child 512665 4965ec6cc88b321513f7abe0154e89e052482800
push id9109
push userjryans@gmail.com
push dateFri, 08 Jan 2016 01:11:41 +0000
reviewersfitzgen
bugs1234600
milestone46.0a1
Bug 1234600 - executeSoon async stacks only when DEBUG_JS_MODULES enabled. r=fitzgen
devtools/shared/DevToolsUtils.js
devtools/shared/tests/unit/head_devtools.js
--- 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;