Skip to content

taffy 0.12→0.14 升级(误换列 #82 根因修复载体:collect_flex_lines definite-main-size 门控) #82

Description

@15wtyuan

内容

taffy 0.12.2 → 0.14.0 升级。原始 bug(列方向 flex-wrap 容器内子项高度逐帧动画时某一帧误判超高换列)根因已定位为 taffy 0.12 内部缺陷,0.14.0 含对症修复,本票转为升级票作为修复载体。根因取证全文见 2026-08-27 调研 comment(机制链 + 源码锚点 + 触发条件二分实录)。

升级范围(编译实测的成本清单)

  • compute_layout_with_measure 闭包改 (LayoutInput, NodeId, ctx, &Style) -> LayoutOutput(#1091)——crates/core/src/layout/mod.rs measure 闭包区重写(~30 处错误集中于此)。
  • Style::min_size/max_sizeLengthPercentageAuto(#1099);tagged-pointer 类型 expand()(#1129,lp() 的 into_raw hack 可换正规 API)。
  • Layout::content_sizescrollable_overflow_rect(#1118)——scroll overlap 计算面排查。
  • LayoutOutput::first_baselinesbaselines: Baselines(#1107);numeric helper Into<f64>(0.13 #974)。
  • serde/pkg 连锁:taffy Style 序列化格式变化 → ResolvedStyle.taffy_style 进 pkg.bin 格式变 → pkg format_version bump + headless fixtures 重打。
  • flexbox_balance 成为 default feature——围栏未放 flex-wrap:balance 值集(CSS IFC 换行控制全集(white-space / overflow-wrap / word-break / text-wrap) #73 已拒),不受影响;升级时核对 default features 面。

验收判据

  1. HTML=<改版前 layout-anim 页> cargo run -p loomgui_core --example dump_layout_anim_jitter 逐帧 0 异常帧
  2. 复现升格 core 守卫单测(逐帧断言列宽/子项 x 恒定)——0.12 期可先落 #[ignore] 版,升级后转绿防回归;
  3. 布局差分守卫(rect-diff 十页/worktree 对拍)不回归;
  4. cargo bench -p loomgui_coresolve 每帧重建 taffy 树(坑 186) #29 基准)增量 solve 稳态无明显劣化(0.14 changelog 自述缓存更正确但有性能代价,须实测);
  5. cargo test 全绿 + showcase PlayMode 逐项过(布局面全球性变化,showcase 是肉眼回归网)。

排期

2026-08-27 用户裁决:本票转为升级票;排在 #74<a> Link)之后开工。showcase layout-anim 页保持纯 div(语义修正,不回退)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    scope: corecrates/core——引擎无关核心(布局 / 渲染 / 动画 / 控件 / 事件)status: deferred躺 backlog:触发判据出现再提级(判据见 issue 正文)type: debt质量 / 性能 / 债

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions