[Laszlo-checkins] r14304 - in openlaszlo/trunk: WEB-INF/lps/lfc/debugger WEB-INF/lps/lfc/kernel/dhtml WEB-INF/lps/lfc/kernel/swf WEB-INF/lps/lfc/kernel/swf9 WEB-INF/lps/lfc/services lps/components/debugger

ptw@openlaszlo.org ptw at openlaszlo.org
Fri Jul 10 06:29:12 PDT 2009


Author: ptw
Date: 2009-07-10 06:29:06 -0700 (Fri, 10 Jul 2009)
New Revision: 14304

Modified:
   openlaszlo/trunk/WEB-INF/lps/lfc/debugger/LzMemory.lzs
   openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js
   openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzKeyboardKernel.as
   openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzKeyboardKernel.as
   openlaszlo/trunk/WEB-INF/lps/lfc/services/LzIdle.lzs
   openlaszlo/trunk/WEB-INF/lps/lfc/services/LzKeys.lzs
   openlaszlo/trunk/lps/components/debugger/debugger.lzx
Log:
Change 20090709-ptw-1 by ptw at dueling-banjos.home on 2009-07-09 16:25:07 EDT
    in /Users/ptw/OpenLaszlo/trunk
    for http://svn.openlaszlo.org/openlaszlo/trunk

Summary: Make memory tracing work again

Bugs Fixed: LPP-5222 Memory tracing does not work in DHTML

Technical Reviewer: hminsky (Message-ID: <8c61fad60907091933k6476cc38g1dfa5068d936db5a at mail.gmail.com>)
QA Reviewer: max (pending)

Details:
    Memory tracing was experimentally working in DHTML, but caused it
    to rot in swf8.  Make it work in both places again.  DHTML is
    still marked as 'experimental' support.

    LzKeyboardKernel.*:  Remove gratuitous consing of __downKeysHash

    LzKeys:  Remove gratutious consing of downKeysArray

    LzIdle:  Remove gratuitous consing of coi

    LzMemory:  Remember that movieclips are not objects.  Mark the
    Firebug console so it is not seen as a leak.

    debugger:  There is no need for the commands to be global.

Tests:
    Duplicated the examples from http://wiki.openlaszlo.org/Embedded_Debugger#Memory_Leaks



