Speicherverbrauch und Rendering-Leistung
12. März 2026 ·Version 0.3.4
Fog Panther v0.3.4 enthält eine Reihe interner Optimierungen, die den Speicherverbrauch drastisch senken und die Rendering-Leistung verbessern, insbesondere bei großen Dokumenten und langen Bearbeitungssitzungen.
Komprimiertes Protokoll
Das Rückgängig-System speichert Kachel-Snapshots jetzt als zstd-komprimierte Daten statt als vollständige, unkomprimierte Kopien. Jeder Pinselstrich, jede Füllung und jede Filteranwendung, die bisher rohe 16-KB-Kachelpuffer speicherte, komprimiert diese nun bereits beim Erfassen mit zstd-Stufe 1, die mit etwa 500 MB/s arbeitet.
Das Ergebnis: 3- bis 10-mal weniger Speicher pro Rückgängig-Schritt, je nach Kachelinhalt. Das feste Rückgängig-Budget von 256 MB, das bisher etwa 80 umfangreiche Pinselstriche fasste, fasst nun effektiv 250 bis 800. Rückgängig und Wiederholen erfolgen weiterhin ohne Verzögerung - das Dekomprimieren einer Kachel dauert etwa 11 Mikrosekunden.
Das FOG-Format auf der Festplatte nutzte bereits zstd-Komprimierung, daher bleiben gespeicherte Dateien unverändert. Betroffen ist nur die Darstellung im Arbeitsspeicher.
Zwischenspeicherung der Anzeigeoberflächen
Pixelformate außer RGBA8 - RGBA16, CMYKA, Graustufen - erfordern eine Formatkonvertierung, um die Cairo-ARGB32-Oberfläche für die Bildschirmanzeige zu erzeugen. Bisher lief diese Konvertierung für jede sichtbare Kachel in jedem Frame.
Kacheln speichern ihre Anzeigeoberfläche jetzt nach der ersten Konvertierung zwischen. Der Zwischenspeicher wird automatisch ungültig, sobald sich die Kacheldaten ändern. Bei einem 16-Bit-Dokument mit 200 sichtbaren Kacheln entfallen so beim Verschieben und Zoomen 200 Formatkonvertierungen pro Frame.
Vorausschauendes Bereinigen des Kachel-Caches
Der Kachel-Cache wartete bisher, bis er sein Speicherlimit überschritten hatte, bevor er Einträge entfernte, was kurzzeitig zu überhöhtem Speicherverbrauch führte. Jetzt beginnt er bei 90 % Auslastung mit dem Bereinigen und reduziert auf 85 %. So entsteht ein Hystereseband, das wiederholtes Entfernen beim nächsten Einfügen verhindert.
Zwischenspeicherung des Schachbrettmusters
Das Schachbrettmuster für Transparenz - das in jedem Frame hinter jedem Dokument gezeichnet wird - wurde bisher bei jedem Rendering-Durchlauf erstellt und wieder verworfen. Jetzt wird es einmal erstellt und während der gesamten Laufzeit des Prozesses wiederverwendet.
Fehlerbehebungen
Diese Version enthält außerdem mehrere Korrekturen, die bei der Überprüfung der Optimierungsarbeiten entdeckt wurden:
- Der Anzeige-Cache wird jetzt von allen Funktionen, die Pixel schreiben, korrekt ungültig gemacht, nicht nur vom Zugriff auf die Rohdaten
- Die Serialisierung des Protokolls schreibt keine fehlerhafte Flag-Bytefolge mehr, wenn eine komprimierte Kachel zu einer leeren Kachel dekomprimiert wird
- Das Wiederholen von Radiervorgängen stellt leere Kacheln jetzt korrekt wieder her
- Die Speicherabrechnung des Kachel-Caches ist jetzt korrekt, wenn eine zwischengespeicherte Kachel durch eine Kachel mit einem anderen Pixelformat ersetzt wird
- Die Initialisierung des Schachbrettmusters ist jetzt threadsicher