[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