Retour aux communiqués de presse

Performances de la mémoire et du rendu

12 mars 2026 ·Version 0.3.4

Fog Panther v0.3.4 apporte une série d'optimisations internes qui réduisent considérablement la consommation de mémoire et améliorent les performances de rendu, en particulier pour les grands documents et les longues sessions d'édition.

Historique d'annulation compressé

Le système d'annulation stocke désormais les instantanés de tuiles sous forme de données compressées avec zstd au lieu de copies complètes non compressées. Chaque coup de pinceau, remplissage ou application de filtre qui stockait auparavant des tampons de tuiles bruts de 16 Ko les compresse maintenant au moment de la capture avec zstd au niveau 1, qui fonctionne à environ 500 Mo/s.

Résultat : 3 à 10 fois moins de mémoire par étape d'annulation, selon le contenu des tuiles. Le budget d'annulation fixe de 256 Mo, qui contenait auparavant environ 80 coups de pinceau importants, en contient désormais effectivement de 250 à 800. L'annulation et le rétablissement restent instantanés - la décompression d'une tuile prend environ 11 microsecondes.

Le format FOG sur disque utilisait déjà la compression zstd, les fichiers enregistrés ne changent donc pas. Seule la représentation en mémoire est concernée.

Mise en cache des surfaces d'affichage

Les formats de pixels autres que RGBA8 - RGBA16, CMYKA, niveaux de gris - nécessitent une conversion de format pour produire la surface Cairo ARGB32 utilisée pour l'affichage à l'écran. Auparavant, cette conversion était exécutée sur chaque tuile visible à chaque image.

Les tuiles mettent désormais en cache leur surface d'affichage après la première conversion. Le cache est invalidé automatiquement dès que les données de la tuile changent. Pour un document 16 bits comportant 200 tuiles visibles, cela supprime 200 conversions de format par image lors du défilement et du zoom.

Réduction proactive du cache de tuiles

Le cache de tuiles attendait auparavant d'avoir dépassé sa limite de mémoire avant d'évincer des entrées, ce qui provoquait un bref dépassement de mémoire. Il commence désormais à se réduire à 90 % de sa capacité et redescend jusqu'à 85 %, créant une bande d'hystérésis qui évite des évictions répétées à l'insertion suivante.

Mise en cache du motif en damier

Le motif en damier de la transparence - dessiné derrière chaque document à chaque image - était auparavant créé et détruit à chaque passe de rendu. Il est désormais créé une seule fois et réutilisé pendant toute la durée de vie du processus.

Corrections de bugs

Cette version inclut également plusieurs corrections découvertes lors de la relecture du travail d'optimisation :

  • Le cache d'affichage est désormais correctement invalidé par toutes les fonctions qui écrivent des pixels, et pas seulement par l'accesseur aux données brutes
  • La sérialisation de l'historique n'écrit plus de séquence d'octets d'indicateur malformée lorsqu'une tuile compressée se décompresse en tuile vide
  • Le rétablissement des opérations d'effacement restaure désormais correctement les tuiles vides
  • La comptabilisation de la mémoire du cache de tuiles est désormais correcte lors du remplacement d'une tuile en cache par une tuile d'un autre format de pixels
  • L'initialisation du motif en damier est désormais thread-safe