Hello Ben with your help and some more digging around I managed to solve my issues and I am now also able to update the taskbar button moprh without any major hit to my cpu. Pharo is now at 6-7% of one core which is not bad at all.
So what you mention does not seem to affect my performance. However there is still the problem of ChronoManager taking over a second to open its gui .
The problem with the loading of image is purely on how PNG are loaded.
For example if I profile
ChronosManager open
I get 1241 for my the initialisation of the class out of this 800ms are wasted just loading the pngs with this summary
48.8% {794ms} Form class>>fromFileNamed:
| 47.9% {779ms} Form class>>fromBinaryStream:
| 47.9% {779ms} ImageReadWriter class>>formFromStream:
| 47.9% {779ms} PNGReadWriter>>nextImage
| 47.6% {774ms} PNGReadWriter>>processIDATChunk
| 47.2% {768ms} PNGReadWriter>>processNonInterlaced
| 32.9% {536ms} PNGReadWriter>>filterScanline:count:
| |28.0% {456ms} PNGReadWriter>>filterPaeth:
| | |15.4% {250ms} PNGReadWriter>>paethPredictLeft:above:aboveLeft:
| | |12.6% {205ms} primitives
Reading the full report is clear that a major hit is how pharo tries to compile the png to a form.
full report
1624 tallies, 1626 msec.
**Tree**
--------------------------------
Process: other processes
--------------------------------
15.1% {246ms} InputEventFetcher>>eventLoop
15.1% {246ms} InputEventFetcher>>waitForInput
8.6% {139ms} SoundPlayer class>>playLoop
8.3% {134ms} primitives
--------------------------------
Process: (40s) Morphic UI Process: nil
--------------------------------
76.3% {1241ms} ChronosManager class(Behavior)>>new
76.3% {1241ms} ChronosManager>>initialize
76.3% {1241ms} ChrGUIMorph class(Behavior)>>new
76.3% {1241ms} ChrGUIMorph>>initialize
48.8% {794ms} ChrGUIMorph>>secondsTimerForm
|48.8% {794ms} Form class>>fromFileNamed:
| 47.9% {779ms} Form class>>fromBinaryStream:
| 47.9% {779ms} ImageReadWriter class>>formFromStream:
| 47.9% {779ms} PNGReadWriter>>nextImage
| 47.6% {774ms} PNGReadWriter>>processIDATChunk
| 47.2% {768ms} PNGReadWriter>>processNonInterlaced
| 32.9% {536ms} PNGReadWriter>>filterScanline:count:
| |28.0% {456ms} PNGReadWriter>>filterPaeth:
| | |15.4% {250ms} PNGReadWriter>>paethPredictLeft:above:aboveLeft:
| | |12.6% {205ms} primitives
| |2.8% {46ms} PNGReadWriter>>filterHorizontal:
| |1.6% {26ms} PNGReadWriter>>filterVertical:
| 7.0% {113ms} ZLibReadStream(InflateStream)>>next:into:startingAt:
| |7.0% {113ms} ZLibReadStream(InflateStream)>>next
| | 7.0% {113ms} ZLibReadStream(InflateStream)>>pastEndRead
| | 4.7% {76ms} ZLibReadStream(InflateStream)>>next
| | 1.9% {31ms} ZLibReadStream(InflateStream)>>bitPosition
| 3.0% {49ms} primitives
| 2.6% {43ms} ZLibReadStream(InflateStream)>>next
| |2.6% {43ms} ZLibReadStream(InflateStream)>>pastEndRead
| | 1.7% {28ms} ZLibReadStream(InflateStream)>>next
| 1.2% {19ms} PNGReadWriter>>copyPixelsRGBA:
21.1% {342ms} ChrStopwatchPanelM class(Behavior)>>new
|21.1% {342ms} ChrStopwatchPanelM>>initialize
| 3.0% {48ms} ChrStopwatchSettingsPNG>>stopwatchSecondaryPanelIcon
| |2.3% {37ms} Form class>>fromBinaryStream:
| | 2.3% {37ms} ImageReadWriter class>>formFromStream:
| | 2.3% {37ms} PNGReadWriter>>nextImage
| | 2.3% {37ms} PNGReadWriter>>processIDATChunk
| | 2.3% {37ms} PNGReadWriter>>processNonInterlaced
| | 2.0% {33ms} PNGReadWriter>>filterScanline:count:
| | 1.9% {31ms} PNGReadWriter>>filterPaeth:
| | 1.1% {18ms} primitives
| 2.8% {46ms} ChrStopwatchPanelM>>prepareStopwatchButton
| |2.7% {44ms} ChrSwitchButtonM class>>createWithAction:
| | 2.7% {44ms} ChrSwitchButtonM class(Behavior)>>new
| | 2.7% {44ms} ChrSwitchButtonM>>initialize
| | 2.6% {42ms} ChronosManager class>>defaultFont
| | 2.6% {42ms} ChronosManager class>>defaultFontPointSize:
| | 2.3% {38ms} FileReference(AbstractFileReference)>>allDirectories
| | 2.3% {38ms} SelectVisitor class>>breadthFirst:select:
| | 2.3% {38ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| | 2.3% {38ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| | 2.3% {38ms} BreadthFirstGuide>>show:
| | 2.3% {38ms} BreadthFirstGuide>>visitNextEntry:
| | 2.3% {38ms} FileReference>>entries
| | 2.3% {38ms} FileSystem>>entriesAt:
| | 2.3% {38ms} FileSystem>>entriesAt:do:
| | 2.3% {38ms} FileSystem>>entriesAt:ifAbsent:do:
| | 2.0% {33ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| | 1.8% {29ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| | 1.6% {26ms} primitives
| 2.8% {45ms} ChrStopwatchPanelM>>prepareHelpLabel
| |2.8% {45ms} ChronosManager class>>defaultFontPointSize:
| | 2.3% {38ms} FileReference(AbstractFileReference)>>allDirectories
| | 2.3% {38ms} SelectVisitor class>>breadthFirst:select:
| | 2.3% {38ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| | 2.3% {38ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| | 2.3% {38ms} BreadthFirstGuide>>show:
| | 2.3% {38ms} BreadthFirstGuide>>visitNextEntry:
| | 2.3% {38ms} FileReference>>entries
| | 2.3% {38ms} FileSystem>>entriesAt:
| | 2.3% {38ms} FileSystem>>entriesAt:do:
| | 2.3% {38ms} FileSystem>>entriesAt:ifAbsent:do:
| | 2.0% {32ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| | 2.0% {32ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| | 1.1% {18ms} primitives
| 2.8% {45ms} ChrStopwatchPanelM>>prepareBrakelimitLabel
| |2.8% {45ms} ChronosManager class>>defaultFontPointSize:
| | 2.5% {40ms} FileReference(AbstractFileReference)>>allDirectories
| | 2.5% {40ms} SelectVisitor class>>breadthFirst:select:
| | 2.5% {40ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| | 2.5% {40ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| | 2.5% {40ms} BreadthFirstGuide>>show:
| | 2.5% {40ms} BreadthFirstGuide>>visitNextEntry:
| | 2.5% {40ms} FileReference>>entries
| | 2.5% {40ms} FileSystem>>entriesAt:
| | 2.5% {40ms} FileSystem>>entriesAt:do:
| | 2.5% {40ms} FileSystem>>entriesAt:ifAbsent:do:
| | 2.3% {38ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| | 1.9% {31ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| | 1.3% {21ms} primitives
| 2.6% {42ms} ChrStopwatchPanelM>>prepareTimelimitLabel
| |2.6% {42ms} ChronosManager class>>defaultFontPointSize:
| | 2.3% {37ms} FileReference(AbstractFileReference)>>allDirectories
| | 2.3% {37ms} SelectVisitor class>>breadthFirst:select:
| | 2.3% {37ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| | 2.3% {37ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| | 2.3% {37ms} BreadthFirstGuide>>show:
| | 2.3% {37ms} BreadthFirstGuide>>visitNextEntry:
| | 2.3% {37ms} FileReference>>entries
| | 2.3% {37ms} FileSystem>>entriesAt:
| | 2.3% {37ms} FileSystem>>entriesAt:do:
| | 2.3% {37ms} FileSystem>>entriesAt:ifAbsent:do:
| | 1.5% {25ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| | 1.1% {18ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| 2.6% {42ms} ChrStopwatchPanelM>>prepareTimerButton
| |2.4% {39ms} ChrSwitchButtonM class>>createWithAction:
| | 2.4% {39ms} ChrSwitchButtonM class(Behavior)>>new
| | 2.4% {39ms} ChrSwitchButtonM>>initialize
| | 2.2% {36ms} ChronosManager class>>defaultFont
| | 2.2% {36ms} ChronosManager class>>defaultFontPointSize:
| | 2.2% {36ms} FileReference(AbstractFileReference)>>allDirectories
| | 2.2% {36ms} SelectVisitor class>>breadthFirst:select:
| | 2.2% {36ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| | 2.2% {36ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| | 2.2% {36ms} BreadthFirstGuide>>show:
| | 2.2% {36ms} BreadthFirstGuide>>visitNextEntry:
| | 2.2% {36ms} FileReference>>entries
| | 2.2% {36ms} FileSystem>>entriesAt:
| | 2.2% {36ms} FileSystem>>entriesAt:do:
| | 2.2% {36ms} FileSystem>>entriesAt:ifAbsent:do:
| | 1.5% {24ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| | 1.5% {24ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| 2.2% {36ms} ChrStopwatchPanelM>>prepareDailygoalLabel
| |2.2% {36ms} ChronosManager class>>defaultFontPointSize:
| | 2.2% {36ms} FileReference(AbstractFileReference)>>allDirectories
| | 2.2% {36ms} SelectVisitor class>>breadthFirst:select:
| | 2.2% {36ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| | 2.2% {36ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| | 2.2% {36ms} BreadthFirstGuide>>show:
| | 2.2% {36ms} BreadthFirstGuide>>visitNextEntry:
| | 2.0% {32ms} FileReference>>entries
| | 2.0% {32ms} FileSystem>>entriesAt:
| | 2.0% {32ms} FileSystem>>entriesAt:do:
| | 2.0% {32ms} FileSystem>>entriesAt:ifAbsent:do:
| | 1.8% {30ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| | 1.7% {28ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| | 1.2% {19ms} primitives
| 2.2% {36ms} ChrStopwatchPanelM>>prepareStopwatchLabel
| 2.2% {36ms} ChronosManager class>>defaultFontPointSize:
| 2.2% {36ms} FileReference(AbstractFileReference)>>allDirectories
| 2.2% {36ms} SelectVisitor class>>breadthFirst:select:
| 2.2% {36ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| 2.2% {36ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| 2.2% {36ms} BreadthFirstGuide>>show:
| 2.2% {36ms} BreadthFirstGuide>>visitNextEntry:
| 2.2% {36ms} FileReference>>entries
| 2.2% {36ms} FileSystem>>entriesAt:
| 2.2% {36ms} FileSystem>>entriesAt:do:
| 2.2% {36ms} FileSystem>>entriesAt:ifAbsent:do:
| 2.1% {34ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| 1.9% {31ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| 1.0% {17ms} primitives
4.7% {77ms} ChronosManager class>>defaultFontPointSize:
|4.4% {71ms} FileReference(AbstractFileReference)>>allDirectories
| 4.4% {71ms} SelectVisitor class>>breadthFirst:select:
| 4.4% {71ms} SelectVisitor(AbstractEnumerationVisitor)>>breadthFirst:
| 4.4% {71ms} SelectVisitor(AbstractEnumerationVisitor)>>visit:with:
| 4.4% {71ms} BreadthFirstGuide>>show:
| 4.4% {71ms} BreadthFirstGuide>>visitNextEntry:
| 4.4% {71ms} FileReference>>entries
| 4.4% {71ms} FileSystem>>entriesAt:
| 4.4% {71ms} FileSystem>>entriesAt:do:
| 4.4% {71ms} FileSystem>>entriesAt:ifAbsent:do:
| 3.5% {57ms} MacStore(FileSystemStore)>>directoryAt:ifAbsent:nodesDo:
| 3.1% {51ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
| 2.0% {32ms} primitives
1.4% {22ms} ChrGUIMorph>>centralGUIform
1.4% {22ms} Form class>>fromFileNamed:
1.4% {22ms} Form class>>fromBinaryStream:
1.4% {22ms} ImageReadWriter class>>formFromStream:
1.4% {22ms} PNGReadWriter>>nextImage
1.2% {20ms} PNGReadWriter>>processIDATChunk
1.2% {20ms} PNGReadWriter>>processNonInterlaced
**Leaves**
16.4% {267ms} PNGReadWriter>>paethPredictLeft:above:aboveLeft:
15.1% {246ms} InputEventFetcher>>waitForInput
14.3% {232ms} PNGReadWriter>>filterPaeth:
9.9% {160ms} MacStore(DiskStore)>>basicEntry:path:nodesDo:
8.3% {134ms} SoundPlayer class>>playLoop
6.4% {104ms} ZLibReadStream(InflateStream)>>next
3.8% {61ms} Array(SequenceableCollection)>>=
3.1% {51ms} PNGReadWriter>>processNonInterlaced
3.1% {51ms} PNGReadWriter>>filterHorizontal:
2.8% {46ms} ZLibReadStream(InflateStream)>>bitPosition
2.2% {35ms} PNGReadWriter>>filterVertical:
1.7% {27ms} FreeTypeFace class>>fromFile:index:
1.6% {26ms} False>>ifTrue:ifFalse:
**Memory**
old +20,113,604 bytes
young +74,448 bytes
used +20,188,052 bytes
free +601,016 bytes
**GCs**
full 5 totalling 294ms (18.0% uptime), avg 59.0ms
incr 34 totalling 13ms (1.0% uptime), avg 0.0ms
tenures 4 (avg 8 GCs/tenure)
root table 0 overflows