修复 AGC 运行预览尺寸抖动 #252

Merged
kdletters merged 5 commits from fix/preview-iframe-resize-loop into master 2026-09-03 10:35:24 +08:00
Member

问题

AGC 项目运行页的本地预览会根据 iframe 上报内容尺寸调整 iframe viewport;部分使用 100vh、百分比或响应式布局的游戏会把宿主调整后的 viewport 再反映为新的内容尺寸,形成反馈环并在两个缩放档位之间持续抖动。

附件工程和录屏已确认可触发该问题,普通浏览器直接打开不受影响。

落地方案

  • 补充宿主 viewport 变更与真实内容变更的区分,忽略由宿主首次应用 fit 引起的回灌尺寸;
  • 保留同一稳定 viewport 下真实动态内容变化后的重新适配;
  • 增加反馈环收敛、动态内容变化和陈旧消息回归;
  • 同步 AGC 运行预览权威文档和项目记忆。

验证计划

  • 附件 gameagent-2873e5ac 在 AGC WebView 中稳定显示;
  • 相关 TypeScript 单测与类型检查;
  • preview Rust 定向测试;
  • npm run check:encodinggit diff --check

Fixes #250

## 问题 AGC 项目运行页的本地预览会根据 iframe 上报内容尺寸调整 iframe viewport;部分使用 `100vh`、百分比或响应式布局的游戏会把宿主调整后的 viewport 再反映为新的内容尺寸,形成反馈环并在两个缩放档位之间持续抖动。 附件工程和录屏已确认可触发该问题,普通浏览器直接打开不受影响。 ## 落地方案 - 补充宿主 viewport 变更与真实内容变更的区分,忽略由宿主首次应用 fit 引起的回灌尺寸; - 保留同一稳定 viewport 下真实动态内容变化后的重新适配; - 增加反馈环收敛、动态内容变化和陈旧消息回归; - 同步 AGC 运行预览权威文档和项目记忆。 ## 验证计划 - 附件 `gameagent-2873e5ac` 在 AGC WebView 中稳定显示; - 相关 TypeScript 单测与类型检查; - preview Rust 定向测试; - `npm run check:encoding`、`git diff --check`。 Fixes #250
suzmii self-assigned this 2026-09-02 16:38:12 +08:00
suzmii added 1 commit 2026-09-02 16:38:12 +08:00
登记预览尺寸反馈环回归
Project CI / Native shell tests (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Repository checks (pull_request) Has been cancelled
a1dec84b73
补充宿主首次应用 iframe viewport 后应保持当前适配结果的回归场景
suzmii added 2 commits 2026-09-02 17:29:00 +08:00
分离保存最近合法上报的 iframe viewport 与正式内容尺寸。

首次宿主适配导致 viewport 变化时只推进观察值,阻断反向改写循环。

补充稳定 viewport、动态内容变化和陈旧消息回归测试。

同步更新 AGC 技术方案与项目决策记录。
修复拖动窗口时预览闪烁
Project CI / Repository checks (pull_request) Has been cancelled
Project CI / Frontend tests (pull_request) Has been cancelled
Project CI / Backend tests (pull_request) Has been cancelled
Project CI / Native shell tests (pull_request) Has been cancelled
9599abb667
容器尺寸变化时保留当前内容尺寸和已观察 viewport。

按新的容器尺寸连续重算 fit,避免恢复原生尺寸后再次缩放。

补充组件级容器 resize 回归和附件浏览器收敛验证说明。

同步更新 AGC 技术方案与项目决策记录。
suzmii added 1 commit 2026-09-02 17:29:19 +08:00
Merge branch 'master' into fix/preview-iframe-resize-loop
Project CI / Repository checks (pull_request) Successful in 4m1s
Project CI / Frontend tests (pull_request) Successful in 4m52s
Project CI / Backend tests (pull_request) Successful in 7m31s
Project CI / Native shell tests (pull_request) Successful in 15m43s
b5e7cfeea2
Member

审查 head b5e7cfeea2fd3d367cad9ec6b6310e303fd216ad:未发现明确问题。已检查 base 5de9554426 到当前 head 的完整 diff,并结合调用方、现有测试与配置审查;相关 Vitest 12/12、TypeScript tsc --noEmit、git diff --check 均通过。

审查 head b5e7cfeea2fd3d367cad9ec6b6310e303fd216ad:未发现明确问题。已检查 base 5de955442645c49a3aee9710ba13dc2dc39244c8 到当前 head 的完整 diff,并结合调用方、现有测试与配置审查;相关 Vitest 12/12、TypeScript tsc --noEmit、git diff --check 均通过。
kdletters approved these changes 2026-09-02 17:33:45 +08:00
Dismissed
kdletters left a comment
Member

审查 head b5e7cfeea2fd3d367cad9ec6b6310e303fd216ad:未发现明确问题。

审查 head b5e7cfeea2fd3d367cad9ec6b6310e303fd216ad:未发现明确问题。
kdletters approved these changes 2026-09-02 17:35:14 +08:00
Dismissed
kdletters left a comment
Member

审查 head b5e7cfeea2fd3d367cad9ec6b6310e303fd216ad:未发现明确问题。

审查 head b5e7cfeea2fd3d367cad9ec6b6310e303fd216ad:未发现明确问题。
suzmii marked the pull request as ready for review 2026-09-02 17:41:17 +08:00
suzmii requested review from kdletters 2026-09-02 17:41:33 +08:00
kdletters approved these changes 2026-09-03 10:35:05 +08:00
Dismissed
kdletters added 1 commit 2026-09-03 10:35:12 +08:00
Merge branch 'master' into fix/preview-iframe-resize-loop
Project CI / Frontend tests (pull_request) Successful in 2m53s
Project CI / Repository checks (pull_request) Successful in 2m28s
Project CI / Backend tests (pull_request) Successful in 7m16s
Project CI / Native shell tests (pull_request) Successful in 17m40s
4d3dde5394
kdletters dismissed kdletters's review 2026-09-03 10:35:12 +08:00
Reason:

New commits pushed, approval review dismissed automatically according to repository settings

kdletters merged commit 258501918f into master 2026-09-03 10:35:24 +08:00
kdletters deleted branch fix/preview-iframe-resize-loop 2026-09-03 10:35:24 +08:00
Member

审查 head 4d3dde539413ae1ddb95e144061e50d4e96557b0:发现 1 个阻塞问题(行内位置:apps/ai-game-creator-shell/src/features/project-workspace/LocalGamePreviewFrame.tsx new-side 第117行附近)。这里的保护条件会让延迟 native 报告重新进入 fit 更新路径。复现:current={contentHeight:1000, viewport:1200x700},appliedViewport=1200x1000,previousReportedViewport=1200x1000;随后收到 viewport=1200x700 但 contentHeight=1100 的延迟 native 报告。该报告同时满足 reportsNativeViewport,因此不会被第117-123行的“viewport变化”保护拦截,函数返回新的内容尺寸并把 iframe fit 从1000改为1100;之后 applied/native 回报交错时会再次改变缩放,目标的 resize-loop 仍可能发生。建议把报告序列/当前 resize epoch 与 native/applied viewport 绑定,在已确认 applied viewport 后拒绝旧 epoch 的 native 报告,或明确区分真实内容变化和延迟 viewport 回报,并补充该 contentHeight 变化的回归测试。

审查 head 4d3dde539413ae1ddb95e144061e50d4e96557b0:发现 1 个阻塞问题(行内位置:apps/ai-game-creator-shell/src/features/project-workspace/LocalGamePreviewFrame.tsx new-side 第117行附近)。这里的保护条件会让延迟 native 报告重新进入 fit 更新路径。复现:current={contentHeight:1000, viewport:1200x700},appliedViewport=1200x1000,previousReportedViewport=1200x1000;随后收到 viewport=1200x700 但 contentHeight=1100 的延迟 native 报告。该报告同时满足 reportsNativeViewport,因此不会被第117-123行的“viewport变化”保护拦截,函数返回新的内容尺寸并把 iframe fit 从1000改为1100;之后 applied/native 回报交错时会再次改变缩放,目标的 resize-loop 仍可能发生。建议把报告序列/当前 resize epoch 与 native/applied viewport 绑定,在已确认 applied viewport 后拒绝旧 epoch 的 native 报告,或明确区分真实内容变化和延迟 viewport 回报,并补充该 contentHeight 变化的回归测试。
Sign in to join this conversation.