Author: max
Date: 2007-08-13 16:52:08 -0700 (Mon, 13 Aug 2007)
New Revision: 6042

Modified:
   openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/services/LzCSSStyle.js
   openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/views/LaszloView.lzs
Log:
Change 20070813-maxcarlson-b by [EMAIL PROTECTED] on 2007-08-13 16:24:27 PDT
    in /Users/maxcarlson/openlaszlo/wafflecone
    for http://svn.openlaszlo.org/openlaszlo/branches/wafflecone

Summary: UPDATED: performance improvements

New Features:

Bugs Fixed: LPP-4394 - "LzGlobalMouse.onmousemove" is way to slow for 
"LzView.prototype.getMouse.dependencies" in SWF, LPP-4414 - Improve startup 
performance (partial)

Technical Reviewer: promanik
QA Reviewer: ben
Doc Reviewer: (pending)

Documentation:

Release Notes:

Details: LzCSSStyle.js - Inlined getSpecificity() and getSelectorSpecificity() 
in __compareSpecificity().  Swf 7 profiler shows 2217 fewer function calls.

LaszloView.lzs - Fix per LPP-4394, cache setVisible() and setVisibility() 
values.

Tests: Swf 7 profiler shows 2217 fewer calls to getSpecificity() and 
getSelectorSpecificity() and 47 fewer calls to __LZupdateShown().  Also passes 
http://localhost:8080/wafflecone/test/style/metasuite.lzx?lzr=swf8&debug=true



Modified: openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/services/LzCSSStyle.js
===================================================================
--- openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/services/LzCSSStyle.js       
2007-08-13 23:51:55 UTC (rev 6041)
+++ openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/services/LzCSSStyle.js       
2007-08-13 23:52:08 UTC (rev 6042)
@@ -21,6 +21,8 @@
 LzCSSStyleRule.prototype.selector = null;
 //No rule has a specificity of zero
 LzCSSStyleRule.prototype.specificity = 0;
+
+// this is inlined in __compareSpecificity() - keep in sync
 LzCSSStyleRule.prototype.getSpecificity = function () {
     
     // Only calculate this once. Store it after we've calculated it once.     
@@ -241,6 +243,7 @@
     }
 }
 
+// this is inlined in __compareSpecificity() - keep in sync
 LzCSSStyle.getSelectorSpecificity = function ( parsedsel ){
     // Go through all the selectors in the selector, keeping a running
     // count of various kinds of selectors:
@@ -272,8 +275,117 @@
     // if rA specificity  is less than rB specifity, return -1
     // if they're equal specificity, return 0
     // if rB specifitity is less than rA specificity, return 1
-    var specificityA = rA.getSpecificity();
-    var specificityB = rB.getSpecificity();
+    if (! rA.specificity) {
+        //inline: rA.getSpecificity();
+        // Only calculate this once. Store it after we've calculated it once.  
   
+        // No rule has a specificity of 0
+        if ( !rA.specificity ) {
+            //need to treat compound selectors differently
+
+            if ( rA.parsed.type == LzCSSStyle._sel_compound ){
+                for ( var i = 0; i < rA.parsed.length; i++ ){
+                    //inline: rA.specificity += 
LzCSSStyle.getSelectorSpecificity( rA.parsed[ i ] );
+                    switch ( rA.parsed[i].type ){
+                        case (LzCSSStyle._sel_tag ):
+                        case (LzCSSStyle._sel_star ):
+                            rA.specificity += 1;
+                            break;
+
+                        case (LzCSSStyle._sel_id ):
+                            rA.specificity += 100;
+                            break;
+
+                        case (LzCSSStyle._sel_attribute ):
+                            rA.specificity += 10;
+                            break;
+
+                        case (LzCSSStyle._sel_tagAndAttr ):
+                            rA.specificity += 11; 
+                            break;
+                    }
+                }
+                } else {
+                    //inline: rA.specificity = 
LzCSSStyle.getSelectorSpecificity( rA.parsed );
+                    switch ( rA.parsed.type ){
+                        case (LzCSSStyle._sel_tag ):
+                        case (LzCSSStyle._sel_star ):
+                            rA.specificity = 1;
+                            break;
+
+                        case (LzCSSStyle._sel_id ):
+                            rA.specificity = 100;
+                            break;
+
+                        case (LzCSSStyle._sel_attribute ):
+                            rA.specificity = 10;
+                            break;
+
+                        case (LzCSSStyle._sel_tagAndAttr ):
+                            rA.specificity = 11; 
+                            break;
+                    }
+                }
+
+                //Debug.write( 'specificity for' , this , this.specificity );
+        }
+    }
+    if (! rB.specificity) {
+        //inline: rB.getSpecificity();
+        // Only calculate this once. Store it after we've calculated it once.  
   
+        // No rule has a specificity of 0
+        if ( !rB.specificity ) {
+            //need to treat compound selectors differently
+
+            if ( rB.parsed.type == LzCSSStyle._sel_compound ){
+                for ( var i = 0; i < rB.parsed.length; i++ ){
+                    //inline: rB.specificity += 
LzCSSStyle.getSelectorSpecificity( rB.parsed[ i ] );
+                    switch ( rB.parsed[i].type ){
+                        case (LzCSSStyle._sel_tag ):
+                        case (LzCSSStyle._sel_star ):
+                            rB.specificity += 1;
+                            break;
+
+                        case (LzCSSStyle._sel_id ):
+                            rB.specificity += 100;
+                            break;
+
+                        case (LzCSSStyle._sel_attribute ):
+                            rB.specificity += 10;
+                            break;
+
+                        case (LzCSSStyle._sel_tagAndAttr ):
+                            rB.specificity += 11; 
+                            break;
+                    }
+                }
+            } else {
+                //inline: rB.specificity = LzCSSStyle.getSelectorSpecificity( 
rB.parsed );
+                switch ( rB.parsed.type ){
+                    case (LzCSSStyle._sel_tag ):
+                    case (LzCSSStyle._sel_star ):
+                        rB.specificity = 1;
+                        break;
+
+                    case (LzCSSStyle._sel_id ):
+                        rB.specificity = 100;
+                        break;
+
+                    case (LzCSSStyle._sel_attribute ):
+                        rB.specificity = 10;
+                        break;
+
+                    case (LzCSSStyle._sel_tagAndAttr ):
+                        rB.specificity = 11; 
+                        break;
+                }
+            }
+
+            //Debug.write( 'specificity for' , this , this.specificity );
+        }
+    }
+
+    var specificityA = rA.specificity;
+    var specificityB = rB.specificity;
     //Debug.write( rA, specificityA );
     //Debug.write( rB, specificityB );
 

Modified: openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/views/LaszloView.lzs
===================================================================
--- openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/views/LaszloView.lzs 
2007-08-13 23:51:55 UTC (rev 6041)
+++ openlaszlo/branches/wafflecone/WEB-INF/lps/lfc/views/LaszloView.lzs 
2007-08-13 23:52:08 UTC (rev 6042)
@@ -1082,17 +1082,21 @@
   * @param Boolean amVisible: boolean for visibility of view
   */
 function setVisible( amVisible ) {
+    if (this._visible == amVisible) return;
+    this._visible = amVisible;
+
     // make us compatible with the new 'visibility' attribute
     if (amVisible) {
-        this.visibility = "visible";
+        var v = "visible";
     } else if (amVisible == null) {
-        this.visibility = "collapse";
+        var v = "collapse";
         if ($debug) {
             Debug.warn("setVisible(null) is deprecated, use 
setVisibility('collapse') instead");
         }
     } else {
-        this.visibility = "hidden";
+        var v = "hidden";
     }
+    this.visibility = v;
     // 
     if (this.onvisibility.ready) this.onvisibility.sendEvent( this.visibility 
);
 
@@ -1112,6 +1116,7 @@
   * @param String amVisible: visibility of view
   */
 function setVisibility( amVisible ) {
+    if (this.visibility == amVisible) return;
     this.visibility = amVisible;
     if ($debug) {
         if (! (amVisible == "visible" || amVisible == "hidden" || amVisible == 
"collapse")) {
@@ -1984,7 +1989,7 @@
 }
 
 prototype.getMouse.dependencies = function( ) {
-    return [ LzGlobalMouse, "mousemove" ];
+    return [ LzIdle, "idle" ];
 }
 
 /**


_______________________________________________
Laszlo-checkins mailing list
[email protected]
http://www.openlaszlo.org/mailman/listinfo/laszlo-checkins

Reply via email to