Comment DejaVu choisit ce qu’il garde
Une mémoire d’écran se juge à ce qu’elle ne garde pas. Voici comment DejaVu regarde votre écran, jusqu’à une fois toutes les deux secondes, et n’en retient que ce qui en vaut la peine — avec les frameworks d’Apple, sur votre Mac.
En bref
- Un seul flux ScreenCaptureKit, jamais de captures d’écran à répétition : on sait que des captures ponctuelles répétées peuvent faire saccader macOS.
- Quatre filtres peu coûteux décident si une image est gardée : les zones modifiées signalées par macOS, une empreinte de luminosité de 64 × 36, un détecteur d’animations et les changements de fenêtre.
- Les images gardées passent par l’encodeur HEVC matériel d’Apple et sont scellées une à une ; le texte n’est lu avec Vision que là où l’écran a changé, dans un processus auxiliaire isolé.
Rewind gardait une image toutes les deux secondes environ, et ses anciens utilisateurs nous l’ont confirmé : c’est le bon rythme. Assez souvent pour saisir le numéro de suivi qui n’a fait que passer, assez rarement pour rester léger. Le plus difficile, c’est tout ce qui se passe entre deux images. Un curseur qui clignote, une horloge qui tourne, une vidéo dans un coin : une mémoire naïve garderait tout, lirait tout, et remplirait votre disque de rien.
Voici comment DejaVu fait le tri, étape par étape.
Un seul flux, pas mille captures d’écran
DejaVu ouvre un unique flux ScreenCaptureKit et laisse macOS lui livrer une image au plus toutes les deux secondes. Il ne prend jamais de captures d’écran ponctuelles à répétition : des projets open source ont montré que ces captures répétées, surtout sur plusieurs écrans, peuvent figer l’interface de macOS pendant plusieurs secondes. Un flux unique et durable est aussi ce qui permet au système de nous dire ce qui a changé.
Quand votre Mac se met en veille, se verrouille ou que l’écran s’éteint, le flux s’arrête proprement et reprend quelques secondes après votre retour : attendre un instant évite une rafale de requêtes au moment précis où le système se réveille.
Quatre filtres, du moins coûteux au plus coûteux
Chaque image reçue passe quatre contrôles. Chacun coûte moins que ce qu’il économise, et la plupart des images ne franchissent jamais les deux premiers.
1. macOS a-t-il signalé un changement ?
ScreenCaptureKit joint à chaque image ses rectangles modifiés (dirty rectangles) : les zones que le serveur de fenêtres a redessinées depuis la précédente. DejaVu les additionne depuis la dernière image gardée. S’ils ne couvrent qu’une infime partie de l’écran — un clignement de curseur, l’horloge de la barre des menus — et que vous n’avez pas changé de fenêtre, l’image est écartée sur-le-champ.
2. L’image est-elle vraiment différente ?
Redessiné ne veut pas dire changé. Un indicateur d’activité qui revient à sa position, du bruit au niveau du sous-pixel, une surbrillance qui apparaît puis disparaît : macOS les signale, mais l’image reste la même. DejaVu lit donc une miniature de luminosité de 64 × 36 directement dans le plan de luminance de l’image — environ 37 000 octets lus, sans conversion des couleurs — et la compare case par case avec la dernière image gardée. Trop peu de cases ont bougé ? Écartée.
3. S’agit-il d’une vidéo ou d’une animation ?
Quand la même zone change d’une image à l’autre — une vidéo, une bannière animée —, garder chaque image serait coûteux et inutile. DejaVu repère le moment où la zone qui change recouvre presque entièrement la précédente, plusieurs fois de suite ; il ne garde alors cette zone que de temps en temps, et en lit le texte plus rarement encore.
4. Avez-vous changé d’app ou de fenêtre ?
Une nouvelle fenêtre compte toujours. Passer de Mail à Safari, c’est exactement le genre de moment auquel vous voudrez revenir : il échappe donc aux filtres précédents.
Encodage : HEVC matériel, scellé image par image
Une image gardée part vers VideoToolbox, le framework vidéo d’Apple, et elle est encodée en HEVC par le moteur multimédia dédié du Mac plutôt que par le processeur. Les réglages sont pensés pour des écrans : qualité constante, une image clé toutes les 30 images, aucun réordonnancement des images, et des segments de 10 minutes.
Chaque image encodée est ensuite chiffrée séparément, en AES-GCM, avec une clé propre à son segment, avant que quoi que ce soit n’atteigne le disque. Rien n’est jamais écrit en clair, même temporairement — et comme chaque image se suffit à elle-même, les dernières minutes sont consultables immédiatement.
Le texte : lu seulement là où l’écran a changé
Lire du texte est l’opération la plus coûteuse d’une mémoire d’écran ; dans les mesures de notre prototype, c’était de loin la plus grosse part du coût de DejaVu. DejaVu en lit donc le moins possible :
- Seulement les zones qui ont changé. Les rectangles modifiés de l’étape 1 sont regroupés en tuiles, et seules ces tuiles sont confiées à Vision, le framework de reconnaissance de texte d’Apple. Une lecture de tout l’écran a lieu lors des changements de fenêtre, quand la majeure partie de l’écran a changé, et de temps à autre par précaution.
- Par tuiles de quelques milliers de pixels de large. Nous avons constaté que Vision ne lit presque rien sur une image 4K entière d’un seul coup ; le découpage en tuiles lui permet de tout lire.
- Dans un processus auxiliaire isolé. La reconnaissance de texte tourne dans un service XPC séparé, en bac à sable, sans état propre. S’il se comporte mal ou consomme trop de mémoire, il est relancé sans toucher au reste de DejaVu.
- En ménageant la batterie. Sur batterie, quand le Mac chauffe ou en mode Économie d’énergie, les demandes de lecture du texte sont espacées et les changements sont lus ensemble sur l’image la plus récente. Les images, elles, sont toujours gardées au bon moment ; leur texte arrive quelques secondes plus tard.
Dans l’édition directe, DejaVu peut aussi lire le texte directement dans les fenêtres grâce à l’Accessibilité, ce qui est exact et peu coûteux. Rien n’est gardé pendant que vous tapez un mot de passe : DejaVu se met en pause dès que macOS signale une saisie sécurisée au clavier.
La recherche : une petite base de données par jour
Le texte, les titres de fenêtre et les horodatages vont dans SQLite avec FTS5, un index plein texte — une base de données chiffrée par jour. Dans notre prototype, une recherche par mot-clé répondait en moins d’une milliseconde par jour. Séparer les jours rend aussi la suppression bien réelle : quand un jour disparaît, sa clé est détruite avec lui.
Ce que nous ne faisons pas
- Jamais d’audio. Le flux est créé sans audio.
- Jamais de frappes. DejaVu n’écoute jamais le clavier.
- Jamais de cloud. Chacune des étapes ci-dessus se déroule sur votre Mac.
La suite
Nous publierons avant le lancement des mesures d’autonomie et d’espace disque relevées sur un MacBook Air — pas avant. En attendant, si vous voulez une idée approximative de la place qu’occupe une mémoire d’écran, quelle qu’elle soit, essayez notre estimateur d’espace disque : il ne cache rien de ses hypothèses.
Questions
À quelle fréquence DejaVu regarde-t-il l’écran ?
Au plus une image toutes les deux secondes — le rythme que demandaient les anciens utilisateurs de Rewind — et seulement quand quelque chose a réellement changé à l’écran.
DejaVu utilise-t-il Texte en direct d’Apple ?
Il utilise Vision, le framework sur lequel repose Texte en direct, pour lire le texte sur votre Mac. Dans l’édition directe, il peut aussi lire le texte directement dans les fenêtres grâce à l’Accessibilité, ce qui est plus rapide et plus exact.
Publierez-vous des chiffres d’autonomie et d’espace disque ?
Oui, mesurés sur un MacBook Air avant le lancement. D’ici là, nous ne citerons aucun chiffre.