On 28 Jul 2017, at 10:15, Denis Kudriashov <[email protected]> wrote:

>> 6ms startup:true a ClassSessionHandler(ExternalObject)
> 
> Most time here is taken by ExternalAddress startUp logic:
> 
> ExternalAddress>>startUp: resuming
> ...
> instances := self allInstances.
>                wordSize ~= Smalltalk wordSize
>                       ifTrue: "Implement nulling by becomming all existing 
> instances to new (and hence null) pointers of the right size."
>                               [wordSize := Smalltalk wordSize.
>                                instances elementsForwardIdentityTo: 
> (instances collect: [:ea| self basicNew: wordSize])]
>                       ifFalse:
>                               [instances do: [:addr| addr beNull]]]
> 
> It scans all instances which is very expensive. And I thing it can lead to 
> much more time in bigger images.
> Maybe we can perform this cleanup at "prepare for production" script and add 
> special flag in image that all externals are already clean. 

Sorry but no :)
This will lead to all kind of pain since a lot of functionality depends on 
that. I played with moving the clean up to shutdown instead (which would be a 
better approach) but there were also problems.
If you want to play in that sense, is cool. But ExternalAddress needs to be 
cleaned and each new session needs to be started and find instances of EA 
nulled.

Esteban 

> 
> 
> 2017-07-27 14:49 GMT+02:00 Sven Van Caekenberghe <[email protected]>:
>> Hi,
>> 
>> I instrumented WorkingSession with a log collection that holds timing info 
>> for each #startUp: executed. In a clean Pharo 6 image, 62 were run. Most of 
>> them resulted in a 0ms execution time (#millisecondsToRun: i.e. they were 
>> faster than 1ms). Here is the list of the non zero ones:
>> 
>> 1ms startup:true a ClassSessionHandler(ProcessorScheduler)
>> 1ms startup:true a ClassSessionHandler(OSPlatform)
>> 6ms startup:true a ClassSessionHandler(ExternalObject)
>> 1ms startup:true a ClassSessionHandler(DiskStore)
>> 5ms startup:true a ClassSessionHandler(SmalltalkImage)
>> 9ms startup:true a ClassSessionHandler(DisplayScreen)
>> 1ms startup:true a ClassSessionHandler(Cursor)
>> 41ms startup:true a ClassSessionHandler(FT2Handle)
>> 238ms startup:true a ClassSessionHandler(FreeTypeSettings)
>> 1ms startup:true a ClassSessionHandler(WorldMorph)
>> 14ms startup:true a ClassSessionHandler(OmSessionStore)
>> 
>> For a total of 318ms
>> 
>> I think being able to inspect the WorkingSession and see this list (ordered, 
>> with timing info) would be generally useful (and low cost). Even headless, 
>> we could access the list using eval.
>> 
>> Sven
>> 
>> PS: The code of SessionManager/WorkingSession was very readable, well done 
>> Christophe !
>> 
>> 
>> 
>> 
> 

Reply via email to