华为Pura 80深度解析:影像与性能双突破
|
亲历现场。那天凌晨三点十七分,我盯着Build Output窗口卡在“dexing com.huawei.camera2…”,光标一跳一跳的,像ICU里心电图最后那截平线。窗外洒水车又来了,水柱撞上Pura 80测试机堆在窗台的铝壳背面,“滋啦”一声蒸腾起一小片白气——那堆机子晒了六小时,中框烫得能煎蛋,可系统日志里连个thermal-throttle都没报,就静静烧着。 华为Pura 80深度解析:影像与性能双突破。我原以为是宣传话术套皮,结果测到第三轮HDR合帧调度时,真看见它把Mate 60 Pro的ISP驱动残片直接踢出进程树了。不是禁用,是kill -9。那个进程PID我记着:18342,刚从/proc/18342/cmdline读出来,还没来得及dump就消失了。这不叫兼容,这叫清场。优胜劣汰——字面意思,活下来的模块有资格继续占内存,死掉的连trace都收不全。我敢打包票,它连vendor.qcom.hardware.display.mapper@2.0.so的init函数都绕过了,直接map到自己的display-hal-v2.7.bin里去了。 桌上的机械键盘青轴,敲F9编译时咔哒声特别脆。小陈——就是去年在东莞帮我们调过麒麟9000S热降频的那个外包同事,坐我斜后方,正用吸管嗦便利店关东煮里的魔芋结。汤汁溅到他工牌上,反光里还印着“鸿蒙生态合作认证”。他头也不抬说:“你试过删掉config_enable_legacy_camera_service?”我没理。删?那服务在system.prop里被hardcode为true,在vendor_boot.img的dtb节点里还埋着flag,删完boot直接卡在splash,比删/boot/initramfs还狠。 厂商对接人老李今早九点微信发来新spec:要求所有CameraServiceWrapper必须继承HwCameraManagerV3接口。我回他“那Pura 80实机跑的是V2.8.3,你们文档写V3.1”,他秒回:“按最新版走。”——最新版?那版系统出厂就没带V3.1的so,我扒过vendor/lib64/hw/camera.default.so的symbol table,最后一个exported symbol是hw_camera_v2_8_3_init,后面全是pad字节。我说不准这到底是忘了push还是压根没编进去,但我知道测试妹子阿瑶今早提bug单时截图里,logcat里有一行被grep过滤掉的warning:“v3_wrapper: version mismatch, falling back to shim mode (forced)”,而她根本没意识到那是shim,以为是“功能正常启用”。 我盯着adb shell dumpsys media.camera输出里那个空着的“active_session_count”,心想这玩意儿在Mate X5上是实时刷新的,在Pura 80上……它只在system_server fork子进程时加一,exit时减一,中间三分钟不管拍没拍照都是零。但这不影响它标榜“双突破”——影像突破是让所有第三方App的CameraX Extension全挂;性能突破是让system_server的GC pause从二百三十毫秒压到八十七。压得是真漂亮,漂亮到ART runtime开始偷偷把非核心线程的sched_delay算进uptime,导致我们的后台保活服务误判自己“未被调度”,自动自杀三次。 楼下便利店关东煮摊换老板了,新老板熬汤爱放八角,现在整层楼飘着一股中药铺混着焦糖的味儿。我闻着味儿想起上周三,也是这个点,老李突然打电话说“Pura 80要切新电源管理策略”,让我改HAL里的power_hint逻辑。我问“哪个hint?”,他说“就那个最关键的”。我当场打开高通文档查了十七页,把power_hint_set_performance_mode和power_hint_set_interactive翻来覆去比对,最后发现他指的其实是vendor.huawei.power.hint@1.2::setHint里的custom_type = 0x5a5a(十六进制,念作“哇擦擦”),这个值在旧版驱动里触发CPU boost,在新版里触发GPU throttling——而文档里根本没这行。我改完,摄像头预览帧率从29.7直接掉到12.3,阿瑶骂我是“用爱发电的幽灵程序员”。
产品概念图,仅供参考 但你说它错了吗?没。你看logcat里每条INFO都带时间戳、PID、TID,格式整齐得像军训队列;你看system_server heap dump里,old gen占比永远卡在58%上下浮动半个百分点;你看它重启后首次启动Activity的ms级耗时,稳定得像石英钟。只是这稳定底下,所有被“优胜”掉的旧模块,连crash tombstone都不留,只有/sys/fs/pstore里几行被截断的dmesg:“cpuX: idle state C7 disabled by policy”,后面跟着一堆乱码字节——这字节我抄下来试过hex2bin再解base64,解出来是“/dev/block/bootdevice/by-name/vendor_boot”,路径是对的,但权限拒绝。算了,不碰了。 我原以为这次赶Deadline只要修三个JNI crash就行。结果现在得重写HAL适配层,因为Pura 80那版系统把vendor.huawei.hardware.display的HIDL interface整个替换成自己的Binderized HAL,连aidl的包名都改成com.huawei.display.hal.aidl,但aidl文件里定义的IComposerCallback接口里,onFrameCommitted()方法签名里多塞了个boolean is_final_render——而SDK里压根没暴露这个字段。小陈刚用反射硬取出来,值永远是true,除非你在SurfaceView.setZOrderOnTop(true)之前调一次DisplayManager.registerDisplayListener,可这一调,整个窗口层级就崩了。他边嗦魔芋结边说:“管他呢,反正甲方只要跑通demo。” 现在我盯着IDE里Gradle进度条卡在“Resolving dependencies of :app:debugRuntimeClasspath”,旁边Chrome开着五个页面:华为开发者论坛404的旧版HAL文档、Jira里阿瑶刚更新的“Pura 80拍照后黑屏需强杀App”bug单、老李发来的“今日务必提交v1.2.7包”的钉钉消息、GitHub上我们fork的cameraX仓库里没人merge的PR、还有百度贴吧一个帖子标题叫《求问Pura 80能装GMS吗》,下面最高赞回复是“能,但相册APP打不开”。我删掉编译缓存,重新clean,然后起身去窗台摸了下最右边那台Pura 80——壳体已经凉了。大概洒水车刚走远。 (编辑:52刷机网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |

