华为Mate X5深度解析:折叠屏黑科技重塑手机体验
|
亲历现场。那天凌晨三点十七分,我盯着Mate X5测试机的开合动画卡在第十七帧——不是崩溃,是停着,像被胶水粘在半空。屏幕折痕处那个灰阶过渡带,肉眼可见一毫米宽的错位,但日志里连个WARNING都没有。我截图发给华为对接老陈,他回得比编译还快:“这版系统对 hinge sensor 的 polling 周期做了微调,你清下 vendor.img 再刷。”我清了。又卡在十七帧。我清了三遍。窗外洒水车经过,喷头滋啦一声扫过玻璃,水雾在窗上糊出一道斜纹,正好盖住我贴在屏幕边沿的便利贴:「X5 hinge angle 逻辑和 P60 完全不兼容」。 测试妹子小杨蹲在窗台边上用热成像仪扫折叠区,她指甲油剥了一半,右手小指翘着,左手握着探头来回蹭。她说“红外图谱显示铰链轴心温差超七度”,我抬头看她,她正撕开第三包关东煮的包装袋,萝卜块掉进键盘缝里。我原以为温差是硬件散热问题,结果拆了三台样机才发现——不是温差大,是那版系统把 hinge sensor 数据塞进了一个只有十六字节的 ring buffer,溢出后直接截断低位,角度值在 182° 和 183° 之间来回抖动。而这个 buffer 地址,在去年 9 月他们悄悄改过一次 ABI,文档没更新,脚本没报错,只在我本地编译时 warning 栏里跳了十八秒——刚好够我泡完一杯速溶咖啡。 桌上机械键盘声是青轴,按 shift 键那下总带点滞涩感。我敲 `adb shell getprop | grep hinge`,输出里混着两行同名 property:`vendor.hinge.angle.cur` 和 `vendor.hinge.angle.cur.v2`。查源码发现前者是旧驱动留的壳,后者才是真数据,但 system_server 在读取时默认 fallback 到前者——因为那版系统里,PropertyService 的 fallback 机制压根没做 version check。我敢打包票,那个 fallback 逻辑是在去年 Q3 某次 OTA 补丁里加进去的,加的人肯定没碰过双轨 hinge 的机器。可现在我们所有适配逻辑都卡在这儿:你用 v2 就崩 SurfaceFlinger;用 v1 就永远卡在十七帧。 老陈昨天下午打语音过来,背景是食堂打饭的铝盘哐当声,他说“客户要的是‘黑科技’体验感,不是 hinge sensor 校准报告”。我说“那十七帧动画怎么过认证?”他停了四秒,说“认证测的是展开完成耗时,不是过程平滑度”——我笑了,他听见了,补了句“笑啥,你们外包写 animation interpolator 的时候也没管过物理转轴阻尼曲线啊”。我没回。挂了之后我扒了下他们的 UX 动画 SDK,发现 `HingeAwareInterpolator` 里 hardcode 了 0.33 秒固定 duration,不管 hinge 是磁吸、液态金属还是弹簧片。这个我敢打包票:他们从来没测过三代铰链同时在线的 case。 楼下便利店关东煮的汤锅一直在咕嘟,我闻见海带味儿飘上来,混着楼道里电梯维修工用的松香膏。我顺手点了份厚切牛筋,等餐的时候把 `SurfaceControl.setBufferTransform()` 调用从 `onGlobalLayout()` 里提出来,塞进 `onHingeStateChanged()` 的回调里——结果闪屏更狠。不是方向错了,是时机。那版系统发 hinge 事件的时间戳,比 sensor HAL 实际上报晚二百三十一毫秒,而这二百三十一毫秒,刚好够我按下三次音量键触发三重 logcat filter 切换。测试机堆在窗台最右边那台晒到发烫,背面摄像头模组边框烫得不敢摸,镜头膜微微起皱,像一张被攥过又松开的手纸。 前天跟外包同事老李连麦复现,他那边用的是一台工程样机,serial 号带 “T7” 后缀。他跑同样代码,动画顺滑得不像话。我让他 `adb shell cat /proc/version`,他念:“Linux version 5.10.110-xxx-huawei-20230912…” 我打断他:“你 root 过没?”他愣一下:“root?没有啊。”我让他再输一遍,这次我听着语音里的电流声——他在读第二行的时候,背景有微弱的“滴”声,像刷卡器。后来才知道,他电脑插着华为开发板调试器,USB 供电干扰了 serial console 的 echo 延迟。这事儿我不能确定是不是真的,但我记得去年在东莞试产线,同一台设备,接不同 USB hub,hinge angle callback 的触发间隔能差四十七毫秒。你说这是硬件?可他们固件版本一样,驱动编译时间戳一致,md5 也对得上。这事儿我说不准。
产品概念图,仅供参考 上周五测试妹子小杨递给我一张便签,上面画了个歪扭的铰链剖面图,箭头指着中间写着:“这里没防误触缓冲”。我没说话,她转身去拆另一台机子,头发扎太高,后颈有道浅浅红印,像是刚摘下头戴式耳机留下的。我忽然想起三年前在小米厂里改 MiuiHome 的 Dock 预加载逻辑,也是这种红印,也是这种突然的沉默。当时我信了“UX 一致性”的鬼话,现在看,所谓一致性,就是所有人盯着同一个 bug 讲不同方言,还互相点头。 “优胜劣汰”?哈。这词我今早看见就胃抽。不是说技术淘汰人,是人淘汰自己:删掉旧逻辑时手抖,merge 分支时忘了 rebase vendor tag,看到 `// TODO: handle hinge stall recovery` 就直接 ctrl+/ 绕过去。我今天准备把 hinge angle 的读取逻辑重写成轮询+校验和+fallback 三级嵌套,不走 callback。至于动画帧率——先扛过下周三的提测再说。对了,刚才小杨微信发来一张新图:热成像显示铰链外侧金属片有一小块低温区,形状像半个逗号。她问“是不是冷凝水渗进去了?”我没回。我还在等编译。键盘上萝卜渣还没掸掉。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

