LockTime

笔记

读一块屏幕,而不拖慢它

捕捉、识别、加密、建索引——大约三分之一秒,大约一个核心的百分之一。让它做到这一步的三个决定。

一条细线横穿一片浅色的场,几乎是平的。

屏幕历史的代价是每个间隔都要付的,一直付下去,在后台,在你正想做别的事的时候。所以它必须能被四舍五入成零。用 ScreenCaptureKit 捕捉一帧、用 Vision 读出文字、加密、写入、建索引,大约花三分之一秒,占单个核心大约百分之一。

最便宜的活是没干的活

这份预算大部分从来没被花掉,因为多数间隔停在变化检查那一步:一次与前一帧的比较,几乎不花什么,然后判定这里没有值得留下的东西。这项检查怎么工作,是另一篇笔记。

同一段文字不读第二遍

文字识别是最贵的一步。当一帧和前一帧接近到它的字不可能变过时,LockTime 会把上一次的文字顺延下来,而不是再跑一次 Vision。读一块屏幕大约要 70 毫秒。复用已经读到的,大约 1 毫秒。

界面不等资料库

从两万张截图的资料库里列出一天,大约 1 毫秒。给一整天按秒记录的时刻条排版——86,400 个时刻——要 5.4 毫秒,稳稳落在一个 16 毫秒的帧里。无论资料库装的是一周还是一年,窗口都保持在屏幕的刷新率上。

一个版本,两种机器

LockTime 从头到尾用 Swift 和 SwiftUI 写成,以一个通用版本同时发给 Apple 芯片和 Intel。这个约束是有牙齿的。可选的含义搜索把嵌入向量存成 16 位浮点数,而在 Swift 里写它们最顺手的方式叫 Float16——它只在 arm64 上存在。这样写出来的应用,在 Apple 芯片的 Mac 上能编译、能通过测试,却根本无法为 Intel 构建。于是存储改用 vImage 写 IEEE binary16,并由一个测试把字节布局钉住,让它保持如此。

这些都看不见,而这正是重点。你不该察觉到它正在运行。

全部笔记
下载 0.1.6 · 6.6 MB macOS 14 或更高版本 · Apple 芯片与 Intel · 早期阶段免费。