已合并
fix(dms): sync client available area cache on UpdateAvailableArea #19520
fix(dms): sync client available area cache on UpdateAvailableArea #19520
已合并
mobhot创建于 6月30日
mobhot
mobhot
6月30日

概述

修复 hidumper 中「Client screen Infos」的 AvailableArea 在屏幕旋转、折叠后不刷新的问题。

变更类型

根因

客户端 ScreenSession 的本地缓存 availableArea_ 在多个写入路径上漏更新:

  • SCB 主动上报型 API(UpdateAvailableArea / UpdateSuperFoldAvailableArea)只转发给服务端,未回写本地
  • 服务端推送型路径(ProcPropertyChange)构建本地 screenProperty 时漏取 availableArea 字段

导致客户端本地缓存一直是旧值,而服务端正确。hidumper 的「Client screen Infos」段和 SCB 都读本地缓存,所以读到的 availableArea 是 stale 的。

变更内容

主要变更(3 处,互补不冗余)

  1. ScreenSessionManagerClient::UpdateAvailableArea:转发给服务端前,先调用本地 ScreenSession::SetAvailableArea 同步客户端缓存。
  2. ScreenSessionManagerClient::UpdateSuperFoldAvailableArea:转发前,先把主屏 bArea 写回本地 ScreenSession 缓存。
  3. ScreenSession::ProcPropertyChange:从服务端推下来的 eventPara 同步字段到本地构建中的 screenProperty 时,补上 SetAvailableArea(eventPara.GetAvailableArea())

影响范围

  • screen_session_manager_client.cpp:客户端可用区域缓存一致性(旋转、三折叠上报)
  • screen_session.cpp:折叠态切换时服务端推送路径的本地构建(双折叠/单折叠/翻盖)
  • hidumper 的「Client screen Infos」段、SCB 对可用区域的读取

场景覆盖说明

三个改动覆盖不同设备 × 不同数据方向,互补不冗余:

改动 API 性质 数据方向 触发时机 覆盖设备
UpdateAvailableArea 上报型 客户端→服务端 SCB 算好 area 主动调 NAPI 上报 直板、双折叠、单折叠、翻盖
UpdateSuperFoldAvailableArea 上报型 客户端→服务端 SCB 算好 bArea/cArea 主动调 NAPI 上报 三折叠
ProcPropertyChange 接收型 服务端→客户端 折叠态切换,服务端推 eventPara 双折叠、单折叠、翻盖

旋转场景

SCB 算新 area → NAPI updateAvailableAreaUpdateAvailableArea(改动1)→ 写本地缓存 + IPC 上报服务端。
旋转 bounds 走 ModifyScreenPropertyWithLock,不经过 ProcPropertyChange,由改动1 独占覆盖。

折叠场景

  • 双折叠/单折叠/翻盖:服务端感知折叠 → 推 eventPara → ace_engine 调 ProcPropertyChange(改动3)→ 本地副本带上 availableArea。
  • 三折叠ProcPropertyChange 的 SuperFold 分支提前 return(走 ProcPropertyChangedForSuperFold,不碰 availableArea),由 SCB 算好后通过 NAPI updateSuperFoldAvailableAreaUpdateSuperFoldAvailableArea(改动2)上报,写本地缓存(bArea)。

测试

Closes #14997

likedislike
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 mobhot 的贡献)
mobhotmobhot
6月30日 关联了issue:[DMS] hidumper 中 Client screen Infos 的 AvailableArea 旋转后不刷新
mobhot
mobhot
6月30日 评论:

static-check

likedislike
openharmony_ciopenharmony_ci成员
6月30日 添加了label:waiting_on_author
openharmony_ci
openharmony_ci成员
6月30日 评论:

感谢提交 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.

likedislike
openharmony_ciopenharmony_ci成员
6月30日 添加了label:dco检查成功
此处折叠了166条消息 查看更多
openharmony_ci
openharmony_ci成员
7月2日 评论:

您好,Committer @nyankomiya @logn @chyyy0213 @hejunfei1991 @stupidb @lollipopolive @JUGaaab ,请分配检视人员检视该PR,可以通过命令"assign [@someone_id]"分配检视人员,也可以直接评论"assign"分配给自己进行检视。


Hello, Committer @nyankomiya @logn @chyyy0213 @hejunfei1991 @stupidb @lollipopolive @JUGaaab . Please assign someone to review the PR. You can assign a reviewer by using the command "assign [@someone_id]", or you can comment "assign" to review the PR by yourself.

likedislike
openharmony_ciopenharmony_ci成员
7月2日 关闭了关联的issue
openharmony_ciopenharmony_ci成员
7月2日 合入了pull request,合并节点 SHA:6aa09f32b27f5c67aa924082b7f69ffbe4028281
openharmony_ciopenharmony_ci成员
7月2日 删除了label:waiting_for_review
openharmony_ciopenharmony_ci成员
7月2日 添加了label:merged