Bug 1388631: Don't call generateQI for every defineLazyPreferenceGetter call. r?mixedpuppy draft
authorKris Maglione <maglione.k@gmail.com>
Tue, 08 Aug 2017 23:19:06 -0700
changeset 643020 925518badaf501434924cdfe36ef1ae874573535
parent 643019 784f3c7621110dd3d29884aaafe483194f00eb62
child 725176 eebd8133f90eb18f753380c46e5425e4846af0a1
push id72955
push usermaglione.k@gmail.com
push dateWed, 09 Aug 2017 06:19:24 +0000
reviewersmixedpuppy
bugs1388631
milestone57.0a1
Bug 1388631: Don't call generateQI for every defineLazyPreferenceGetter call. r?mixedpuppy MozReview-Commit-ID: 9n8VyXFM7bc
js/xpconnect/loader/XPCOMUtils.jsm
--- a/js/xpconnect/loader/XPCOMUtils.jsm
+++ b/js/xpconnect/loader/XPCOMUtils.jsm
@@ -404,17 +404,17 @@ this.XPCOMUtils = {
                                    aTransform = val => val)
   {
     // Note: We need to keep a reference to this observer alive as long
     // as aObject is alive. This means that all of our getters need to
     // explicitly close over the variable that holds the object, and we
     // cannot define a value in place of a getter after we read the
     // preference.
     let observer = {
-      QueryInterface: this.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
+      QueryInterface: XPCU_lazyPreferenceObserverQI,
 
       value: undefined,
 
       observe(subject, topic, data) {
         if (data == aPreference) {
           if (aOnUpdate) {
             let previous = this.value;
 
@@ -577,16 +577,18 @@ this.XPCOMUtils = {
     Object.defineProperty(aObj, aName, {
       value: aValue,
       enumerable: true,
       writable: false
     });
   },
 };
 
+var XPCU_lazyPreferenceObserverQI = XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]);
+
 XPCOMUtils.defineLazyModuleGetter(this, "Services",
                                   "resource://gre/modules/Services.jsm");
 
 XPCOMUtils.defineLazyServiceGetter(XPCOMUtils, "categoryManager",
                                    "@mozilla.org/categorymanager;1",
                                    "nsICategoryManager");
 
 /**