OPPO Reno15深度评测:性能与影像双优的潮流旗舰
|
亲历现场。那个大版本封版前四十八小时,我盯着 Reno15 的 stability report 看第三遍——不是看 crash rate,是看它在连续七十二小时亮屏状态下,到底哪一刻开始“优胜劣汰”。 我原以为就是 thermal throttling 触发后自动降频那套老逻辑。结果不是。它真把调度器当自然选择现场用:CPU cluster0 上三个小核全被 kill 掉,只剩一个活着,活了十八秒,然后被 cluster1 的中核主动吞掉进程句柄——吞得特别干净,连 trace 里都没留 reference count 变化。这个我敢打包票,我截了三次 perf_event_ringbuffer 的 raw dump,第二帧的 sched_switch 就没了那个 pid 的影子。 桌上三杯没喝的咖啡,最左边那杯杯底结了薄盐霜,中间那杯盖子歪着,最右边那杯……我忘了加奶,但没倒掉。组长进来时顺手把中间那杯盖子扶正,手指在杯沿抹了一圈,说“再拖一天,你这报告交不出去”,转身就走。他袖口蹭到我工位隔板上贴的便利贴,蓝色那种,印着“BSP 提供的 v2.3.1 hal_sensors.so 不兼容新 powerhint”,底下被我划掉两行,补了“→ 实测是 sensorhub firmware 的 irq handler 被调度器误标为 idle task”,字歪得像被碾过。 而影像链路更邪门。不是预览绿屏,不是夜景拖影,是 HDR 合成时 auto white balance 模块突然跳回上一版的校准参数——只跳一次,在第十四次 fast capture 连拍后的第七帧。跳完立刻恢复正常,log 里连 warning 都不打。开发过来查,蹲我工位边上看十分钟,掏出手机拍了张我屏幕的截图,说“我复现了”,转头去改 config.json,改完跑单测,pass。我让他拿我的整机跑一遍 full-stress,他点了两次 run,第三次点错了,点了 reboot。手机重启完,问题没了。我说“你刚才点错那下,其实触发了 recovery flow”,他摇头:“不可能,recovery 没 log。”——可它就是好了。这个我说不准。
外观展示图,仅供参考 测试间灯管闪。不是整排,就正对我头顶那根,滋啦一下,灭半秒,亮,又滋啦。闪得毫无规律,比 watchdog timeout 还难抓。我抬头看了三次,第四次就没抬——因为第三次闪的时候,我正好在看 adb shell dumpsys battery 的输出,发现 batterystats 里有个 service_state_change 的 timestamp 偏移了二百一十三毫秒,偏移量跟灯闪间隔完全无关,纯巧合。但我就记住了那二百一十三毫秒,像记住了某次冷重启时 bootreason 字符串里多出来的半个问号。产品经理蹲在隔壁隔间问:“用户视角看,这就是流畅+好看,对吧?”我没接话。她自己点头:“对吧?咱们不就是要让用户感觉不到后台在死斗吗?”我说“它不是感觉不到,是根本没告诉用户谁赢了谁输了”。她笑:“你这话说得像达尔文来审需求。”我没笑。我看着她工牌挂绳上卡着的一粒灰,比芝麻小,比像素大,黏在塑料扣边缘,没掉。 所以什么叫“优胜劣汰”?不是小核死得壮烈,是它死前把 last_active_jiffies 写进了 shared memory 的 offset 0x40c,而中核醒来第一件事就是把那值读出来,当成自己的启动时间戳。不是 AWB 失控,是它失控那一帧的 sensor gain 其实抄了上一版 tuning table 第七行第三列的数——那行表上写着“@deprecated since 2023 Q2”,但 firmware 没删。不是系统稳,是它把不稳定藏进确定性里:同一套 stress script,在同一台样机上跑五次,崩溃点依次出现在 37:18、37:19、37:20、37:21、37:22——每轮晚一秒,稳得瘆人。 凌晨打车回家的司机在听评书,《白眉大侠》徐良追铁莲花那段,他音量开得不大,但“嗖——”一声暗器破空音效刚好卡在我报完最后一组 memleak delta 的节奏上。我靠窗,没说话。他问我是不是搞手机的,我说是。他说:“我家娃用你们家 Reno,说拍照快。”我没应。他等了三秒,自己接上:“可我昨儿看他拍花,连按六下,出三张。”——这事儿跟我手头的 bug 无关。但我说不清为什么记得这么清。 还有个细节:那个大版本里 camera service 的 binder thread pool,初始 size 设的是 8。我们测到第五天,发现它在连续低光录像时会缩到 2,再不肯扩回来,直到用户切到相册 app,touch event 触发了一次 InputDispatcher::dispatchOnce,它才咔地弹回 6。没人动过这个阀值,也没人配过 trigger policy。就是碰巧——碰巧输入和影像线程抢同一个 spinlock,碰巧 spinner 被 camera thread 占了太久,碰巧 InputDispatcher 的唤醒优先级被 kernel 临时抬高了两级。我们改了三天配置,最后 revert 回上一版的 service manifest,问题消失。开发说“可能 Binder driver 的 pending queue 优化反向污染了调度”。我说“别扯 driver,你看看你写的 acquireBuffer 里那行注释:‘// TODO: recheck w/ CTS 12.1’——它根本没 recheck。” 我现在要把这份 report 打印出来,夹进那个大版本的封版 checklist 里。不勾“通过”,也不写“阻断”,就夹在中间页,折个角。明天早会,我把打印件往组长桌上一放,他翻开看见第一页的标题,就知道我什么意思。 (编辑:171手机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

