Ely Office: six offline-first desktop apps in Rust and GPUI
ElyDoc, ElyTable, ElyShow (LibreOfficeKit), ElyPDF (MuPDF), ElyTree (Git), ElyMark (Milkdown and CodeMirror in CEF). ElyMail and ElyAgent follow.
This commit is contained in:
817 files changed
+143101
No files matched your search
@@ -0,0 +1,63 @@
|
||||
# Benchmark 2026-10-08
|
||||
|
||||
Format: docs/perf/README.md.
|
||||
|
||||
```json
|
||||
{
|
||||
"date": "2026-10-08",
|
||||
"machine": "Mac16,10",
|
||||
"cpu": "Apple M4",
|
||||
"cores": "10",
|
||||
"memory_gb": 24,
|
||||
"gpu": "Apple M4",
|
||||
"system": "macOS 27.0",
|
||||
"fonts": 372,
|
||||
"builds": {
|
||||
"ely-doc": "bd36fee608ebe0ee",
|
||||
"ely-table": "4461b4f741a8ae9e",
|
||||
"ely-show": "8650ed752d6080f1",
|
||||
"ely-pdf": "af9f8ba1cb599b0e",
|
||||
"ely-tree": "7cd55cb147481e01",
|
||||
"ely-mark": "ef45e8053a0ed8fb"
|
||||
},
|
||||
"samples": {
|
||||
"doc.docx": "5ab234c7fcc6b84242e3318a83849cd1078269bcaba0a6160efbf447e865c426",
|
||||
"sheet.xlsx": "356ca8e1c6985257040d205c5c72bbc66c9acc0afb76ec26fba7d6a1566f21a1",
|
||||
"pages.pdf": "d9852531dbbd3699642398c2b454246a361c92ddad5f7dc7483af371f9ce40cb",
|
||||
"notes.md": "2c21622c0242e5460d0df3e6a0b7497a6a2100a4e10363e095519b8f9256bdb3",
|
||||
"repo": "1ad0662eea314739d0b85ae5ae9258620d271c75"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
| PERF | Case | Runs | P50 ms | P95 ms | Target ms | Total memory MB |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| PERF-01 | ely-doc first run | 1 | 192 | 192 ✓ | 3000 | |
|
||||
| PERF-01 | ely-doc daily start | 30 | 132 | 150 ✓ | 3000 | |
|
||||
| PERF-01 | ely-table first run | 1 | 181 | 181 ✓ | 3000 | |
|
||||
| PERF-01 | ely-table daily start | 30 | 127 | 138 ✓ | 3000 | |
|
||||
| PERF-01 | ely-show first run | 1 | 161 | 161 ✓ | 3000 | |
|
||||
| PERF-01 | ely-show daily start | 30 | 126 | 135 ✓ | 3000 | |
|
||||
| PERF-01 | ely-pdf first run | 1 | 171 | 171 ✓ | 3000 | |
|
||||
| PERF-01 | ely-pdf daily start | 30 | 129 | 133 ✓ | 3000 | |
|
||||
| PERF-01 | ely-tree first run | 1 | 173 | 173 ✓ | 3000 | |
|
||||
| PERF-01 | ely-tree daily start | 30 | 132 | 136 ✓ | 3000 | |
|
||||
| PERF-01 | ely-mark first run | 1 | 491 | 491 ✓ | 3000 | |
|
||||
| PERF-01 | ely-mark daily start | 30 | 205 | 213 ✓ | 3000 | |
|
||||
| PERF-01 | ely-doc blank document ready | 30 | 992 | 1020 ✓ | 3000 | |
|
||||
| PERF-01 | ely-table blank document ready | 30 | 1057 | 1087 ✓ | 3000 | |
|
||||
| PERF-01 | ely-show blank document ready | 30 | 1183 | 1229 ✓ | 3000 | |
|
||||
| PERF-02 | ElyDoc key to new tile | 30 | 2 | 5 ✓ | 100 | |
|
||||
| PERF-02 | main thread busy >100 ms: 0 times | 1 | 0 | 0 | 100 | |
|
||||
| PERF-03 | ElyDoc doc.docx | 30 | 1260 | 1293 ✓ | 5000 | 412 |
|
||||
| PERF-04 | ElyTable sheet.xlsx | 30 | 1260 | 1286 ✓ | 5000 | 381 |
|
||||
| PERF-05 | ElyPDF pages.pdf | 30 | 209 | 223 ✓ | 3000 | 111 |
|
||||
| PERF-07 | ElyMark notes.md | 30 | 1702 | 1725 ✓ | 2000 | 1095 |
|
||||
| PERF-06 | ElyTree history, press to first screen | 30 | 381 | 402 ✓ | 1000 | |
|
||||
| PERF-06 | ElyTree query 'part 42', first results | 30 | 463 | 476 ✓ | 1000 | |
|
||||
|
||||
PERF-08, ElyDoc opening and closing a document 40 times (total memory MB, open files):
|
||||
|
||||
457/564 458/564 458/564 458/564 458/564 460/564 460/564 461/564 462/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 454/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564 455/564
|
||||
|
||||
PERF-09 (Agent sessions) belongs to the second release.
|
||||
@@ -0,0 +1,17 @@
|
||||
# 性能记录
|
||||
|
||||
`tests/perf/bench.py` 在发行构建上测 PERF-01 至 PERF-08,每项默认 30 次,记 P50 与 P95,写成本目录下的 `<日期>-<机型>.md`。
|
||||
|
||||
样本由 `tests/perf/samples.py` 按固定种子生成,放在 `engines/bench`(不入库),记录里写每个样本的 SHA-256(仓库写 HEAD):
|
||||
|
||||
| 样本 | 内容 | 用于 |
|
||||
| --- | --- | --- |
|
||||
| doc.docx | 100 页,20 张图片,约 9 MB | PERF-03 |
|
||||
| sheet.xlsx | 10 万个数值,1 万个 `SUM` 公式 | PERF-04(载入即重算,重算计在打开之内) |
|
||||
| pages.pdf | 1000 页,每页一张图,约 200 MB | PERF-05 |
|
||||
| repo | 10 万个提交 | PERF-06 |
|
||||
| notes.md | 1 MB | PERF-07 |
|
||||
|
||||
计时从启动进程起,到日志里出现标记为止(脚本每 10 毫秒读一次日志):PERF-01 到首帧(`ELY_SMOKE=1` 打印 `ready`),首次运行(新的用户目录)与日常启动分记,每次等上一次的进程(含仍在启动的内核)退出后再测;Doc、Table、Show 另记空白文档就绪(`opened Untitled`),它要等内核启动;PERF-03、04 到视图收下的第一块图块(`lok: tile (x, y) shown`;其间有图块画失败即整次作废),PERF-03 之前先核对样本经内核排版恰为 100 页(`lok: 100 pages`);PERF-05 到第一页的第一块(`pdf: a tile of page 0 drawn`);PERF-06 的历史首屏从按下“历史”到显示(`history shows`),查询从按下回车到结果(`searched true`),性能要求的指标是后者;PERF-07 到可视编辑器显示(`mark: shown as visual`)。PERF-02 为 ElyDoc 每次按键到显示该编辑的图块(`lok: edit to tile`,每键须各有一条,缺即失败),并以 `ELY_STALLS=1` 记下主线程连续忙于 100 毫秒以上的次数(`main thread was busy`)。内存为应用及其全部子进程(内核 worker、CEF 辅助进程)的 RSS 之和。PERF-08 为 ElyDoc 新建再关闭文档 40 次:循环前记下基线(总内存、打开的文件数、内核中的文档数 `lok-worker: N documents open`),每次关闭后等内核回到基线文档数再记三者;最后的文档数不等于基线、或文件数不等于第一次之后的即失败(第一次打开模板对话框时,进程一次性载入两个系统字体与 AppKit 的两个本地化表,此后不再增加)。
|
||||
|
||||
记录开头的 JSON 写机型、CPU、核数、内存、GPU、系统、系统字体文件数、各应用发行二进制的散列与样本散列。冷启动未清系统文件缓存(需要管理员权限),“日常启动”即文件缓存已热时的启动。
|
||||
Reference in new issue
Block a user