Pull Request已成功合入, 合并人@openharmony_ci
(感谢 chenwenchang101 的贡献)感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。
Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.


感谢提交 Pull Requests!如果您提交的PR已经开发完毕,请评论 "start build" 触发门禁,更多交互操作,请访问OpenHarmony社区支持命令清单。如果需要调整订阅PR、Issue的变更状态,请访问订阅链接。
Thanks for submitting the pull request. If your Pull Request has already been developed, you can leave a "start build" comment to trigger the gated system. For more commands, please visit OpenHarmony Command List. If you need to change the subscription of a Pull Request or Issue, please visit the link.


material overlay split 检视:发现 4 个问题(1 中、3 低)。详见行评论。核心关注点:动态材质库符号签名变更的同步依赖、static_pointer_cast 空检失效、UpdateAppendOverlayShader 串联逻辑缺单测、RequestNextFrame 触发不一致。


问题影响【一般】 CreateUiMaterialShaderECSub 的函数指针类型由 1 参 CreateMaterialFilterFunc 改为 2 参 CreateMaterialFilterWithSplitFunc(新增 bool needSplitOverlayShader),但 dlsym 加载的符号名未变。
若部署侧材质库(GetMaterialLib() 返回的 .so)未同步升级到新签名,旧实现会忽略多传的 bool,导致 split overlay 特性静默失效(不报错,仅 base shader 不拆分),并在部分调用约定下存在参数传递不匹配的风险。
建议:确认材质库已同步导出 2 参版本的 CreateUiMaterialShaderECSub;或为旧库保留兼容分支(按符号版本探测后回退到 1 参调用)。


问题影响【一般】 std::static_pointer_cast<Rosen::RSNGFrostedGlassEffect>(overlay) 后接 CHECK_NULL_RETURN(glassEffect, nullptr) 是无效防护:static_pointer_cast 对非空 shared_ptr 永远返回非空,空检永不触发。
当 overlay 来自动态库路径 MaterialUtils::GetUiMaterialECSubShaderOverlay(其返回 shaderStruct->shader,具体派生类型未知)而非本地 ConvertToRSNGFrostedGlassEffectECSubOverlay(必为 RSNGFrostedGlassEffect)时,若实际类型不符,后续 Setter<FrostedGlassEffectWeightsEmbossTag> 会触发 UB。
建议:改用 dynamic_pointer_cast<Rosen::RSNGFrostedGlassEffect>(overlay) 并做空检;或固化不变量"overlay 必为 RSNGFrostedGlassEffect"并在该处加注释断言。(注:与既有 ConvertToUiMaterialECSubShader 同一模式,建议借此次新增一并加固。)


问题影响【提示】 新增用例仅覆盖 SetMaterialNeedSplitOverlayShader 标志位写入;本次核心新增逻辑均无单测覆盖:
ConvertToUiMaterialECSubShaderOverlay(split 开关分支、动态库/本地回退)SetMaterialShaderECSubOverlay/UpdateAppendOverlayShader(appendOverlayShader_[2]的CopyAsSingleEffect+Append串联、清空顺序、early-return 守卫)- 重命名的
SetOverlayNGShader
mock ConvertToUiMaterialECSubShaderOverlay 直接返回 nullptr,使 overlay 路径在 UT 中根本不被执行。UpdateAppendOverlayShader 依赖 CopyAsSingleEffect"只复制单效果不带子节点"的语义,缺少回归用例后一旦 RS 侧语义变化难以及时发现。
建议:补 UpdateAppendOverlayShader 多 shader 串联/单清/双清的 UT(可用 fake RSNGShaderBase 记录 Append/CopyAsSingleEffect 调用)。


问题影响【提示】 SetOverlayNGShader(边缘光路径)更新 appendOverlayShader_[1] 后调 UpdateAppendOverlayShader(),但未调 RequestNextFrame();而同文件 SetMaterialShaderECSubOverlay 在 UpdateAppendOverlayShader() 之后显式调了 RequestNextFrame()。
这与既有行为一致(SetMaterialShaderECSub 本就请求下一帧,旧 SetForegroundShader 不请求、依赖 RS 脏标记),大概率是有意为之。但边缘光在动画过程中会高频调 SetOverlayNGShader,请确认:仅依赖 rsNode_->SetOverlayNGShader 的 RS 侧脏标记足以驱动重绘,无需 ace 侧主动请求下一帧。


IssueNo:[新需求]: material overlay split
Description: [新需求]: material overlay split
Sig: SIG_ApplicationFramework
Binary Source: No(涉及则Yes)
请勿修改以下选项内容,仅需保存后点击复选框,或在编辑时将对应项前面的
[ ]改为[x]Do not modify the following option content. Simply save and click the checkbox, or when editing, change
[ ]to[x]for the relevant item.Feature or Bugfix
是否涉及非兼容变更/Whether it involves incompatible changes
TDD自验结果/TDD Self-Verification Results
XTS自验结果/XTS Self-Verification Results
检视意见是否都已闭环/Have all review comments been resolved
是否已执行L0用例