Memoria e prestazioni di rendering
12 marzo 2026 ·Versione 0.3.4
Fog Panther v0.3.4 introduce una serie di ottimizzazioni interne che riducono drasticamente il consumo di memoria e migliorano le prestazioni di rendering, in particolare con documenti di grandi dimensioni e lunghe sessioni di modifica.
Cronologia degli annullamenti compressa
Il sistema di annullamento ora memorizza le istantanee dei tile come dati compressi con zstd anziché come copie complete non compresse. Ogni pennellata, riempimento o applicazione di filtro che in precedenza memorizzava buffer di tile grezzi da 16 KB ora li comprime al momento dell'acquisizione con zstd livello 1, che funziona a circa 500 MB/s.
Il risultato: da 3 a 10 volte meno memoria per ogni passaggio di annullamento, a seconda del contenuto dei tile. Il budget fisso di 256 MB per gli annullamenti, che in precedenza conteneva circa 80 pennellate significative, ora ne contiene di fatto da 250 a 800. Annulla e ripeti restano istantanei - la decompressione di un tile richiede circa 11 microsecondi.
Il formato FOG su disco usava già la compressione zstd, quindi i file salvati non cambiano. Viene modificata solo la rappresentazione in memoria.
Cache delle superfici di visualizzazione
I formati pixel diversi da RGBA8 - RGBA16, CMYKA, Scala di grigio - richiedono una conversione di formato per produrre la superficie Cairo ARGB32 usata per la visualizzazione a schermo. In precedenza, questa conversione veniva eseguita su ogni tile visibile a ogni fotogramma.
Ora i tile memorizzano nella cache la propria superficie di visualizzazione dopo la prima conversione. La cache viene invalidata automaticamente ogni volta che i dati del tile cambiano. Per un documento a 16 bit con 200 tile visibili, questo elimina 200 conversioni di formato per fotogramma durante lo spostamento della vista e lo zoom.
Riduzione proattiva della cache dei tile
In precedenza la cache dei tile attendeva di superare il proprio limite di memoria prima di rimuovere voci, causando brevi sforamenti di memoria. Ora inizia a ridursi al 90% della capacità e scende fino all'85%, creando una banda di isteresi che impedisce rimozioni ripetute all'inserimento successivo.
Cache del motivo a scacchiera
Il motivo a scacchiera della trasparenza - disegnato dietro ogni documento a ogni fotogramma - in precedenza veniva creato e distrutto a ogni passaggio di rendering. Ora viene creato una sola volta e riutilizzato per tutta la durata del processo.
Correzioni di bug
Questa versione include anche diverse correzioni emerse durante la revisione del lavoro di ottimizzazione:
- La cache di visualizzazione ora viene invalidata correttamente da tutte le funzioni che scrivono pixel, non solo dalla funzione di accesso ai dati grezzi
- La serializzazione della cronologia non scrive più una sequenza di byte di flag malformata quando un tile compresso si decomprime come vuoto
- Il ripristino delle operazioni di cancellazione ora ripristina correttamente i tile vuoti
- Il conteggio della memoria della cache dei tile ora è corretto quando si sostituisce un tile in cache con uno di formato pixel diverso
- L'inizializzazione del motivo a scacchiera è ora thread-safe