Marcel Taeumel uploaded a new version of Graphics to project The Trunk: http://source.squeak.org/trunk/Graphics-mt.486.mcz
==================== Summary ====================
Name: Graphics-mt.486 Author: mt Time: 21 February 2022, 5:06:38.314875 pm UUID: f5395b09-31fa-994e-b227-0dc8166d79d7 Ancestors: Graphics-mt.485
Updates commentary around primitive 103 and its issues with TTCFont.
Thanks to Tony (tonyg) for the pointer!
=============== Diff against Graphics-mt.485 ===============
Item was changed: ----- Method: CharacterScanner>>primScanCharactersFrom:to:in:rightX:stopConditions:kern: (in category 'scanning') ----- primScanCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX stopConditions: stops kern: kernDelta + "Primitive. This is the inner loop of text display--but see #scanCharactersFrom:to:in:rightX: which would get the string, stopConditions and displaying from the instance. March through sourceString from startIndex to stopIndex. If any character is flagged with a non-nil entry in stops, then return the corresponding value. Determine width of each character from xTable, indexed by map. If destX would exceed rightX, then return stops at: 258. Advance destX by the width of the character. If stopIndex has been reached, then return stops at: 257. + + Optional. See Object documentation whatIsAPrimitive. + + NOTE THAT this primitive does only work for our legacy StrikeFont because #setActualFont: needs #xTable and #characterToGlyphMap, which are both not available for TTCFont this way and thus we end up calling #widthOf: manually on the font." + - "Primitive. This is the inner loop of text display--but see - scanCharactersFrom: to:rightX: which would get the string, - stopConditions and displaying from the instance. March through source - String from startIndex to stopIndex. If any character is flagged with a - non-nil entry in stops, then return the corresponding value. Determine - width of each character from xTable, indexed by map. - If dextX would exceed rightX, then return stops at: 258. - Advance destX by the width of the character. If stopIndex has been - reached, then return stops at: 257. Optional. - See Object documentation whatIsAPrimitive. - Historical note: this primitive has been unusable since about Squeak 2.8 when the shape of the CharracterScanner class changed. It is left here as a reminder that the actual primitive still needs supporting in the VM to keep old images such as Scratch1.4 alive - tpr" <primitive: 103> + ^self basicScanByteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX + + "Here are some sketchy benchmarks to illustrate the performance issue regarding the use of TrueType fonts: + + 1) TTCFont only; with primitive fail + '1,160 per second. 865 microseconds per run. 0.44 % GC time.' + + 2) TTCFont only; without primitive fail + '5,730 per second. 175 microseconds per run. 6.12 % GC time.' + + 3) StrikeFont only; using primitive 103 + '29,700 per second. 33.6 microseconds per run. 1.11978 % GC time.' + + 4) StrikeFont only; without primitive 103 + '13,900 per second. 71.7 microseconds per run. 1.17976 % GC time.' + + "! - ^self basicScanByteCharactersFrom: startIndex to: stopIndex in: sourceString rightX: rightX !
packages@lists.squeakfoundation.org