Bug 1382904: Optimize XPCOMUtils.generateQI. r?florian draft
authorKris Maglione <maglione.k@gmail.com>
Thu, 20 Jul 2017 18:38:14 -0700
changeset 612727 fb567b55cbdeb6eab06f15c689bfcfbc7551e39b
parent 612584 8e46fc907da91a5ad9630fdca9fddaf3557eda63
child 638491 fd42135d126eb7e02df4e80f5bb06a8b200124b0
push id69588
push usermaglione.k@gmail.com
push dateFri, 21 Jul 2017 01:38:54 +0000
reviewersflorian
bugs1382904
milestone56.0a1
Bug 1382904: Optimize XPCOMUtils.generateQI. r?florian XPCOMUtils.generateQI is called a lot, and the current implementation is especially inefficient. It relies on calling the stringification slow path twice for each interface ID, which begins to add up fast given how often it's called. MozReview-Commit-ID: 2O87wBVMA2G
js/xpconnect/loader/XPCOMUtils.jsm
--- a/js/xpconnect/loader/XPCOMUtils.jsm
+++ b/js/xpconnect/loader/XPCOMUtils.jsm
@@ -106,18 +106,19 @@ this.XPCOMUtils = {
    * property.
    */
   generateQI: function XPCU_generateQI(interfaces) {
     /* Note that Ci[Ci.x] == Ci.x for all x */
     let a = [];
     if (interfaces) {
       for (let i = 0; i < interfaces.length; i++) {
         let iface = interfaces[i];
-        if (Ci[iface]) {
-          a.push(Ci[iface].name);
+        let name = iface.name || String(iface);
+        if (name in Ci) {
+          a.push(name);
         }
       }
     }
     return makeQI(a);
   },
 
   /**
    * Generate a ClassInfo implementation for a component. The returned object