iPhone 17性能飞跃:实测与优化技巧全解析
|
那天凌晨三点十七分,测试间顶灯第三根开始闪——不是规律的那种,是像被谁拿手电筒在天花板上胡乱戳,一下、停顿、两下、长亮、再灭。我盯着它看了十八秒,数到第七次闪的时候,组长推门进来,头发翘着半边,手里捏着那张印糊了的“那个大版本”稳定性放行单,纸角还沾着咖啡渍。他把单子拍在桌上三杯没喝的咖啡中间,最左边那杯已经结了一层奶皮。 我说这版过不了。他没说话,只抬下巴指了指我屏幕右下角:温度曲线跳得跟心电图进ICU似的。我原以为是散热模块调度策略改崩了,结果拉出trace一看,kernel log里全是在同一毫秒内重复刷四百二十三次“cpu0 throttling due to thermal”,而底下thermal daemon的log干净得像刚格式化过——它根本没上报。这个我敢打包票,连标点都对得上。可你要问我为啥thermal daemon睡过去了?我说不准。问开发,他正蹲在隔壁工位用热风枪吹主板上的BGA焊点,说“先看看是不是sensor虚焊”,手一抖,锡珠弹到我键盘F键缝里,现在按F键还得连敲两次才响应。 那个大版本的内存回收逻辑,真不是优化,是优胜劣汰。字面意思——留下来的App,全靠扛住三轮GC风暴;挂掉的,不是OOM就是ANR直接进墓碑列表。我们跑monkey七十二小时,前四十八小时崩的全是带后台音频播放的第三方工具,后二十四小时,崩的是系统相册——就那个点开相册首页要预加载缩略图的入口,每次卡在decode frame 372,之后整个surface flinger线程就卡死在那里不动,像被钉在木板上的蝴蝶标本。产品经理来过两次,第一次站在后面看,第二次带了瓶红牛放我桌上,标签朝外,我都没拧开。她走的时候顺手把我隔板上贴的便利贴揭走了——上面记着“check: vendor overlay patch 是否覆盖了 vendor_dlkm 的 init 脚本”,她以为是待办,其实是上个月补丁回退时随手写的备忘。 但最绝的是锁屏界面双击唤醒。那个功能,在那个大版本里,和系统音量调节耦合进了同一个binder service,而这个service在低电量模式下会主动disable自己——不是休眠,是直接unregister。所以你电量低于百分之十五,双击就失效。没人测出来,因为所有自动化脚本都在满电下跑。我是偶然发现的:那天早上六点四十分,手机只剩百分之十二,我困得眼皮打架,摸黑双击锁屏想看时间,没反应。又试一次,还是没。第三次我睁开一只眼盯着屏幕,看见LED指示灯微弱地闪了一下,但UI纹丝不动。我当场抓起adb logcat -b events,grep了整整十一分钟,才在system_server里翻出一句:“skip wake gesture — service dead”。不是crash,不是timeout,是dead。死了。活生生的死服务。这个细节我录了视频,发给开发的时候,他说“啊,那个呀……忘了在low-power profile里加keepalive。” 凌晨打车回家的司机在听评书,讲《杨家将》,正说到杨六郎被困两狼山。我靠在后座,手机在兜里震——又一条自动告警:核心服务watchdog连续三分钟没收到heartbeat。我掏出来看了眼,屏幕亮得刺眼,电量显示百分之九。我划开通知栏,三个进程正在后台顽强存活:一个微信语音通话残留(用户明明十分钟前就挂断了)、一个崩溃后的淘宝直播SDK、还有一个不知道什么时候启动的“系统健康守护”进程——它图标是个盾牌,名字叫“SafeGuard”,但路径在/vendor/app/下,签名却跟system_app不一致。我截图发群里,没人回。后来才知道,那天夜里十二点整,运维侧的灰度AB实验把SafeGuard的开关打开了,灰度比例千分之三,而我们测试环境压根没同步这个开关配置。 工位隔板上贴的便利贴,其实我早撕了。是组长撕的。那天他撕完还顺手把边上我写的另一张“adb shell dumpsys meminfo | grep ‘Pss’ > /data/local/tmp/pss_last”也一起揭走了——他当是废纸。但我记得那行命令下面我还写了小字:“注:此值不能直接对比,需剔除ZRAM压缩率扰动”,墨水有点洇,看着像泪痕。我现在打字的时候右手小指还在发麻,是昨晚压着鼠标垫睡了四十分钟压的。不是累了才睡,是等一个dump出来的core dump文件,等它自己生成,它没生成,我就醒了。
外观展示图,仅供参考 昨天上午十一点半,我又去测试间看了一眼。顶灯换新了,三根全亮,稳得像通了直流电。可进门右手第二排第三个工位,键盘还在我桌上,F键缝里的锡珠没清理,咖啡杯底结的奶皮早干成一圈浅褐色环。我坐下去,打开那个大版本的OTA包校验md5,输到一半,想起来上一版里有个camera HAL的内存泄漏bug,直到发版前三小时才合进主干——那个patch我亲自review过,line 891的free()前面少了个if(ptr)判断。这事我没提。不是不想提,是提了三次,开发回我:“已修复”,结果每次构建都漏掉。最后一次我看CI日志,发现git cherry-pick执行成功了,可目标分支的commit hash没更新。我截图发过去,他回:“哦,rebase冲突我手动解错了,重提。”——重提的commit message写的是“fix ci fail”。这个我敢打包票。 今晚我还得去跑一遍thermal cycle stress test,循环一百次,每五次做一次memcheck。但我不打算碰那台主力机了。我已经把所有测试脚本迁到旧款设备上——就是那台电池鼓包、屏幕边缘发黄、充一次电能撑四天的机器。它反而最稳。真奇怪。 (编辑:171手机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

