Skip to content

perf: reduce Flash PDF preparation across all demo samples (round 7) - #14

Merged
myhloli merged 18 commits into
mainfrom
codex/rust-pdf-round6
Sep 26, 2026
Merged

myhloli merged 18 commits into
mainfrom
codex/rust-pdf-round6

Conversation

@myhloli

@myhloli myhloli commented Sep 25, 2026 •

Copy link
Copy Markdown
Owner

Flash PDF 在标题判定、源字符几何、共享行内证据和表格候选中重复准备数值与文本。此变更保留原业务判断及全部候选,复用当前阶段的只读准备并增加私有 Rust 批量计算。第七轮在第六轮冻结源码 843b599 及匹配协议 7 二进制上继续优化。

  • demo|all 语料默认 all,递归发现全部 demo;冻结路径、SHA256、页数、区域输入、源码、扩展和依赖,不刷新金标。
  • 第六轮:共享行内分类按 64 行/8192 字符批量计算;后语义行连接保序查询;表注和横线区间只在候选构建内有界复用。
  • 第七轮:各标题阶段复用未变的栏 profile 和行高,保留首次统计排序副作用及语义失效。中文论文2 的栏 profile 实算从 5310 次降至 450 次。
  • 单行 source_rows_plain 合并源框选择、裁剪及旋转;普通只读字体按身份强引用复用,最多 4096 项,风险筛查/正式修复及各行分别准备。
  • 借用原字符列表融合映射保护与 Glyph 几何;Python 保留 Unicode、字体等价、汉字映射、物化与来源。复用同次行内字体准备及按精确内容区分的文本投影(256 块/8192 字),保留混合保护组与空页异常行为。
  • 公开 API、类型、返回结构及 MinerU 业务代码兼容,继续 auto/python/rust。第六轮协议 6→7,本轮 7→8,加载、ABI、注册及 wheel 测试同步;计算异常不被 auto 吞掉。
  • 性能仅在本机比较;CI 保留双后端正确性、Rust、wheel、sdist 和平台兼容矩阵,不恢复全平台性能对比。

最终性能源码 aa0241827a0412da1709eb92a4cb5780ac19aa32。本机 Apple M4/16 GB,四组独立进程、一次预热、五次正式测量、交替顺序,RSS 单独采样;profiler、测试及构建不与最终计时并行。仅具体文档/指标越过 5% 时反序复测。

第七轮,17 demo/136 页 第六轮同期 Rust 中位数之和 第七轮 Rust 降幅 目标
公开解析 16.378407s 15.115506s 7.71% ≥10%,未达到
共享文本 text_total 3.270722s 3.256694s 0.43% 本轮不另设目标

公开解析尚差 0.374940s/2.29 个百分点。剩余热点为 PDFium 对象裁剪/矩阵/RGBA、源框 Python 记录准备、行构建、上下标打包及字体枚举。未降低输出等价或退化门槛。
密集样本 49.- 不计入 demo 目标:公开解析 1.896257 → 1.913316s(裁决变化 +0.90%),共享文本 0.604086 → 0.606766s(+0.44%)。

第六轮历史验收(151d39b → 843b599)为公开解析降低 8.29%(15% 目标未达到),共享文本降低 30.66%(25% 目标达到)。两轮分别同期复测,不把不同时期的秒数相加或相乘为累计收益。

验证:

  • 基线/候选 × Python/Rust 全部 32 PDF/299 页 ModelJson、MiddleJson、文本证据、成员来源、HTML、Markdown、诊断及素材摘要一致;186 表格区域一致。全部文档耗时和进程树 RSS 无持续 >5% 退化,零基线新工作量单列。
  • 515343 原始字符对照纯 Python 读取及几何参考一致;137 页标框像素及导出一致;人工查看 18 文档的 22 个代表页,覆盖公式、上下标、表注及旋转表格。
  • Python 全量 4469 passed/469 skipped;Rust 4937 passed/1 skipped;Rust workspace test、clippy、fmt 通过。新增差分测试覆盖排序副作用、语义/字体失效、特殊对象异常回调、四向旋转、正负零、来源与有界缓存。
  • MinerU 核心接口各后端 119 passed;18 文档 × medium/high 的 36 组固定输入回放在四组实现中一致;CPU 复用/样式补充各 16 项通过。另有 6 项稀疏渲染调度失败在冻结第六轮源码同样复现,独立记录为既有宿主局限。
  • 原生/纯 Python wheel、sdist 和实际安装通过;393 文件与构建目录匹配,pypdfium2 5.10.1/5.13.0、协议 8 ABI、密集解析及 CLI 通过。性能扩展固定,wheel 在独立目录重编译并验证,未覆盖性能快照。
  • aa02418 的 CI 39 作业与 Native wheels 7 作业全部成功,覆盖 Python 3.10–3.14 与既有平台矩阵。Intel macOS 3.14 应用依赖限制继续单列,3.14 ABI 独立检查,完整 smoke 使用 3.13。

首次候选 8546348 的测量因共享入口持续退化被拒绝,原值保留在 pre-fix-public/pre-fix-shared。混合字符分组与空页开销修复后,最终完整对比在同一版本重跑;较慢的 Python 单遍映射和会丢邻行证据的样式跳过尝试均撤销。

阶段提交 P0 1fb7305、P1 53df6cc、P2 fdd78f3、P3 23af3c8/8546348/aa02418。逐样本结果见 第七轮记录;独立本机原始证据为 output/pdf/rust-round7-20260926/REPORT.md、HOTSPOTS.md、stage-calls.json、performance-gates.json 与全部测量/视觉输出,不覆盖前轮产物。

性能源码 SHA256 dc8d902972b309e11881778598fd12edfb5f312cef38e9c7580432eea3e23f80,扩展 799152ec326e20412a433ea41322e922701236c85ed907d59850a095c7ccc1ac;后续文档提交不改变生产源码或性能二进制,测量提交字段保持原样。共享分支上的既有 Office 图片预算提交 f12dd78 不属于本轮 PDF 优化,a124f29 仅修复其 Ruff 格式且 AST 相等。本 PR 保持 draft,未合并、未发布。

@myhloli myhloli changed the title perf: accelerate Flash PDF across all demo samples perf: reduce Flash PDF preparation across all demo samples (round 7) Sep 26, 2026
@myhloli
myhloli marked this pull request as ready for review September 26, 2026 15:25
@myhloli
myhloli merged commit f81c327 into main Sep 26, 2026
46 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-09-26T15:26:28.583481Z f26d388 Draft marked ready
🔒 Security Review ✅ Completed 2026-09-26T15:27:16.853347Z f26d388 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant