三星Galaxy Z Fold7曝光:折叠屏技术再突破
|
亲历现场。昨晚十一点四十七,测试机堆在窗台晒到发烫,三台Z Fold6工程机加一台刚寄来的Fold7样机,屏幕朝上,像四块被晒蔫的薄饼——其实就俩在亮,另外两台早黑了屏,但散热片还烫手。我原以为Fold7那版系统会把折叠态窗口管理全重写一遍,结果拆包一看,ActivityStack里还是老逻辑,就加了个mIsFoldedStatePending的布尔量,藏在WindowManagerService的三十八行往下跳转里,跟十年前Moto Razr那套毛线团一模一样。 楼下便利店的关东煮蒸汽正往上飘,我蹲在台阶边啃萝卜块,手里捏着测试妹子刚甩过来的log截图,她说“横竖切屏各三次必crash”,我对着光看第三张图里的NativeCrash堆栈,第七帧是SurfaceFlinger::onLayerUpdate,但第八帧就断了,只剩一句“[W] binder thread pool exhausted”,连PID都没打全。我敢打包票这绝不是Binder线程池问题——是那版系统里新塞进来的fold-aware SurfaceAllocator在双屏渲染路径里多call了一次handleDisplayChange,没判null,而厂商对接人张工说“三星给的SDK里写了‘建议忽略该回调’”,他真拿这个当release note交过来了。 桌上的机械键盘声又响起来,青轴,咔嗒咔嗒,我同事阿哲在隔壁工位狂敲adb shell input keyevent 26,反复亮屏/灭屏,试那个折叠角检测失效的bug——就是你合盖到135度它还当展开态用,结果StatusBar一缩就压进SystemUI的layout_height=0的ViewGroup里,直接OOM kill掉通知栏。我说“试试disable fold sensor service”,他回“试了,disable之后状态栏不挂,但相机预览全绿屏”,我说“绿屏?那你dumpgfx的时候看没看BufferQueue的acquire fence timestamp”,他摇头,“没看,我就看见logcat里有句‘skip frame due to invalid folded ratio’,后面跟着个nanosecond=0”。我说这不对啊,nanosecond=0不可能触发skip frame,一定是timestamp取错了位置——可他说:“张工说三星那边确认了,就是这么写的。” 编译等待时窗外洒水车经过,喷头嘶嘶声拖了整整十八秒,比上次编译WaitForDebuggerTimeout的时间还长。我盯着Gradle那行“:systemui:mergeDebugResources”不动,手边Fold7样机正躺在纸巾盒上,盒底印着“XX便利店·关东煮专供”,纸巾吸了点汗渍,边缘发软。优胜劣汰?呵。Fold6去年还强制走SIP协议做分屏调度,Fold7倒退回去用BroadcastReceiver监听mFoldStateChanged——一个被Google在API 33标成@Deprecated的鬼东西。张工说“三星认证只要能过CTS-4.2.7”,我说“那你们让测试妹子手搓CTS用例也行”,他笑了,说“她昨天交的report里写了‘建议用户勿在地铁上展开折叠屏’,因为惯性传感器和陀螺仪校准值对不上”。这算哪门子优胜?这是把淘汰项全当默认分支 merge 进去了。 我记得三年前帮华为适配Mate X2,他们给的文档第一页就写着“禁止在onConfigurationChanged里重建Fragment”,字加粗,底下划红线。三星这份PDF我翻到第五页才看见一行小字:“fold state change may trigger multiple config changes in rapid succession”,然后就没有然后了。没有兜底、没有防抖、没有fallback policy。我问张工要不要加Handler.postDelayed兜一下,他说“三星QA组说他们自己没加”。我说“他们自己跑的是定制ROM吧”,他点头,“对,内核patch了三十七处,但我们拿不到source”。我删了自己写的防抖代码,直接用他们的onFoldStateChanged回调。结果测到第二台样机就崩了——不是crash,是surface黑一块,像被刀切过,但log里干净得吓人,只有SystemServer那行“[I] fold sensor reported stable state at 98.2°”,而我拿游标卡尺量过,实际铰链角度是97.8°。差那零点四度,就足以让他们的fold-aware LayoutPolicy算出负数的availableWidth。 阿哲刚把机械键盘推远了点,说他查了下三星去年提交的AOSP patch,有个commit叫“fold_adjustment: fix rotation delta under high frequency”, diff里删了整整两百行——全是为了解决同个问题:折叠过程中的旋转跳变。删完之后呢?现在每次合盖到60度左右,状态栏图标就错位半像素,测试妹子录屏截了三百七十二帧,发现第187帧开始图标右移,但第188帧又弹回原位,第189帧继续右移……循环往复。她说这叫“视觉呼吸效应”,我听了想笑。这不是呼吸,是抽搐。
产品概念图,仅供参考 刚才洒水车又过了一遍,这次停在路口,水雾漫进窗缝,打湿了Fold7样机侧面的SIM卡托槽。托槽有点锈斑,不知道是样机品控问题,还是折叠结构长期微渗水汽导致的——反正没人测这个。张工说下周二要交最终build,我说“那我现在就把SensorManager.unregisterListener那行注释掉重提”,他说“别,留着,QA说他们漏测了这一路”。我嗯了一声,把咖啡杯底朝上扣在键盘右边,杯子沿磕在ESC键上,咔一声。测试妹子在微信回:“fold detection timeout now occurs after 4.3 seconds, not 3.8. 厂商说这个更稳。” 我没回。稳?我看是稳如泰山——塌方那种稳。先扔结论后补细节。优胜劣汰没错,但淘的不是技术,是胆子。谁敢把deprecated API当主力通道,谁敢把没打log的sensor fallback硬塞进mainline,谁就把“淘汰”二字刻在自己的submit message里。Fold7那版系统,没一个feature是新增的,全是旧模块打补丁再包一层skin。我要是三星OS负责人,现在就去产线掐断所有样机供电——省得再烧坏几块OLED。但我不是。所以我待会儿还得改build.gradle里那个targetSdkVersion,改成比三星实际运行版本低一级,不然R8会把他们自己写的@SuppressLint(“WrongConstant”)优化掉。行吧,就这么干。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

