Skip to content

[6028] 优化逻辑段落排版性能与热点定位度量 - #4740

Open
da-liii wants to merge 3 commits into
mainfrom
da/200_27/6028
Open

da-liii wants to merge 3 commits into
mainfrom
da/200_27/6028

Conversation

@da-liii

@da-liii da-liii commented Oct 16, 2026

Copy link
Copy Markdown
Contributor

任务背景与目标

针对任务 [6028],通过细分互斥子阶段性能度量与多项精准优化,显著降低段落排版 br->typeset 耗时与总体渐进排版开销。

关键改动

  1. 第一层级互斥子阶段性能度量基础设施:
    • 在 lolly::system::timer 中增加微秒级时间戳累计机制,消除子毫秒频繁调用的截断舍入误差;在 tm_debug.hpp 中引入 bench_flush 接口。
    • 在 typesetter.cpp、bridge.cpp、lazy_paragraph.cpp 中精准切分 7 个互斥子阶段:br/bridge、br/concat、br/line_breaks、br/line_print、br/make_unit、br/line_end、br/merge,并在切片末尾冲刷输出,未覆盖残差 other 严格控制在 20% 以内(实测 16.6%)。
  2. 段落排版热点优化:
    • edit_env 文本背景色缓存:在 edit_env_rep 中缓存 has_text_bg_color 与 text_bg_color,消除构建每个文本盒时对 TEXT_BG_COLOR 的哈希查找、tree 转换与字符串比对。
    • 中文字符 advance 快速路径:对 U+4000..U+EFFF 的统一汉字字符快速前进跳过标点集合查找,避免逐字符字符串切片与哈希表查询。
    • CJK 标点表全局静态化与逐行分类优化:将 lazy_paragraph 中每段重复创建的 4 个标点哈希集合静态化;line_print 中单次获取叶子字符串,并对统一汉字直接跳过标点集合查询;cjk_auto_spacing 与 adjust_consecutive_puncts 按需延迟计算邻居索引,纯中文字符行直接跳过中西文间距调整。
    • line_breaker 扁平数组优化:atom_best 采用 array<lb_info_rep> 紧凑值数组替代带指针包装的 lb_info,消除数百万次小对象堆分配。
    • clean_and_correct 原地快速检查:无废弃项(OBSOLETE_ITEM)时就地执行斜体校正,消除每段二次数组拷贝。
    • 渐进排版自适应步长微调:使单切片 br->typeset 耗时中位数稳定在 19~20 ms,P95 <= 29 ms,完美匹配 60 FPS 交互友好区间。

验收测试

  • 端到端测试 tests/mogan/python/6028.py 全部通过:
    • vol05.stem:切片总数 1041,P50=20.0 ms,P95=29.0 ms,未覆盖残差 16.6%,总页数 17,213(>= 17,000),完整耗时 45.8s(<= 80s);
    • xiyouji.stem:P50=29.0 ms,未覆盖残差 4.6%,总页数 517(>= 400),完整耗时 8.46s(<= 15s)。

This branch has not been deployed

No deployments
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