Modified: openlaszlo/trunk/WEB-INF/lps/lfc/debugger/LzMemory.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/debugger/LzMemory.lzs	2009-07-10 08:00:09 UTC (rev 14303)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/debugger/LzMemory.lzs	2009-07-10 13:29:06 UTC (rev 14304)
@@ -2,7 +2,7 @@
 
 /**
   *
-  * @copyright Copyright 2001-2008 Laszlo Systems, Inc.  All Rights Reserved.
+  * @copyright Copyright 2001-2009 Laszlo Systems, Inc.  All Rights Reserved.
   *            Use is subject to license terms.
   *
   * @access private
@@ -55,7 +55,8 @@
 Debug.mark = function (o) {
   // We can't trace things that don't support hasOwnProperty
   if  ((! o) ||
-      (! (typeof o == 'object')) ||
+       // 'movieclip' is for as2
+       (! ((typeof o == 'object') || (typeof o == 'movieclip'))) || 
       (! (typeof o['hasOwnProperty'] == 'function'))) {
     if (this.debugTrace) {
       console.log('Not marking %s\n', o);
@@ -87,7 +88,8 @@
 Debug.isMarked = function (o) {
   // We can't trace things that don't support hasOwnProperty
   if ((! o) ||
-      (! (typeof o == 'object')) ||
+      // 'movieclip' is for as2
+      (! ((typeof o == 'object') || (typeof o == 'movieclip'))) ||
       (! (typeof o['hasOwnProperty'] == 'function'))) {
     if (this.debugTrace) {
       console.log('Not tracing %s\n', o);
@@ -422,6 +424,10 @@
   if ('___' in global) {
     this.mark(global.___);
   }
+  // If the browser has a console, don't trace it
+  if ('console' in global) {
+    this.mark(global.console);
+  }
 
   // Create the initial obstack element: global
   var osel = ["global", global];

Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js	2009-07-10 08:00:09 UTC (rev 14303)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/dhtml/LzKeyboardKernel.js	2009-07-10 13:29:06 UTC (rev 14304)
@@ -132,18 +132,20 @@
     }
     // Called by lz.embed when the browser window regains focus
     ,__allKeysUp: function () {
-        var delta = {};
+        var delta = null;
         var stuck = false;
-        var keys;
+        var keys = null;
         var dh = LzKeyboardKernel.__downKeysHash;
         for (var key in dh) {
           if (dh[key] != null) {
             stuck = true;
+            if (! delta) { delta = {}; }
             delta[key] = false;
             if (key.length == 1) {
               if (! keys) { keys = []; }
               keys.push(dh[key]);
             }
+            dh[key] = null;
           }
         }
 //         Debug.info("[%6.2f] All keys up: %w, %w", (new Date).getTime() % 1000000, delta, keys);

Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzKeyboardKernel.as
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzKeyboardKernel.as	2009-07-10 08:00:09 UTC (rev 14303)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf/LzKeyboardKernel.as	2009-07-10 13:29:06 UTC (rev 14304)
@@ -86,18 +86,20 @@
     }
     // Called by lz.embed when the browser window regains focus
     ,__allKeysUp: function () {
-        var delta = {};
+        var delta = null;
         var stuck = false;
-        var keys;
+        var keys = null;
         var dh = LzKeyboardKernel.__downKeysHash;
         for (var key in dh) {
           if (dh[key] != null) {
             stuck = true;
+            if (! delta) { delta = {}; }
             delta[key] = false;
             if (key.length == 1) {
               if (! keys) { keys = []; }
               keys.push(dh[key]);
             }
+            dh[key] = null;
           }
         }
 //         Debug.info("[%6.2f] All keys up: %w, %w", (new Date).getTime() % 1000000, delta, keys);
@@ -110,7 +112,6 @@
             scope[callback](delta, keys[i], 'onkeyup');
           }
         }
-        LzKeyboardKernel.__downKeysHash = {};
     }
     // Called by lz.Keys when the last focusable element was reached.
     ,gotLastFocus: function () {
@@ -120,8 +121,6 @@
     }
     ,onKeyDown: function () { LzKeyboardKernel.__keyboardEvent(Key.getCode(), 'onkeydown'); }
     ,onKeyUp: function () { LzKeyboardKernel.__keyboardEvent(Key.getCode(), 'onkeyup'); }
-
-    
 }
 
 Key.addListener(LzKeyboardKernel);

Modified: openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzKeyboardKernel.as
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzKeyboardKernel.as	2009-07-10 08:00:09 UTC (rev 14303)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/kernel/swf9/LzKeyboardKernel.as	2009-07-10 13:29:06 UTC (rev 14304)
@@ -51,15 +51,17 @@
 
     // Called by lz.embed when the browser window regains focus
     static function __allKeysUp () {
-        var delta = {};
+        var delta = null;
         var stuck = false;
-        var keys;
+        var keys = null;
         for (var key in __keyState) {
           if (__keyState[key] != null) {
             stuck = true;
+            if (! delta) { delta = {}; }
             delta[key] = false;
             if (! keys) { keys = []; }
             keys.push(__keyState[key]);
+            __keyState[key] = null;
           }
         }
 //         Debug.info("[%6.2f] All keys up: %w", (new Date).getTime() % 1000000, delta);
@@ -70,7 +72,6 @@
             __scope[__callback](delta, keys[i], 'onkeyup');
           }
         }
-        __keyState = {};
     }
 
     // Called by lz.Keys when the last focusable element was reached.

Modified: openlaszlo/trunk/WEB-INF/lps/lfc/services/LzIdle.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/services/LzIdle.lzs	2009-07-10 08:00:09 UTC (rev 14303)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/services/LzIdle.lzs	2009-07-10 13:29:06 UTC (rev 14304)
@@ -134,16 +134,17 @@
      * @access private
      */
     function removeCallIdleDelegates (t:*) :void {
-        var arr:Array = this.coi;
-        this.coi = new Array;
-        //call in order
+        // Work on a copy so this is not seen as a leak
+        var arr:Array = this.coi.slice(0);
+        this.coi.length = 0;
+        // Call in order after emptying array, since delegates may add
+        // to array
         for (var i:int = 0; i < arr.length; i++) {
             arr[i].execute( t );
         }
-
+        // Note that the executed items may have added to the (new)
+        // coi queue, only unregister if the queue is empty
         if (this.coi.length == 0) {
-            // Note that the executed items may have added to the (new)
-            // coi queue, only unregister if the queue is empty
             this.removeCOI.unregisterFrom(this.onidle);
             this.regNext = false;
         }

Modified: openlaszlo/trunk/WEB-INF/lps/lfc/services/LzKeys.lzs
===================================================================
--- openlaszlo/trunk/WEB-INF/lps/lfc/services/LzKeys.lzs	2009-07-10 08:00:09 UTC (rev 14303)
+++ openlaszlo/trunk/WEB-INF/lps/lfc/services/LzKeys.lzs	2009-07-10 13:29:06 UTC (rev 14304)
@@ -210,7 +210,6 @@
     function gotKeyUp (kC:Number) :void {
         //Debug.write('gotKeyUp', kC);
         var dkhash:Object = this.downKeysHash;
-        var dkeys:Array = this.downKeysArray = [];
         var isDown:Boolean = dkhash[ kC ];
         delete dkhash[ kC ];
 
@@ -234,6 +233,9 @@
                 return;
             }
         }
+        var dkeys:Array = this.downKeysArray;
+        // Avoid allocating a new array for each keystroke
+        dkeys.length = 0;
         // update downKeysArray before sending onkeyup-event
         for (var k:String in dkhash) {
             dkeys.push( k );

Modified: openlaszlo/trunk/lps/components/debugger/debugger.lzx
===================================================================
--- openlaszlo/trunk/lps/components/debugger/debugger.lzx	2009-07-10 08:00:09 UTC (rev 14303)
+++ openlaszlo/trunk/lps/components/debugger/debugger.lzx	2009-07-10 13:29:06 UTC (rev 14304)
@@ -245,47 +245,47 @@
       <![CDATA[
       this.bringToFront();
       if (this.bottom.center.input.height > this.smallInputAreaHeight) {
-        _dbg_cmd_eval.active = false;
-        _dbg_cmd_hist_prev.active = false;
-        _dbg_cmd_hist_next.active = false;
-        _dbg_cmd_complete_tab.active = false;
-//         _dbg_cmd_complete_dot.active = false;
-//         _dbg_cmd_complete_bracket.active = false;
-//         _dbg_cmd_complete_paren.active = false;
+        this._cmd_eval.active = false;
+        this._cmd_hist_prev.active = false;
+        this._cmd_hist_next.active = false;
+        this._cmd_complete_tab.active = false;
+//         this._cmd_complete_dot.active = false;
+//         this._cmd_complete_bracket.active = false;
+//         this._cmd_complete_paren.active = false;
       } else {
-        _dbg_cmd_eval.active = true;
-        _dbg_cmd_hist_prev.active = true;
-        _dbg_cmd_hist_next.active = true;
-        _dbg_cmd_complete_tab.active = true;
-//         _dbg_cmd_complete_dot.active = true;
-//         _dbg_cmd_complete_bracket.active = true;
-//         _dbg_cmd_complete_paren.active = true;
+        this._cmd_eval.active = true;
+        this._cmd_hist_prev.active = true;
+        this._cmd_hist_next.active = true;
+        this._cmd_complete_tab.active = true;
+//         this._cmd_complete_dot.active = true;
+//         this._cmd_complete_bracket.active = true;
+//         this._cmd_complete_paren.active = true;
       }
       ]]>
     </method>
 
 <method name="handleBlur">
        <![CDATA[
-       _dbg_cmd_eval.active = false;
-       _dbg_cmd_hist_prev.active = false;
-       _dbg_cmd_hist_next.active = false;
-       _dbg_cmd_complete_tab.active = false;
-//        _dbg_cmd_complete_dot.active = false;
-//        _dbg_cmd_complete_bracket.active = false;
-//        _dbg_cmd_complete_paren.active = false;
+       this._cmd_eval.active = false;
+       this._cmd_hist_prev.active = false;
+       this._cmd_hist_next.active = false;
+       this._cmd_complete_tab.active = false;
+//        this._cmd_complete_dot.active = false;
+//        this._cmd_complete_bracket.active = false;
+//        this._cmd_complete_paren.active = false;
        ]]>
     </method>
 
 
     <!-- *** Commands *** -->
-    <command id="_dbg_cmd_eval" onselect="parent.doEval()"  key="['Enter']" active="false"/>
-    <command id="_dbg_cmd_hist_prev" onselect="parent.doCommandHistory(-1)"  key="['uparrow']" active="false"/>
-    <command id="_dbg_cmd_hist_next" onselect="parent.doCommandHistory(1)"  key="['downarrow']" active="false"/>        
-    <command id="_dbg_cmd_complete_tab" onselect="parent.doCommandCompletion('\t')"  key="['tab']" active="false"/>        
+    <command name="_cmd_eval" onselect="parent.doEval()"  key="['Enter']" active="false"/>
+    <command name="_cmd_hist_prev" onselect="parent.doCommandHistory(-1)"  key="['uparrow']" active="false"/>
+    <command name="_cmd_hist_next" onselect="parent.doCommandHistory(1)"  key="['downarrow']" active="false"/>
+    <command name="_cmd_complete_tab" onselect="parent.doCommandCompletion('\t')"  key="['tab']" active="false"/>
     <?broken
-    <command id="_dbg_cmd_complete_dot" onselect="parent.doCommandCompletion('.')"  key="['.']" active="false"/>        
-    <command id="_dbg_cmd_complete_bracket" onselect="parent.doCommandCompletion('[')"  key="['[']" active="false"/>        
-    <command id="_dbg_cmd_complete_paren" onselect="parent.doCommandCompletion('(')"  key="['(']" active="false"/>        
+    <command name="_cmd_complete_dot" onselect="parent.doCommandCompletion('.')"  key="['.']" active="false"/>
+    <command name="_cmd_complete_bracket" onselect="parent.doCommandCompletion('[')"  key="['[']" active="false"/>
+    <command name="_cmd_complete_paren" onselect="parent.doCommandCompletion('(')"  key="['(']" active="false"/>
     ?>
     <!--- Substitute entity character escapes for HTML meta-characters  -->
 <method name="escapeText" args="ts" >



More information about the Laszlo-checkins mailing list