On Fri, Oct 7, 2016 at 9:14 PM, Thibault Raffaillac
<thibault.raffail...@inria.fr> wrote:
> Thanks for these mails, that's actually very helpful!
> I am working on a shorter syntax for animations at the moment (than 
> GLMAnimation, Viva, Bloc-Animation), and could not find a proper equivalent 
> to requestAnimationFrame (i.e. that would be independent of any UI yet in 
> sync with display, and as simple as possible).
> My solution was to repeatedly register to deferredUIMessages, implementing an 
> intermediate block to add a timestamp like requestAnimationFrame (works 
> wonders http://smalltalkhub.com/#!/~ThibaultRaffaillac/Animation)
>
> Cheers,
> Thibault
>
> ps: I'll ask Guille asap for the state of ReactiveExtensions (lacks comments)
>
>> Also, check
>>
>> MorphicUIManager>>#spawnNewProcess
>>
>> UIProcess := [
>> [World doOneCycle.  Processor yield.  false] whileFalse: [].
>> ] newProcess priority: Processor userSchedulingPriority.
>> UIProcess name: 'Morphic UI Process'.
>> UIProcess resume
>>
>> digging into doOneCycle, you'll find:
>>
>> #doOneCycleFor: aWorld
>> "Do one cycle of the interaction loop. This method is called *repeatedly
>> *when
>> the world is running. This is a moderately private method; a better
>> alternative is usually either to wait for events or to check the state of
>> things from #step methods."
>>
>> self interCyclePause: MinCycleLapse.
>> self doOneCycleNowFor: aWorld.
>>
>>
>> The interCyclePause is what make the UI timing alignment proper (notice
>> serverMode) [and some Squeak remnant mention]:
>>
>> interCyclePause: milliSecs
>> "delay enough that the previous cycle plus the amount of delay will equal
>> milliSecs.  If the cycle is already expensive, then no delay occurs.
>> However, if the system is idly waiting for interaction from the user, the
>> method will delay for a proportionally long time and cause the overall CPU
>> usage of *Squeak* to be low.
>> If self serverMode returns true then, always do a complete delay of 50ms,
>> independant of my argument. This prevents the freezing problem described in
>> Mantis #6581"
>>
>> | wait wait2 |
>>         "*a very long assignment*"
>> wait := self serverMode
>>     ifTrue: [ 50 ]
>>     ifFalse:
>> [ wait2 := (lastCycleTime notNil and: [CanSurrenderToOS ~~ false])
>>         ifFalse: [ 0 ]
>>         ifTrue: [ lastCycleTime + milliSecs - Time millisecondClockValue ].
>>
>>       self flag: 'Issue 14754 - wait2>millisecs is only True for clock
>> rollover. Remove it once DelayScheduler based on microsecondClock - Ben
>> Coman 19.01.2015'.  "*<---- maybe we want this #flag: not to be called all

Yes, good idea. I'll see to it.
cheers -ben

Reply via email to