提示:本文的Hardcoder相关选项、功能、效果,为个人实际测试/参考Hardcoder官方开发文档得出,与真实效果可能存在出入。如有问题请积极指出。
_______________________________
一、注意事项
⚠️
1.调节Hardcoder时,微信可能会出现性能、功耗不如预期的情况(如多名小米9用户反馈,调节Hardcoder选项后微信流畅度明显下降的情况)。
因此,调节Hardcoder选项之前,请务必做好数据与表情包的备份,并且对Hardcoder界面进行截图记录,以备不时之需。
2.Hardcoder的选项和实际作用可能因硬件与系统而异。调节一个选项可能不会在一个机型上生效。
3.调节后的加载速度与CPU频率的差异可能不明显。
4.调节结果需要点击左上角的返回键,才能保存变更。一般而言,直接点击返回键是无效的。
_______________________________
二、Hardcoder是什么?[doge]
Hardcoder其实是微信性能占用逐渐增大的一个产物。我们可以理解成微信在特定机型上挟天子、令诸侯,对系统提出对核心、I/O、GPU打鸡血,故意在大核丛集上运行进程等要求的一个私人渠道,以解决微信性能需求高的问题……咳咳,非常霸道。
[流汗滑稽]换种说法:微信可以和系统进行[py交易]交易,系统尽可能满足微信App的需求。
实际上,Hardcoder 是一个框架,需要应用程序(如微信)和手机厂商ROM(比如MIUI等)的默契配合,才能实现应用程序在特定条件下直接调节CPU核心频率、I/O 速度、绑定的核心等参数。
因此,它同时需要Hardcoder客户端(Client)和服务端(Server)。客户端在Android应用开发时便被集成在应用程序(如微信)项目中,服务端则由手机厂商集成在MIUI、ColorOS等定制ROM中[doge]。否则,在未Root下,是无法实现效果的。
Hardcoder框架是以BSD许可证开源的。但目前来看,使用Hardcoder的应用,除了微信之外暂时没有发现。
既然应用和系统都具备了Hardcoder框架,那么两者就需要传递信息。特定条件下,应用内的Hardcoder客户端就会采用 LocalSocket向系统内的服务端进行通信,服务端便会按照应用的请求,来调节CPU核心频率、I/O 速度、绑大小核丛集等参数。具体的原理可见此处:
对于旗舰机等性能足以满足微信日常运行的用户,过高的Hardcoder 频率,或者绑定在功耗过高的大核丛集/超大核丛集上,可能只是是徒增功耗。对于过于低端的机型,Hardcoder设置过低,则又会面临性能不足的问题。如果由于微信Hardcoder而导致耗电过高,或者是由于Hardcoder设置过低而运行缓慢,那么就需要进行一番调教。
_______________________________
三、Hardcoder入门调教
开始设置Hardcoder之前,先要问自己几个问题:
1. 你的机型支持吗?——检查机型支持程度。
多数机型是不支持Hardcoder的,因为它没有嵌入Hardcoder服务端。太旧的机型可能也不支持。
下图为厂商具体机型对于Hardcoder的支持情况。由于此页面最后一版时间为2020年7月29日,因此可能未收录更新的机型。但是更新的机型可能也是支持的。
详情:
2. 你的应用也支持吗?
新版的微信肯定支持Hardcoder。但是其他应用呢?
一个不准确的方法:用【LibChecker - 应用架构查看】检查应用的库。如果那款应用内置了libhardcoder.so,那么它可能是支持的。
接下来就需要调出微信的Hardcoder调试界面了。首先安装【创建快捷方式】
找到com.tencent.mm.ui.tools.HardCoderSettingUI 这个activity。其他搭载Hardcoder的应用可能也有类似名称的activity
自定义名称之后创建快捷方式,并打开
如果你还没有开始调整这里的设置,那么需要先进行截图保存。由于不同机型均搭载不同的SoC和闪存,其默认调教方案亦不同,因此厂商各个机型的默认数值和设置均不同。如果出现卡顿或意外高耗电,那么可以尝试设置回初始的版本。
接下来了解一下顶部选项的功能:
1. Client Enable:启用客户端Hardcoder总开关。近两年的旗舰机型可以考虑直接将此开关关闭。但是如果重新勾选,那么底下的选项会全部开启。
2. Debug Log:日志功能。如非必要,建议关闭此功能。
3. Day Switch:每日开关,暂未明确其功能。
4. Enable Time Limit:定时开关Hardcoder功能。可以在睡眠时间内关闭Hardcoder,其他时间段启用。建议开启。
接下来是每一项的说明
5. 选项名称(如encode_video):为提频的触发条件(如解码视频、滚动聊天界面等)。取消勾选则可以避免触发此条件
6. CPU、IO:是CPU和IO的提频幅度,IO的速率可能会影响闪存的读写速率。
这两个选项分为四级。0为不开启,1为最大幅度,3为最小幅度。
但是要注意,1~3都是只用于提升频率的,无论是1~3,它的频率都要比不开启Hardcoder时更高。
7. Bind thr,把线程绑定到CPU大核或者超大核运行。对于小核版本旧、数量性能弱的机型而言,可以在必一些触发条件上勾选来让某些动作在大核上运行。但是,如果大核/超大核是类似于x1核心(如骁龙888的超大核)这种高耗电、高发热量的,那么一定要取消勾选。
8. Action。这是Hardcoder的触发条件的编号,非必要下千万不要乱动,否则可能会出现无法触发、触发其他动作等问题。
9. Timeout:鸡血的持续时间。超过这段时间后,频率就会恢复正常值。
10. Delay:延时。一般设为0即可。
11. Hardcoder触发条件解析:也就是让Hardcoder开启鸡血的必要条件,满足此条件,Hardcoder才能被触发。不同机型的作用有差异,下图仅供参考,请以实际为准。
调节完成后,必须点击左上角返回键方可保存。之后,强行停止、再次启动微信。
_______________________________
四、使用案例[doge]
(由于机型、系统、硬件的不同,不同机型在调节后的效果可能不同,下文仅供参考)
1. Q:骁龙888的超大核丛集,功耗和发热量实在太大,而小核心的功耗和性能尚可。如何让微信降低功耗?
A:除了涉及到视频编解码的部分(如encode_video等)或者GIF显示(gif_init/gif_drop_frame)外,将其他选项的bind thr开关关闭,避免其故意调用大核与超大核。
当然,如果你的小核心太弱,大核心尚可,那么可以考虑开启bind thr
2. Q:相册滑动时,缩略图加载速度太慢,该如何解决?
加载速度慢最有可能与I/O速度有关。因此可能需要调节media_gallery_scroll选项的io值至1或者2.
3. Q:如果我进行一个操作时,界面加载速度正常但经常掉帧或无响应(比如滑动首页、聊天界面时掉帧),那么我该怎么办?
A:可能与CPU频率有关。建议将相应选项的CPU调高(1最高,3最低,均高于0)。具体场景请参考前图。
如无效,也可以尝试绑定大核(bind thr)。如果依然没有效果,那么可能是硬件或者系统的性能问题。
4. Q:我仅仅是接收消息,耗电量却很大,那么我该怎么解决?
停止接收消息时的Hardcoder鸡血:将receive_msg的CPU和IO设为3或者0,然后取消勾选bind thr,如果条件允许,可以直接取消勾选receive_msg。当然,此操作无法解决其本身耗电量大的问题。
当然,如果对于自己手机的性能有信心,可以将其他的选项全部关闭。
5. Q:我想在晚上睡觉时节省电能,怎么办?
A:可以将enable time limit选项打开。Begin选项指Hardcoder开始生效的时段(默认为早上8点)。End指的是Hardcoder停止生效的时间(默认为晚上23点)。当然,也可以自定义时间,但貌似只能调开始时间
_______________________________
五、无效情况
是的,即使机型支持Hardcoder,在触发条件相同的情况下,更改选项后的效果随机型和ROM的不同而不同。这也同样受限于当前性能占用、省电模式、调度等因素,下面以之前测试的MIUI 12.5的Redmi K20 Pro 与 EMUI 11 的华为P30 Pro进行对比。(当时测试时尚未升级到Harmony OS)
1. EMUI 11环境:
以下是测试机的基本信息(麒麟980平台)
关闭SNS_MSG_SCROLL 选项时,滑动消息时的频率。小核丛集频率约800MHz,大核/超大核丛集为1300~1400MHz
开启SNS_MSG_SCROLL 后进行滑动,小核丛集频率提升至1600MHz。由于没有勾选BIND_THR 选项,进程不会刻意在大核丛集上运行,也不会通过Hardcoder来调节大核丛集的频率。这可能是大核频率几乎不变的原因。
SNS_MSG_SCROLL选项开启BIND_THR后,大核丛集频率出现提升。
2. MIUI 12.5
测试机型基本信息(骁龙855平台),MIUI优化被关闭
关闭 SNS_MSG_SCROLL 选项并滑动时
打开 SNS_MSG_SCROLL 选项并滑动时。
可见,受限于种种因素,开关SNS_MSG_SCROLL选项后,大小丛集频率并无明显变化。不过这不代表其他触发条件没有效果,或者同一机型在不同时间段均没有效果。
另外,修改的选项有没有按照前文的方法,点击左上角返回保存?机型是否支持?Hardcoder选项是否有问题?这些都是影响到Hardcoder效果的因素。修改好以后,也可以用perfmon等工具观察一下核心频率等参数。如果有条件,也可以用Android Studio、perfdog等工具进行观察。
目前来看,此提频方式尚具有不确定性,亟待进一步观察。[doge]
_______________________________
@酷安小编 @alexkillers @匿名游客@快乐球