2017-07-28 10:35 GMT+02:00 Esteban Lorenzano <[email protected]>: > About the FreeType issue: the fonts we use are already cached in the image > but they still need to be moved to freetype library when starting. >
Looks suprizing that moving two fonts takes so much time. Do you know what happens during move? I found two cached fonts in image: SourceCode and SourceSans. There is also LucidaGrandeRegular which always loads font from file. But it is only for Mac (look at #canBeInstalled). > While speeding up will be cool, the only way to avoid this is to not > initiate freetype fonts (perfectly doable for headless images) > > Esteban > > 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. > > > 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 ! >> >> >> >> >> >
