当前位置:首页 » 安卓系统 » androidfps

androidfps

发布时间: 2024-07-06 03:07:12

A. 如何测量Android应用的帧率FPS

方法如下:

1.打开网络浏览器,在输入栏里输入gltools,并点击下载安装。

B. 如何测量Android应用的帧率FPS

测量Android应用的帧率FPS的方法如下:

  1. 首先打开设置,进行如下操作(“设置”->"开发者选项",然后勾选“GPU显示配置文件”),以打开GPU呈现模式分析。如图:


C. 如何测量Android应用的帧率FPS

  • 通过 [设置]->[开发者选项]->[GPU呈现模式分析] ->[在屏幕上显示为条形图] 进行直观的取样,截图如下:

    绘制过程中的不同颜色具有不同的含义,详细解释请移步>> 官网查看更多。

    那么是不是说我只需要打开界面去数一下超过绿色阈值的柱状图有多少就可以观察我们应用的流畅度了?然而并没有,因为这个方式获取到的渲染时间只是UI主线程上的绘制行为,目前我所接手的项目,采用的方式是捕捉相机的数据然后放到GPU中去进行绘制,有单独的绘制线程,单独的视图,所以这个方案并不适合我手上的项目。

D. 如何测试安卓(Android)系统的流畅度

测试方法一:系统自带-开发者模式

实际上,为了方便开发者测试,安卓本身就内置了流畅度检测的功能。不过,这需要我们开启隐藏的开发者选项。如果你在用原生系统,那么开启开发者选项的方法很简单,进入到设置菜单“关于手机”页面,点击数次“版本号”,即可开启开发者选项。如果用的是其他ROM,方法也许有所不同,比如说魅族的Flyme开启开发者选项的方法是在拨号界面输入“*#*#6961#*#*”,其他机器方法也各有不同,大家可以参照厂商的说明。

进入到开发者选项,可以看到有“GPU呈现模式分析”的选项,开启后即可以条形图和线形图的方法显示系统的界面响应速度,可以用以观察系统流畅度。那么要如何根据曲线判断系统是否流畅呢?实际上这个曲线表达的是GPU绘制每一帧界面的时间,只要不超过顶部绿线,都可以视为足够流畅。

开启GPU呈现模式分析

FPS Meter可以显示最大最小帧数以及平均帧数

FPS Meter可以测试界面帧数,不过某些手机如果界面静止,帧数会为0。FPS Meter除了测量系统界面帧数外,还可以用来测量游戏的帧数,所以用FPS Meter来测试某部安卓机游戏性能多强也是个很好的选择。

当然,FPS Meter也并非十全十美。由于属于第三方App,所以可能会有一些兼容性问题。某些安卓机或者ROM使用FPS Meter可能会不兼容,即使成功开启了帧数显示也没法测量到准确数值,而某些设备使用FPS Meter甚至会死机。不过在大多数情况下,这款App还是相当值得信任的。

安卓在多个版本中都通过新技术提升了流畅度,比如说安卓2.3引入Dalvik、安卓4.0引入GPU界面绘制、安卓4.1引入黄油计划、安卓4.3引入Trim以及安卓4.4引入ART等等。

H5页面加载速度:window.performance.timing

Android以上测试方法不适用h5页面

如何分析页面整体加载速度:

主要是查看指标值PAGET_页面加载时间,此指标指的是页面整体加载时间但不含(onload事件和redirect), 此指标值可直接反应用户体验, 从此项指标可以知道指定某时间段的页面加载速度值,以及和天,周,月的对比状况.也可以查询指标ALLT_页面完全加载时间, 可以查询到从浏览器开始导航(用户点击链接或在地址栏输入url或点刷新,后退按钮)到页面onload 事件js完全跑完的所有时间.如果发现页面加载速度有增加或减少,则可以分项查询前面表格中的每个指标值,总的来说他们的关系如下:

dom开始加载前所有花费时间=重定向时间+域名解析时间+建立连接花费时间+请求花费时间+接收数据花费时间

pageLoadTime页面加载时间=域名解析时间+建立连接花费时间+请求花费时间+接收数据花费时间+解析dom花费时间+加载dom花费时间

allLoadTime页面完全加载时间=重定向时间+域名解析时间+建立连接花费时间+请求花费时间+接收数据花费时间+解析dom花费时间+加载dom花费时间+执行onload事件花费时间

resourcesLoadedTime资源加载时间=解析dom花费时间+加载dom花费时间

流畅度暂时没有发现好用的测试衡量工具,开发层面了解,主要是根据log分析

E. Android性能测试(内存、cpu、fps、流量、GPU、电量)——adb篇

3)查看进程列表:adb shell "ps",同时也能获取到应用的UID,方式如下(不需root权限):

u0_a开头的都是Android的应用进程,Android的应用的UID是从10000开始,到19999结束,可以在Process.java中查看到(FIRST_APPLICATION_UID和LAST_APPLICATION_UID),u0_a后面的数字就是该应用的UID值减去FIRST_APPLICATION_UID所得的值,所以,对于截图这个应用进程,它是u0_a155,按前面的规制,它的UID就是155 + FIRST_APPLICATION_UID = 10155。

VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS

使用 adb shell "mpsys meminfo -s <pakagename | pid>"命令,输出结果分以下4部分:

PS:在apk内调用运行获取其他app的内存数据则需要root权限

adb命令:adb shell mpsys gfxinfo <package | pid>

正常情况下帧率应该在16.67ms左右,1秒60帧,执行结果如下:

详细计算方法如下:

还有一个命令是: adb shell mpsys SurfaceFlinger --latency LayerName

其中LayerName在各个不同系统中获取的命令是不一样的
在Android 6系统直接就是SurfaceView
在Android 7系统中可以通过 mpsys window windows | grep mSurface | grep SurfaceView 然后通过数据截取到
在Android 8系统中可以通过 mpsys SurfaceFlinger | grep android包名获取到

执行命令结果如下:

计算方法比较简单,一般打印出来的数据是129行(部分机型打印两次257行,但是第一部分是无效数据,取后半部分),取len-2的第一列数据为end_time,取len-128的第一列数据为start_time
fps = 127/((end_time - start_time) / 1000000.0)
至于为啥要取第一列数据,这里不做过多介绍,欢迎参看这两篇文章
老罗的文章SurfaceView原理
Android性能测试之fps获取
至于为啥要处于1000000,因为命令打印出来的是纳秒单位,要转为毫秒进行计算,127就是因为命令一次打印出来127帧的数据而已

有两种方法可以获取
1) adb shell "top -n 5 | grep <package | pid>" ,第三列就是实时监控的CPU占用率(-n 指定执行次数,不需root权限),这边top命令执行需要2到3s左右,一般可以采用busybox 的top命令执行,效率会快很多

2) adb shell "mpsys cpuinfo | grep <package | pid>"
两种方法直接区别在于,top是持续监控状态,而mpsys cpuinfo获取的实时CPU占用率数据

adb命令:adb shell "mpsys batterystats < package | pid>" (Android 5.0后引入)
获取单个应用的耗电量信息,具体返回结果待研究

adb命令:adb shell "mpsys battery"
出现信息解读:
AC powered:false 是否连接AC(电源)充电线
USB powered:true 是否连接USB(PC或笔记本USB插口)充电
Wireless powered:false 是否使用了无线电源
status: 1 电池状态,2为充电状态,其他为非充电状态
level:58 电量(%)
scale: 100. 电量最大数值
voltage: 3977 当前电压(mV)
current now: -335232. 当前电流(mA)
temperature:355 电池温度,单位为0.1摄氏度

adb 命令:adb shell "mpsys< package | pid> | grep UID" [通过ps命令,获取app的UID(安装后唯一且固定)]
adb shell cat /proc/uid_stat/UID/tcp_rcv [cat为查看命令,读取tcp_rcv获取应用接收流量信息(设备重启后清零)]
adb shell cat /proc/uid_stat/UID/tcp_snd [cat为查看命令,读取tcp_snd获取应用发送流量信息(设备重启后清零)]
计算流量消耗步骤:

或者还有一种方式获取应用流量消耗:

首先判断类型:
cat /sys/class/thermal/thermal_zone*/type

只有红框框出来的是有效的
cat /sys/class/thermal/thermal_zone*/temp
获取CPU温度

mpsys battery | grep temperature 单位0.1摄氏度

获取/proc/stat文件内容(无权限限制)

总的cpu时间片是 total = user+nice+system+idle+iowait+irq+softirq
忙碌时间为 notidle = user+nice+system +iowait+irq+softirq
cpu使用率计算方法为,先取开始的total值和忙碌时间notidle,隔一段时间片,再取一次计算total2,notidle2, cpuuse = (notidle2 – notidle) * 100 / (total2 - total)%

PS:由于Android 8权限收紧,在Android 8系统手机内apk内读取文件内容为空,需要shell权限才可获取文件内容,下同

读/sys/devices/system/cpu/cpuX/cpufreq/scaling_cur_freq文件的值,X不定,看是几核手机,scaling_cur_freq是否存在也不一定,需要判断

至于为啥不取cpuinfo_cur_freq文件的值,原因是android 6,7系统获取的时候,这个文件shell没有读取权限,需要root权限

参考文章: https://blog.csdn.net/long_meng/article/details/45934899

Android 6,7系统可执行
mpsys window windows | grep "mCurrentFocus"

执行结果一般为类似:
mCurrentFocus=Window{81caaa5 u0 com.tencent.mobileqq/com.tencent.mobileqq.activity.SplashActivity}
按照一定规则把com.tencent.mobileqq提取出来即可

直接apk内读取文件即可,不需要shell权限(支持到Android8)
Gpu使用率获取:会得到两个值,(前一个/后一个)*100%=使用率
adb shell cat /sys/class/kgsl/kgsl-3d0/gpubusy

Gpu工作频率:
adb shell cat /sys/class/kgsl/kgsl-3d0/gpuclk
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/cur_freq

Gpu最大、最小工作频率:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/min_freq

Gpu可用频率
adb shell cat /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/available_frequencies

Gpu可用工作模式:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/available_governors

Gpu当前工作模式:
adb shell cat /sys/class/kgsl/kgsl-3d0/devfreq/governor

F. Android App娴佺晠搴FPS娴嬭瘯鏂规硶镐荤粨


Android App娴佺晠搴﹀抚鐜囨祴璇曞疄鐢ㄦ寚鍗


棰勫囩煡璇嗭细



  • 1. 阃氲繃楂橀熸惮镀忔満鎴杋Phone褰曞埗瑙嗛戯纴鎹曟崏240甯/s镄勫抚鐜囨祴璇

  • 姝ラ1: 娓呴櫎钖庡彴锛屽綍鍒惰仈绯讳汉婊戝姩杩囩▼锛屾椂闂寸害20绉掞纴娉ㄦ剰瑙嗛戣川閲忋

  • 姝ラ2: QuickTime甯у洖鏀句腑锛岄夋嫨璧峰嬫竻鏅板抚(F1)浣滀负锘哄嗳銆

  • 姝ラ3-5: 寰鐜妫镆ワ纴璁$畻骞冲潎甯ф暟F锛屽啀姹傚抚鐜嘑ps銆

  • 2. SurfaceFlinger鏂规硶锛屾繁搴﹀垎鏋愬簲鐢ㄧ▼搴忔祦鐣呭害

  • 姝ラ1: 浣跨敤adb shell锻戒护銮峰彇SurfaceFlinger鏁版嵁锛屽叧娉"com.android.contacts#0"銆

  • 姝ラ2: 娓呴櫎Buffer缂揿啿鍖猴纴纭淇濇暟鎹鍑嗙‘镐с

  • 姝ラ3-4: 妯℃嫙娴嬭瘯鍦烘櫙婊戝姩锛岃幏鍙栧抚鐩稿叧鏁版嵁锛岀洃鎺у抚寤惰繜銆佸抚鐜囧拰鎺夊抚銆

  • 姝ラ5: 阃氲繃浠g爜璁$畻甯х巼锛岄伩寮adb service call SurfaceFlinger 1013銆


娣卞叆鍒嗘瀽锛


SurfaceFlinger镄勫抚鐜囧垎鏋愭彁渚涗简镟磋︾粏镄勬暟鎹锛岄氲繃镆ョ湅搴旂敤绋嫔簭鎻愪氦甯у埌纭浠剁殑镞堕棿镣瑰拰甯у欢杩燂纴鎴戜滑鍙浠ュ垽鏂锷ㄧ敾镄勬祦鐣呮с傚抚鐜囱$畻涓崭粎锘轰簬甯ф暟閲忥纴杩樿冭槛浜嗗抚闂寸殑寤惰繜锛屽傛灉甯у欢杩熻法瓒婂埛鏂板懆链燂纴灏卞彲鑳藉艰嚧"jank"锛屽嵆浣垮钩鍧囧抚鐜囬珮涔熷彲鑳藉嚭鐜板崱椤裤


阃氲繃"Gfxinfo"鏂规硶锛屾祴璇曟椂闇娉ㄦ剰鍖呭悕镄勫樊寮傦纴濡"android.process.contacts"銆傝剧疆GPU锻堢幇妯″纺鍒嗘瀽锛屾粦锷ㄥ簲鐢ㄥ苟鏀堕泦120甯ф暟鎹锛岃$畻鐪熷疄甯х巼骞惰冭槛棰濆栫殑钖屾ヨ剦鍐插奖鍝嶃


浣跨敤systrace宸ュ叿锛岄氲繃鎶揿彇trace鏂囦欢锛岄夋嫨钖堥傜殑绾跨▼鍜屾椂闂村尯闂达纴镆ョ湅UI Thread鍜孋horeographer甯ф暟锛屼互璇勪及搴旂敤绋嫔簭鍦ㄥ疄闄呬娇鐢ㄤ腑镄勫抚鐜囩ǔ瀹氭с


甯х巼涓庢樉绀烘妧链镄勫尯鍒锛


甯х巼鍜屽埛鏂扮巼鏄涓や釜鐩稿叧浣嗕笉钖岀殑姒傚康銆傚抚鐜囱閲忕敾闱㈡洿鏂伴熷害锛岃屽埛鏂扮巼鍒欐槸鏄剧ず璁惧囨帴鏀跺拰鏄剧ず鐢婚溃镄勯熷害銆傝繃楂樼殑甯х巼骞朵笉镐绘槸镒忓懗镌镟村ソ镄勭敤鎴蜂綋楠岋纴锲犱负镞犳晥甯у彲鑳藉艰嚧璧勬簮娴璐瑰拰鏄剧ず闂棰樸


鍐呭瓨甯﹀戒笌娴佺晠搴︾殑鍏崇郴锛


灞忓箷镄勫埛鏂扮巼鍜屽抚鐜囧弹鍐呭瓨甯﹀介檺鍒讹纴濡傛灉鍐呭瓨阃熷害璺熶笉涓婏纴鍗充娇甯х巼寰堥珮锛屼篃鍙鑳藉艰嚧鏄剧ず闂棰樸傜悊瑙h繖涓铡熺悊鍙浠ュ府锷╀紭鍖栧簲鐢ㄧ▼搴忥纴纭淇濆唴瀛桦拰鏄剧ず璁惧囩殑鍗忓悓宸ヤ綔銆


热点内容
安卓电脑怎么投屏到苹果平板上 发布:2024-07-09 07:56:43 浏览:23
水星路由密码一般多少 发布:2024-07-09 07:56:41 浏览:818
db2forlinux 发布:2024-07-09 07:54:25 浏览:31
glb怎么选配置 发布:2024-07-09 07:28:35 浏览:220
emc存储维护 发布:2024-07-09 07:28:34 浏览:873
分布式数据库的应用 发布:2024-07-09 07:16:20 浏览:37
倩女脚本辅助 发布:2024-07-09 07:03:58 浏览:368
学编程需要什么电脑 发布:2024-07-09 06:43:10 浏览:835
矩阵解压缩 发布:2024-07-09 06:36:55 浏览:554
rom只读存储器只能读出内容 发布:2024-07-09 05:56:07 浏览:273