Android 性能优化
查看日志
main:
lowmemorykiller:
lowmemorykiller: Kill 'com.transsion.aichargeprovider'
anr in: anr的时间
CPU信息: total:
查看应用安装:DexInv|dex2oat32: dex2oat took
看温度:previous/current
rsrq:查看网络
event:
displayed //查看启动时间
display 0 //查看启动屏幕参数
低内存查杀信息:killinfo
ANR时间点:am_anr
查看进程申请的内存:am_pss
启动进程:am_proc_start
sys:
anr in: anr时的系统信息
start u0: 启动的三方进程
start proc:应用启动方式
kernel:
看温度:thermal_get_ap_ntc_temp
zone =
ppm:查看温控
cpufreq:CPU频率
查看时间:UTC
未知:
丢帧:frames
游戏性能优化
提升应用GPU
<Package name="应用包名">
<Activity name="应用中需要设定生效的activity名"> // Common表示对所有页面生效,可根据实际情况设置
<FPS value="Common"> //表示always enable这部分的配置,适用于所有帧率档位
<WINDOW mode="Common">
<data cmd="PERF_RES_CPUFREQ_MIN_CLUSTER_0" param1="3000000"></data> // 设置CPU cluster0的最小频率为最高频,要求的最小频率可以自己调整
<data cmd="PERF_RES_CPUFREQ_MIN_CLUSTER_1" param1="3000000"></data> // 设置CPU cluster1的最小频率为最高频,要求的最小频率可以自己调整
<data cmd="PERF_RES_GPU_FREQ_MIN" param1="0"></data> // 设置GPU档位,0表示最高
<data cmd="PERF_RES_DRAM_OPP_MIN" param1="0"></data> // 设置DRAM档位,0表示最高
<data cmd="PERF_RES_DRAM_CM_MGR" param1="1"></data> // DRAM更积极
<data cmd="PERF_RES_SCHED_BOOST" param1="1"></data> // 大核优先
<data cmd="PERF_RES_SCHED_UCLAMP_MIN_TA" param1="100"></data> // 提升GPU上大核的比例
</WINDOW>
</FPS>
</Activity>
</Package>
fstb.cfg
com.tgc.sky.android 1 30-30
需要root权限:
影响性能的主要是CPU/GPU/DRAM三个方面,拉满C/G/M的目的是让相关流程更快的执行完。这三个都拉到最高,等于整机性能已经达到极限了。
请贵司根据kernel版本选择相应的cmd把C/G/M都拉到最高频后再测试下是否有改善?若改善不大,则说明达到cpu bound
kernel-4.1*:
// CPU
adb shell "echo 0 0 > /proc/ppm/policy/ut_fix_freq_idx" // 固定最大频率
adb shell "echo LL_maxcore L_maxcore > /proc/ppm/policy/ut_fix_core_num" // 所有核数全开,LL_maxcore、L_maxcore 表示小核、大核的最大个数
例:
adb shell "echo 0 0 > /proc/ppm/policy/ut_fix_freq_idx"
adb shell "echo 6 2 > /proc/ppm/policy/ut_fix_core_num"
查看当前cpufreq
adb shell "cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq"
// GPU
adb shell "cat /proc/gpufreq/gpufreq_opp_dump" // 确认GPU所支持的档位
adb shell "echo xxx > /proc/gpufreq/gpufreq_opp_freq" // 将最大值设置下去,因platform不同,所支持的最大值不同
例:
[0] freq = 850000, volt = 80000, vsram = 90000, gpufreq_power = 935
[1] freq = 823000, volt = 78750, vsram = 88750, gpufreq_power = 885
则gpufreq最大值为850000,即adb shell "echo 850000 > /proc/gpufreq/gpufreq_opp_freq"
查看当前gpufreq
adb shell "cat /proc/gpufreq/gpufreq_var_dump"
// DDR
adb shell "cat sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_opp_table" // 确认DDR 各档位对应频点
adb shell "echo 0 > /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_force_vcore_dvfs_opp" // DDR 固定最大频
查看当前DDR freq
adb shell "cat /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_dump | grep -e uv -e khz"
// DRAM
adb shell "cat /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_opp_table" // 查看DRAM档位
adb shell "echo 0 > /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_req_ddr_opp" // DRAM 固定最大频
adb shell "echo 0 > /proc/perfmgr/boost_ctrl/dram_ctrl/ddr"
查看当前频率
adb shell "cat /sys/devices/platform/10012000.dvfsrc/helio-dvfsrc/dvfsrc_dump"
kernel-5.10:
// CPU
adb shell "echo LL_Core LL_Freqmin LL_Freqmax > /proc/cpuhvfs/cpufreq_debug"
adb shell "echo L_Core L_Freqmin L_Freqmax > /proc/cpuhvfs/cpufreq_debug"
例:
adb shell "echo 0 2000000 2000000 > /proc/cpuhvfs/cpufreq_debug"
adb shell "echo 6 2200000 2200000 > /proc/cpuhvfs/cpufreq_debug"
查看当前cpufreq
adb shell "cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq"
// GPU
adb shell "cat /proc/gpufreqv2/gpu_working_opp_table" // 确认GPU所支持的档位
adb shell "echo 0 > /proc/gpufreqv2/fix_target_opp_index" // 将最大值设置下去
查看当前gpufreq
adb shell "cat /proc/gpufreqv2/gpufreq_status | grep 'STACK OPP'"
adb shell "cat /proc/gpufreqv2/gpufreq_status"
// DDR
adb shell "cat /sys/kernel/helio-dvfsrc/dvfsrc_opp_table" // 确认DDR 各档位对应频点
adb shell "echo 0 > /sys/kernel/helio-dvfsrc/dvfsrc_force_vcore_dvfs_opp" // DDR 固定最大频
查看当前DDR freq
adb shell "cat /sys/kernel/helio-dvfsrc/dvfsrc_dump | grep -e uv -e khz"
// DRAM
adb shell "cat /sys/kernel/helio-dvfsrc/dvfsrc_opp_table" // 查看DRAM档位
adb shell "echo 0 > /sys/kernel/helio-dvfsrc/dvfsrc_force_vcore_dvfs_opp" // DRAM 固定最大频
查看当前频率
adb shell "cat /sys/kernel/helio-dvfsrc/dvfsrc_dump"
强制开关FPSGO
adb shell "echo 0 > /sys/kernel/fpsgo/common/force_onoff"(0关1开2free)
关闭powerhal
adb "setprop persist.vendor.powerhal.enable 0"
芯片跑分
4+64 4+128,会影响ROM存储性能里面的应用存储速度,顺序写速度
查看游戏内分辨率
进入游戏执行adb shell dumpsys SurfaceFlinger >111.txt
然后在文档里面搜索display 0
查看开机内存
adb shell dumpsys meminfo >623.txt
adb shell cat proc/meminfo >623mem.txt
日志查看启动时间
displayed //查看启动时间
display 0 //查看启动屏幕参数
查看系统配置参数
adb shell pm list package # 列出所有应用的包名
adb shell pm path <pkg name> # 列出对应包名.apk的位置
adn shell pm install <apk path> # 安装应用
adb shell pm clear <pkg name> # 清除对应包名应用的数据
adb shell getprop
adb shell getprop ro.lmk.swap_free_low_percentage //低内存查杀百分比
adb shell getprop ro.lmk.swap_util_max //高强度低内存查杀百分比
查看整机最大进程数
dumpsys activity settings |grep CUR_MAX_CACHED_PROCESSES
低内存查杀
手机日志
*#*#9646633#*#*
命令查看信息
查看当前应用包名:adb shell dumpsys window | findstr mCurrentFocus
强装指令:adb install --bypass-low-target-sdk-block
查看CPU频率(root):adb shell cat /sys/devices/system/cpu/cpufreq/policy*/cpuinfo_cur_freq
解密:python powerhal_encrypt.py -d power_app_cfg.xml power_app_cfg.xml
ANR分析
ANR的四种种类:点击超时,广播申请超时,系统响应超时,content超时
1.查找ANR的原因,如果有异常进程
2.通过异常进程PID在main中查找对应的异常问题,如果异常问题是线程导致
3.通过线程TID在bugreport中查找对应的进程,然后再main中通过进程PID查找异常应用proc_start
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人