LockTime

Notas

Ler uma tela sem deixá-la mais lenta

Capturar, ler, criptografar, indexar — cerca de um terço de segundo, cerca de um por cento de um núcleo. Três decisões que levaram a isso.

Uma única linha fina atravessando um campo claro, quase plana.

O custo de um histórico de tela é pago a cada intervalo, para sempre, em segundo plano, enquanto você tenta fazer outra coisa. Por isso, ele precisa ser praticamente nulo. Capturar um quadro com o ScreenCaptureKit, ler o texto dele com o Vision, criptografá-lo, gravá-lo e indexá-lo leva cerca de um terço de segundo e cerca de um por cento de um único núcleo.

O trabalho mais barato é o que não se faz

A maior parte desse orçamento nunca é gasta, porque a maioria dos intervalos termina na verificação de mudança — uma comparação com o quadro anterior que custa quase nada e conclui que não há nada ali que valha a pena guardar. Como essa verificação funciona é assunto de outra nota.

O mesmo texto não é lido duas vezes

O reconhecimento de texto é a etapa cara. Quando um quadro é parecido o bastante com o anterior para que as palavras dele não possam ter mudado, o LockTime reaproveita o texto anterior em vez de rodar o Vision de novo. Ler uma tela leva cerca de 70 ms. Reaproveitar o que já foi lido leva cerca de 1 ms.

A interface não espera pela biblioteca

Listar um dia de uma biblioteca de 20.000 capturas de tela leva cerca de 1 milissegundo. Montar a faixa de momentos de um dia inteiro gravado uma vez por segundo — 86.400 deles — leva 5,4 ms, folgadamente dentro de um único quadro de 16 ms. A janela acompanha a taxa de quadros da tela, quer a biblioteca guarde uma semana, quer um ano.

Uma única versão para as duas arquiteturas

O LockTime é Swift e SwiftUI de ponta a ponta, distribuído como uma única versão universal para Apple Silicon e Intel. Essa restrição tem consequências. A busca semântica opcional armazena os embeddings como números de ponto flutuante de 16 bits, e o jeito óbvio de escrevê-los em Swift é Float16 — que só existe em arm64. Escrito assim, o app compila e passa nos testes em um Mac com Apple Silicon e simplesmente não pode ser compilado para Intel. Em vez disso, o armazenamento grava IEEE binary16 pelo vImage, e um teste fixa o layout dos bytes para que continue assim.

Nada disso é visível, e essa é a ideia. Você não deveria nem perceber que ele está rodando.

Todas as notas
Na Mac App Store macOS 14 ou posterior · Apple Silicon e Intel