You'll have to upgrade your test to checking for an empty delegates  
list if we make all events always be defined (even if to the  
hypothetical 'NullEvent');

On 2006-04-12, at 12:49 EDT, Jim Grandy wrote:

>
> On Apr 12, 2006, at 9:16 AM, P T Withington wrote:
>
>> That is what henry proposed.  I mis-used the word 'created', just
>> meaning that events would always be valid.  We didn't think about
>> making the null event really be null in swf -- maybe that is a good
>> idea, or not, depending if newer swf runtimes will be stricter.
>>
> I think our assumptions about performance and behavior should not  
> be carried forward from Flash <= 8 to Flash 8.5. So having  
> sendEvent be null would most likely only be a solution for Flash <=  
> 8. (But we should benchmark and test, of course.)
>
> Since it's cheap to do, I'm trying as an experiment to check for  
> null every time we call sendEvent in LzView and LzNode. The biggie  
> I've seen so far is this one:
>
> LzNode.prototype.__LZapplyArgs = function ( args , constcall ){
>
>       ...
>
>               this[ a ] = args[ a ];
>               if ( !constcall ){
>                   //then we need to notify the rest of the system  
> that this
>                   //value changed.
>                   this[ "on" + a ].sendEvent( args[ a ] );
>               }
>
> }
>
> If you don't know, __LZapplyArgs figures prominently in profile  
> traces of node/view initialization, so this is a nice find; I'll  
> measure whether it speeds anything up.
>
> jim
>
>> It is probably still valid to avoid calling send event when there are
>> no listeners -- a future optimization.
>>
>> On 2006-04-12, at 12:03 EDT, Adam Wolff wrote:
>>
>>> I thought the plan was that we attach a singleton "NullEvent" to
>>> declared
>>> event slots. When a delegate registers for the event, it replaces
>>> the null
>>> event with a real event.
>>>
>>> In SWF (where call overhead is high, and it's not an error to call a
>>> missing function) we could define the NullEvent sendEvent method as
>>> null
>>> (when you're not in Debug.) In other runtimes, we can define it as
>>> a no
>>> op.
>>>
>>> This scheme *would* make it unnecessary (useless) to test for a non-
>>> null
>>> slot before calling sendEvent.
>>>
>>> We can't afford to instantiate every event that is declared. Much  
>>> too
>>> slow.
>>>
>>> A
>>>
>>> On Apr 12, P T Withington wrote:
>>>
>>>> Right, but what Henry was proposing was for their to always be an
>>>> event object created.  Then you would never have to check for the
>>>> event object existing (so the idiom you use would go away).
>>>>
>>>> BUT, Jim discovered that, at least on the swf runtime, because
>>>> function calls are relatively expensive, that testing for the
>>>> delegateList being empty or not before calling sendEvent saved
>>>> considerable time, at least with very frequent events (in  
>>>> particular
>>>> onwidth and onheight).
>>>>
>>>> The best of all worlds would be for sendEvent to be inlined, at  
>>>> least
>>>> to the point of checking the delegateList, and only call the out- 
>>>> of-
>>>> line helper function when there are delegates listening.  For now,
>>>> that would have to be done by special code in the compiler...
>>>>
>>>> On 2006-04-12, at 00:29 EDT, Sarah Allen wrote:
>>>>
>>>>> In the component code and application code that I've been  
>>>>> creating,
>>>>> it is common to write:
>>>>>   if (foo.someevent)  foo.someevent.sendEvent()
>>>>>
>>>>> This avoids debugger warnings if no one is registered for  
>>>>> someevent.
>>>>>
>>>>> Sarah
>>>>>
>>>>>
>>>>> On Thu, Apr 6, 2006 at  9:01 PM, P T Withington wrote:
>>>>>
>>>>>> Belay that.  Not sure what I was thinking here.
>>>>>>
>>>>>> It would be an optimization to not call sendEvent if the event's
>>>>>> delegateList was empty.  At least in the swf runtime, where
>>>>>> function calls are costly.
>>>>>>
>>>>>> But I'm not sure this is the whole answer.  It looks like you are
>>>>>> trying to create some sort of 'null' event for each declaration.
>>>>>> If you do this, you also need to check for this null event when
>>>>>> you do add a delegate (and convert it into a real event).
>>>>>>
>>>>>> On 2006-04-06, at 20:38 PDT, Henry Minsky wrote:
>>>>>>
>>>>>>> So that needs  to be a convention that everyone obeys when they
>>>>>>> write calls
>>>>>>> to sendEvent? Not just in the LFC, I'm just thinking about user
>>>>>>> code, if app
>>>>>>> developers are going to be told to do
>>>>>>>
>>>>>>> if (foo.someevent)  foo.someevent.sendEvent()
>>>>>>>
>>>>>>> instead of
>>>>>>>
>>>>>>> foo.someevent.sendEvent()
>>>>>>>
>>>>>>>
>>>>>>> Or is there some kind of magic we could use to do this
>>>>>>> automatically ?  I
>>>>>>> guess it would need to be some kind of macro processor :-)
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On 4/6/06, P T Withington <[EMAIL PROTECTED]> wrote:
>>>>>>>>
>>>>>>>> If you do, annotate LPP-1915 to say this can be removed when  
>>>>>>>> all
>>>>>>>> callers of sendEvent check for no listeners first (which
>>>>>>>> should be
>>>>>>>> much more efficient than making a call to the empty function).
>>>>>>>>
>>>>>>>> On 2006-04-06, at 19:56 PDT, Henry Minsky wrote:
>>>>>>>>
>>>>>>>>>
>>>>>>>>> This code for declaring events is currently in the DHTML  
>>>>>>>>> runtime
>>>>>>>>> but not in the SWF runtime.
>>>>>>>>>
>>>>>>>>> Should this go into the SWF runtime as is, or is there
>>>>>>>>> anything we
>>>>>>>>> need to do differently?
>>>>>>>>>
>>>>>>>>> [background for the viewing audience; we need to avoid
>>>>>>>>> referencing
>>>>>>>>> properties of null values
>>>>>>>>> in the DHTML runtime, as it brings the browser javascript
>>>>>>>>> interpreter to a screeching halt]
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> LzDeclaredEvent = {};
>>>>>>>>> LzDeclaredEvent.sendEvent = function ( a ){  return a };
>>>>>>>>> LzDeclaredEvent.toString = function ( ){
>>>>>>>>>     return "Declared event";
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>> function DeclareEvent( who , what ){
>>>>>>>>>     //    debug('declare ' + who + ' what ' + what);
>>>>>>>>>     who[ what ] = LzDeclaredEvent;
>>>>>>>>> }
>>>>>>>>> function DeclareEvents( who , what ){
>>>>>>>>>     //    debug('DeclareEvents', who, what);
>>>>>>>>>     for (var i in what) {
>>>>>>>>>         //info('what', what[i]);
>>>>>>>>>         who[what[i]] = LzDeclaredEvent;
>>>>>>>>>     }
>>>>>>>>> }
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> Henry Minsky
>>>>>>>>> Software Architect
>>>>>>>>> [EMAIL PROTECTED]
>>>>>>>>>
>>>>>>>>> _______________________________________________
>>>>>>>>> Laszlo-dev mailing list
>>>>>>>>> [email protected]
>>>>>>>>> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> Henry Minsky
>>>>>>> Software Architect
>>>>>>> [EMAIL PROTECTED]
>>>>>>
>>>>>> _______________________________________________
>>>>>> Laszlo-dev mailing list
>>>>>> [email protected]
>>>>>> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
>>>>>
>>>>
>>>> _______________________________________________
>>>> Laszlo-dev mailing list
>>>> [email protected]
>>>> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
>>>>
>>
>> _______________________________________________
>> Laszlo-dev mailing list
>> [email protected]
>> http://www.openlaszlo.org/mailman/listinfo/laszlo-dev
>

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

Reply via email to