Cómo decide DejaVu qué guardar

Una memoria de pantalla vive o muere por lo que no guarda. Así mira DejaVu tu pantalla, como mucho una vez cada dos segundos, y se queda solo con lo que merece la pena recordar, con los frameworks de Apple y en tu Mac.

Por el equipo de DejaVuPublicado el 19 de octubre de 20265 min de lectura

En resumen

  • Un único flujo de ScreenCaptureKit, nunca capturas repetidas: encadenar capturas puntuales es una causa conocida de tirones en macOS.
  • Cuatro filtros baratos deciden si se guarda un fotograma: las regiones de cambio de macOS, una huella de brillo de 64×36, un detector de animaciones y los cambios de ventana.
  • Los fotogramas guardados van al codificador HEVC por hardware de Apple, sellados uno a uno; el texto se lee con Vision solo donde cambió la pantalla, en un proceso auxiliar aislado.

Rewind guardaba un fotograma cada dos segundos, más o menos, y sus antiguos usuarios nos dijeron que ese era el ritmo adecuado: lo bastante a menudo para no perderse el número de seguimiento que apareció un instante, y lo bastante poco para seguir siendo ligero. Lo difícil es todo lo que ocurre entre dos fotogramas. Un cursor que parpadea, un reloj que avanza, un vídeo en una esquina: una memoria ingenua lo guardaría todo, lo leería todo y llenaría tu disco de nada.

Así es como decide DejaVu, paso a paso.

Un flujo, no mil capturas de pantalla

DejaVu abre un único flujo de ScreenCaptureKit y deja que macOS le entregue fotogramas, como mucho, cada dos segundos. Nunca hace capturas puntuales repetidas: varios proyectos de código abierto han documentado que las capturas repetidas, sobre todo con varias pantallas, pueden congelar la interfaz de macOS durante segundos. Un flujo de larga duración es, además, lo que permite al sistema decirnos qué ha cambiado.

Cuando tu Mac entra en reposo, se bloquea o se apaga la pantalla, el flujo se detiene limpiamente y vuelve a arrancar unos segundos después de que vuelvas: esperar un momento evita una avalancha de solicitudes justo cuando el sistema se despierta.

Cuatro filtros, del más barato al más caro

Cada fotograma que llega pasa por cuatro comprobaciones. Cada una cuesta menos de lo que ahorra, y la mayoría de los fotogramas no pasan de las dos primeras.

1. ¿Ha dicho macOS que algo cambió?

ScreenCaptureKit adjunta a cada fotograma unos rectángulos sucios (dirty rectangles): las regiones que el servidor de ventanas ha vuelto a dibujar desde el anterior. DejaVu los suma desde el último fotograma que guardó. Si solo cubren una franja mínima de la pantalla —el parpadeo de un cursor, el reloj de la barra de menús— y no has cambiado de ventana, el fotograma se descarta ahí mismo.

2. ¿Se ve realmente distinto?

Redibujado no significa cambiado. Un indicador de carga que vuelve a donde estaba, ruido por debajo del píxel, un resaltado que aparece y desaparece: macOS los notifica, pero la imagen es la misma. Así que DejaVu lee una miniatura de brillo de 64 × 36 directamente del plano de luminancia del fotograma —unas 37.000 lecturas de bytes, sin conversión de color— y la compara celda a celda con el último fotograma guardado. ¿Se han movido muy pocas celdas? Descartado.

3. ¿Es un vídeo o una animación?

Cuando la misma zona cambia fotograma tras fotograma —un vídeo, un banner animado—, guardar cada fotograma sería caro e inútil. DejaVu detecta cuándo la región que cambia se solapa casi por completo con la anterior, varias veces seguidas, y entonces guarda esa zona solo de vez en cuando, y lee su texto con menos frecuencia todavía.

4. ¿Has cambiado de app o de ventana?

Una ventana nueva siempre cuenta. Pasar de Mail a Safari es justo el tipo de momento al que querrás volver, así que se salta los filtros anteriores.

Codificación: HEVC por hardware, sellado fotograma a fotograma

Un fotograma guardado va a VideoToolbox, el framework de vídeo de Apple, y lo codifica en HEVC el motor multimedia dedicado del Mac, no la CPU. Los ajustes están pensados para pantallas: calidad constante, un fotograma clave cada 30, sin reordenación de fotogramas y segmentos de 10 minutos.

Después, cada fotograma codificado se cifra por separado, con AES-GCM y una clave propia de su segmento, antes de que nada toque el disco. Nunca se escribe nada en claro, ni siquiera de forma temporal, y como cada fotograma es independiente, los últimos minutos se pueden ver al instante.

Texto: leído solo donde cambió la pantalla

Leer texto es lo más costoso que hace una memoria de pantalla; en las mediciones de nuestro prototipo fue, con diferencia, la mayor parte del coste de DejaVu. Así que DejaVu lee lo menos posible:

  • Solo las regiones que cambiaron. Los rectángulos sucios del paso 1 se agrupan en mosaicos, y solo esos mosaicos van a Vision, el framework de reconocimiento de texto de Apple. La pantalla completa se lee al cambiar de ventana, cuando ha cambiado casi toda la pantalla y, de vez en cuando, como red de seguridad.
  • En mosaicos de unos pocos miles de píxeles de ancho. Comprobamos que Vision apenas lee nada en un fotograma 4K completo de una vez; con mosaicos, lo lee todo.
  • En un proceso auxiliar aislado. El reconocimiento de texto se ejecuta en un servicio XPC aparte, dentro de un entorno aislado (sandbox) y sin estado propio. Si falla o consume demasiada RAM, se reinicia sin tocar el resto de DejaVu.
  • Con cuidado de la batería. Con batería, cuando el Mac se calienta o en Modo de bajo consumo, las solicitudes de texto se espacian y los cambios se leen juntos sobre la imagen más reciente. Las imágenes se siguen guardando a su hora; su texto llega unos segundos después.

En la edición directa, DejaVu también puede leer el texto directamente de las ventanas a través de Accesibilidad, lo que es exacto y barato. No se guarda nada mientras escribes una contraseña: DejaVu se pausa siempre que macOS indica que está activa la entrada de teclado segura.

Búsqueda: una pequeña base de datos por día

El texto, los títulos de ventana y las marcas de tiempo van a SQLite con FTS5, un índice de texto completo: una base de datos cifrada por día. En nuestro prototipo, una búsqueda por palabra clave respondía en menos de un milisegundo por día. Separar los días también hace que borrar sea real: cuando un día desaparece, su clave se destruye con él.

Lo que no hacemos

  • Nada de audio, nunca. El flujo se crea sin audio.
  • Nada de pulsaciones. DejaVu nunca escucha el teclado.
  • Nada de nube. Todos los pasos anteriores se ejecutan en tu Mac.

Lo que viene

Publicaremos cifras medidas de batería y de disco en un MacBook Air antes del lanzamiento, no antes. Mientras tanto, si quieres hacerte una idea aproximada de lo que ocupa en disco cualquier memoria de pantalla, prueba nuestra calculadora de espacio en disco; es transparente con sus supuestos.

Preguntas

¿Cada cuánto mira DejaVu la pantalla?

Como mucho, un fotograma cada dos segundos —el ritmo que pedían los antiguos usuarios de Rewind—, y solo cuando algo ha cambiado de verdad en la pantalla.

¿DejaVu usa Texto en vivo de Apple?

Usa Vision, el framework en el que se basa Texto en vivo, para leer el texto en tu Mac. En la edición directa también puede leer el texto directamente de las ventanas a través de Accesibilidad, lo que es más rápido y más exacto.

¿Habrá cifras de batería y de disco?

Sí, medidas en un MacBook Air antes del lanzamiento. Hasta entonces no daremos cifras.