W3C home > Mailing lists > Public > public-webapps@w3.org > October to December 2008

Re: [webkit-dev] Proposed Timer API

From: Maciej Stachowiak <mjs@apple.com>
Date: Fri, 03 Oct 2008 13:57:47 -0700
To: Geoffrey Garen <ggaren@apple.com>
Cc: Chris Marrin <cmarrin@apple.com>, WebKit-Dev Development <webkit-dev@lists.webkit.org>, public-webapps@w3.org
Message-id: <53250495-02B3-418B-81E0-8D3BF995A9DE@apple.com>


On Oct 3, 2008, at 11:15 AM, Geoffrey Garen wrote:

> Hi Chris.
>
>> I really like the idea of a Timer object. It would allow you to
>> separate creation from starting, allows you to pause and add other
>> API's to the interface. Can the constructor be used to simplify the
>> creation:
>>
>>    var t = new Timer(0, false, function() { ...});
>>
>> which would start the timer immediately, as in your example.
>
> I think Maciej has made a convincing case that "new Timer" is a bit  
> too coy about the fact that the timer is actually starting.
>
>> Or you could do:
>>
>>    var t = new Timer(function() { ... });
>>    ...
>>    t.startOneShot(1.76);
>
> I like your suggestion of adding "startOneShot" (and  
> "startRepeating"?) to the API. I think it would improve clarity over  
> a bool parameter specifying whether the timer repeats.
>
> To create a Timer that isn't scheduled to fire:
>
> new Timer(...)
>
> To create a Timer that is scheduled to fire:
>
> new Timer(...).startOneShot(...)
> new Timer(...).startRepeating(...)

It would be pretty unusual for a method like startOneShot or  
startRepeating to return a value. I'm not sure if you indended that;  
if not

> Or, if we don't like constructors:
>
> createTimer(...).startOneShot(...)
> createTimer(...).startRepeating(...)

We could rename the restart() method to start() (with the same  
semantics, or also taking a bool) and have both createTimer() and  
startTimer() if we think this use case is very important. I don't  
think the need for unstarted timers is very high. However, here's yet  
another tricksy way to achieve the same thing:

var tSpec = [0, false, function() {...});
...
var t = startTimer.apply(window, tSpec);

I think setting up a Timer with the intent of not only starting it but  
defining the timing parameters is extra useless, since then all it  
represents is a function.

Regards,
Maciej


>
>
>> And you could easily add animation or media API's for  
>> synchronization:
>>
>>    var t = new Timer(1.76, function() { ... }); // when the timer is
>> triggered, it will run for 1.76 seconds
>>    var transition = window.getTransitionForElement(element, "left");
>>    transition.trigger(t);
>>    ...
>>    element.style.left = "100px";
>>
>> This would cause the timer to start when the left transition starts
>> and fire its event 1.76 seconds later.
>
> This would be really cool!
>
> Geoff
Received on Friday, 3 October 2008 20:58:28 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 18:49:28 GMT