Memoria y rendimiento de renderizado
12 de marzo de 2026 ·Versión 0.3.4
Fog Panther v0.3.4 incluye un conjunto de optimizaciones internas que reducen drásticamente el consumo de memoria y mejoran el rendimiento de renderizado, sobre todo en documentos grandes y sesiones de edición largas.
Historial de deshacer comprimido
El sistema de deshacer almacena ahora las instantáneas de mosaicos como datos comprimidos con zstd en lugar de copias completas sin comprimir. Cada pincelada, relleno o aplicación de filtro que antes almacenaba búferes de mosaico sin procesar de 16 KB ahora los comprime en el momento de la captura con zstd de nivel 1, que funciona a unos 500 MB/s.
El resultado: entre 3 y 10 veces menos memoria por paso de deshacer, según el contenido del mosaico. El presupuesto fijo de deshacer de 256 MB, que antes admitía unas 80 pinceladas significativas, ahora admite en la práctica entre 250 y 800. Deshacer y rehacer siguen siendo instantáneos - descomprimir un mosaico tarda aproximadamente 11 microsegundos.
El formato FOG en disco ya utilizaba compresión zstd, por lo que los archivos guardados no cambian. Solo se ve afectada la representación en memoria.
Caché de superficies de visualización
Los formatos de píxel distintos de RGBA8 - RGBA16, CMYKA, escala de grises - requieren una conversión de formato para generar la superficie Cairo ARGB32 que se usa para mostrar en pantalla. Antes, esta conversión se ejecutaba en cada mosaico visible en cada fotograma.
Ahora los mosaicos almacenan en caché su superficie de visualización tras la primera conversión. La caché se invalida automáticamente cada vez que cambian los datos del mosaico. En un documento de 16 bits con 200 mosaicos visibles, esto elimina 200 conversiones de formato por fotograma durante el desplazamiento y el zoom.
Recorte proactivo de la caché de mosaicos
Antes, la caché de mosaicos esperaba a superar su límite de memoria para expulsar entradas, lo que provocaba breves excesos de memoria. Ahora empieza a recortar al 90 % de su capacidad y reduce hasta el 85 %, creando una banda de histéresis que evita expulsiones repetidas en la siguiente inserción.
Caché del patrón de tablero de ajedrez
El patrón de tablero de ajedrez de la transparencia - que se dibuja detrás de cada documento en cada fotograma - antes se creaba y se destruía en cada pasada de renderizado. Ahora se crea una sola vez y se reutiliza durante toda la vida del proceso.
Correcciones de errores
Esta versión también incluye varias correcciones descubiertas durante la revisión del trabajo de optimización:
- La caché de visualización se invalida ahora correctamente desde todas las funciones que escriben píxeles, no solo desde el descriptor de acceso a los datos sin procesar
- La serialización del historial ya no escribe una secuencia de bytes de indicador mal formada cuando un mosaico comprimido se descomprime como vacío
- Rehacer operaciones de borrado restaura ahora correctamente los mosaicos vacíos
- La contabilidad de memoria de la caché de mosaicos es ahora correcta al sustituir un mosaico en caché por otro con un formato de píxel distinto
- La inicialización del patrón de tablero de ajedrez es ahora segura para subprocesos