Anbei ein kleines Statusupdate zum TTF-Treiber.
Was ist in den letzten Monaten passiert?
Die vergangenen Monate standen ganz im Zeichen von Optimierungen, kleinen Refactorings und Korrekturen. Ziel war es die Stabilität, die Performance, den Speicherbedarf und auch die Binarysize des Treibers weiter zu verbessern.
Ein größeres Refactoring habe ich dabei schon länger vor mir her geschoben. Nun habe ich aber begonnen mich damit zu beschäftigen.
Worum geht es dabei?
Konkret geht es um den TTCache von FreeType. Für PC/GEOS haben wir im TTF-Treiber zwei eigene Cacheebenen implementiert. Eine davon ist nicht persistent, die andere persistent. Der TTCache von FreeType wird deshalb im Treiber nicht benötigt und auch nicht genutzt. Er belegt aber trotzdem unnötig Ressourcen.
Das Ziel des Refactorings ist es daher diesen TTCache aus dem Treiber auszubauen.
Wie so oft ist das Entfernen von Code aber nicht nur ein Entfernen von Code. Durch den Ausbau des TTCaches haben sich eine ganze Reihe weiterer Optimierungsmöglichkeiten ergeben. Diese möchte ich natürlich nicht ungenutzt lassen. Bis hier hat sich das auch schon deutlich gelohnt.
Ein paar Messwerte
Um das etwas greifbarer zu machen hier ein Vergleich mit dem Font Lister.
Gemessen habe ich auf meinem üblichen Testsetup: Intel i7 der 4. Generation unter Linux mit Basebox und 35000 Zyklen und nc target.
Treiber aus der aktuellen Alpha Version vom 15.05.26:
- Nimbus Sans: 316 ms
- Nimbus Mono: 300 ms
- Nimbus Roman: 350 ms
Treiber aus dem Branch ttf-driver-remove-ttcache:
- Nimbus Sans: 200 ms
- Nimbus Mono: 183 ms
- Nimbus Roman: 200 ms
Das ist natürlich nur ein einzelner Testfall und noch kein vollständiger Benchmark. Aber die Richtung ist schon recht erfreulich. Je nach Font liegt die Verbesserung hier grob bei 37% bis 43%.
Was ist noch passiert?
Im genannten Branch habe ich außerdem begonnen einige technische Schulden abzutragen. Ein Stichwort dazu ist Subbanding. Das ist eine der Stellen im Treiber, bei der schon länger klar war, dass sie irgendwann noch einmal etwas Aufmerksamkeit braucht.
Ganz durch bin ich mit dem Refactoring aber noch nicht. Das Handling der Profile möchte ich noch verbessern. Außerdem lohnt sich bei so umfangreichen Änderungen am Ende sicher noch einmal ein genauer Blick auf die Interresource-Calls.
Ich halte euch auf dem Laufenden....
Jirka