Android性能测试
2016-10-12 14:55
169 查看
那些年我们用过的显示性能指标
Android客户端性能优化(魅族资深工程师毫无保留奉献)
这一次,我优化了37%的内存
Android性能测试之fps获取
Android应用性能测试之CPU和内存占用
android如何查看cpu的占用率和内存泄漏
如何解决CPU使用率过高问题
ADB Shell Commands
Android应用性能测试
强烈推荐转载-Android 性能测试(抱歉,没找到原文)
Android 性能测试实践(四) 流量
内存使用
响应时间/加载速度
显示性能(FPS)
电量、流量
Crash
ANR
更多内容请参考:ADB Shell Commands
**CPU利用率是指:**CPU执行非系统空闲进程的时间 / CPU总的执行时间。
而Android关于进程使用率的限制:
前台进程不超过95%,后台进程5%, 但是在系统没有前台进程时,后台进程可以超过5%
(关于什么是前/后台进程,我就不啰嗦了)
界面卡顿
响应慢,容易引起ANR
查看前5个进程CPU情况
注:PCY显示是前台进程(fg)还是后台进程(bg)的
日志说明(来自:Android应用性能测试)
查看CPU信息
查看CPU总使用率 :在/proc/stat 下有详细的CPU使用情况,可以使用命令
CPU后面的几位数字分别是
user 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
system 从系统启动开始累计到当前时刻,处于核心态的运行时间
idle 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间
iowait 从系统启动开始累计到当前时刻,IO等待时间
irq 从系统启动开始累计到当前时刻,硬中断时间
softirq 从系统启动开始累计到当前时刻,软中断时间
所以totalCpuTime这个7个属性的和.
CPU总数用率的算法是:100*((totalCpuTimeS-totalCpuTimeF) -(idelS-idelF))/ (totalCpuTimeS-totalCpuTimeF)
详细内容参考:Android获取cpu使用率,剩余内存和硬盘容量
查看当前进程的CPU使用率:/proc/pid/stat下则是该pid的CPU使用情况。先找到自己的进程pid,然后再查看(例如查看com.le.bbs)
其中
utime 该任务在用户运行状态的时间
stime 该任务在核心运行的时间
cutime 所有已死线程在用户状态运行状态的时间
cstime 所有已死线程在核心的运行时间
所以processCpuTime为这个四个属性的和。当前进行所占CPU的算法是:100*(processCpuTimeS-processCpuTimeF)/(totalCpuTimeS-totalCpuTimeF)
详细内容参考:Android获取cpu使用率,剩余内存和硬盘容量
以下是在dos中,在linux中可以直接adb shell getprop|grep
查看内存使用率状况
注:PCY显示是前台进程(fg)还是后台进程(bg)的
RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
1. 首次启动 –应用首次启动所花费的时间
2. 非首次启动 –应用非首次启动所花费的时间
3. 应用界面切换
通过使用android提供的DisplayManager来获取所有Activity的启动时间。
关于缺陷定位过程中连续掉帧阈值的选取,可参考维基百科中提到几个重要的帧率数值:
12 fps:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10-12帧的时候,就会认为是连贯的
24 fps:有声电影的拍摄及播放帧率均为每秒24帧,对一般人而言已算可接受
30 fps:早期的高动态电子游戏,帧率少于每秒30帧的话就会显得不连贯,这是因为没有动态模糊使流畅度降低
60 fps:在实际体验中,60帧相对于30帧有着更好的体验
以上各数据分别对应: 0 帧、1帧、2.5帧、5~6帧。(这就是为啥选择3/6的原因)
测试显示性能-基于Android M 开发者预览版
中等负荷:应用正常操作
高负荷:应用极限操作
流量测试包括以下测试项:
a、应用首次启动流量提示
b、应用后台连续运行2小时的流量值
c、应用高负荷运行的流量峰值
d、应用中等负荷运行时的流量均值
以下为net.txt内容:
这边的wlan0代表wifi 上传下载量标识! 上传下载量单位是字节可以/1024换算成KB
这里可以看到下载的字节数 、数据包 和 发送的字节数 、数据包
小技巧:wlan0这些值如何初始化0 很简单 你打开手机飞行模式再关掉就清0了
通过UID
其中第6和8列为 rx_bytes(接收数据)和tx_bytes(传输数据)包含tcp,udp等所有网络流量传输的统计。一个uid可能对应多个 进程,所以这有两行流量是累加的就求和就行。
第三方工具:友盟统计、百度统计
安测试
腾讯APT
Android客户端性能优化(魅族资深工程师毫无保留奉献)
这一次,我优化了37%的内存
Android性能测试之fps获取
Android应用性能测试之CPU和内存占用
android如何查看cpu的占用率和内存泄漏
如何解决CPU使用率过高问题
ADB Shell Commands
Android应用性能测试
强烈推荐转载-Android 性能测试(抱歉,没找到原文)
Android 性能测试实践(四) 流量
测试维度
CPU占用率内存使用
响应时间/加载速度
显示性能(FPS)
电量、流量
Crash
ANR
命令介绍
本文涉及到的命令主要有:>表示输出内容写入到文件 eg.
echo 121212 > 12.txt
>>表示输出内容追加到文件 eg.
echo 343434 >> 12.txt
Ctrl + c快捷键:终止命令
adb shell
ps查看进程的,查看某一进程
adb shell ps <packageName>而非
adb shell ps | grep <packageName>
top查看占用率
top -d 1 | grep com.baidu.BaiduMap(以百度地图为例,每一秒打印一次资源利用情况)
adb shell dumpsys <service name>打印当前系统信息。
adb shell dumpsys输出信息的开始部分就是所有运行的service;
adb shell service list同样查看所以运行的service
查询到运行的system service后,就可以在dumpsys后面加上service的名字,查看指定的service信息。 adb shell dumpsys activity adb shell dumpsys cpuinfo adb shell dumpsys battery adb shell dumpsys window(最后部分可以看到分辨率的信息) 有些service能够接收额外的参数,我们可以使用-h查看帮助信息。 adb shell dumpsys package -h adb shell dumpsys activity -h
adb shell cat /proc/cpuinfo查看CPU信息
adb shell cat /proc/stat查看CPU使用率
adb shell dumpsys gfxinfo <packageName>查看帧率FPS
adb shell pm list package列出所有的包名
adb shell dumpsys package:列出所有的安装应用的信息
adb shell dumpsys package <packageName>:查看某个包的具体信息
更多内容请参考:ADB Shell Commands
维度分析
CPU占用率
CPU使用背景知识
在开发过程中,我们会遇到手机的CPU使用率过高而引发的问题,那接下来,我对这方面知识做些整理及归纳:**CPU利用率是指:**CPU执行非系统空闲进程的时间 / CPU总的执行时间。
而Android关于进程使用率的限制:
前台进程不超过95%,后台进程5%, 但是在系统没有前台进程时,后台进程可以超过5%
(关于什么是前/后台进程,我就不啰嗦了)
可能引发的问题
整体性能降低界面卡顿
响应慢,容易引起ANR
数据获取
通过ADT中的DDMS来查看adb shell $ dumpsys cpuinfo|grep <package>
扩展阅读
top命令如下130|shell@hnSCL-Q:/ $ top -h Usage: top [ -m max_procs ] [ -n iterations ] [ -d delay ] [ -s sort_column ] [ -t ] [ -h ] -m num Maximum number of processes to display.// 最多显示多少个进程 -n num Updates to show before exiting.// 刷新次数 -d num Seconds to wait between updates.// 刷新间隔时间(默认5秒) -s col Column to sort by (cpu,vss,rss,thr).// 按哪列排序 -t Show threads instead of processes. // 显示线程信息而不是进程 -h Display this help screen.// 显示帮助文档
查看前5个进程CPU情况
shell@hnSCL-Q:/ $ top -m 5 -s cpu User 1%, System 2%, IOW 0%, IRQ 0% User 9 + Nice 1 + Sys 18 + Idle 595 + IOW 0 + IRQ 0 + SIRQ 0 = 623 PID PR CPU% S #THR VSS RSS PCY UID Name 11003 0 2% R 1 2788K 1228K unk shell top 409 0 0% S 8 9864K 1376K fg root /system/bin/jankservice 872 0 0% S 172 1885420K 199516K unk system system_server 207 2 0% S 1 0K 0K fg root ksoftirqd/2 2904 0 0% S 6 5708K 276K unk shell /sbin/adbd
注:PCY显示是前台进程(fg)还是后台进程(bg)的
日志说明(来自:Android应用性能测试)
User 35%, System 13%, IOW 0%, IRQ 0% // CPU占用率 User 109 + Nice 0 + Sys 40 + Idle 156 + IOW 0 + IRQ 0 + SIRQ 1 = 306 // CPU使用情况 PID CPU% S #THR VSS RSS PCY UID Name // 进程属性 xx xx% x xx xx xx xx xx xx CPU占用率: User 用户进程 System 系统进程 IOW IO等待时间 IRQ 硬中断时间 CPU使用情况(指一个最小时间片内所占时间,单位jiffies。或者指所占进程数): User 处于用户态的运行时间,不包含优先值为负进程 Nice 优先值为负的进程所占用的CPU时间 Sys 处于核心态的运行时间 Idle 除IO等待时间以外的其它等待时间 IOW IO等待时间 IRQ 硬中断时间 SIRQ 软中断时间 进程属性: PID 进程在系统中的ID CPU% 当前瞬时所以使用CPU占用率 S 进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数。 #THR 程序当前所用的线程数 VSS Virtual Set Size 虚拟耗用内存(包含共享库占用的内存) RSS Resident Set Size 实际使用物理内存(包含共享库占用的内存) PCY OOXX,不知道什么东东 UID 运行当前进程的用户id Name 程序名称android.process.media // ps:内存占用大小有如下规律:VSS >= RSS >= PSS >= USS // PSS Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存) // USS Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
查看CPU信息
adb shell cat /proc/cpuinfo
查看CPU总使用率 :在/proc/stat 下有详细的CPU使用情况,可以使用命令
adb shell cat /proc/stat
shell@hnSCL-Q:/ $ cat proc/stat cpu 17082742 1298092 14400241 128401698 1072426 4115 524675 0 0 0
CPU后面的几位数字分别是
user 从系统启动开始累计到当前时刻,处于用户态的运行时间,不包含 nice值为负进程。
nice 从系统启动开始累计到当前时刻,nice值为负的进程所占用的CPU时间
system 从系统启动开始累计到当前时刻,处于核心态的运行时间
idle 从系统启动开始累计到当前时刻,除IO等待时间以外的其它等待时间
iowait 从系统启动开始累计到当前时刻,IO等待时间
irq 从系统启动开始累计到当前时刻,硬中断时间
softirq 从系统启动开始累计到当前时刻,软中断时间
所以totalCpuTime这个7个属性的和.
CPU总数用率的算法是:100*((totalCpuTimeS-totalCpuTimeF) -(idelS-idelF))/ (totalCpuTimeS-totalCpuTimeF)
详细内容参考:Android获取cpu使用率,剩余内存和硬盘容量
查看当前进程的CPU使用率:/proc/pid/stat下则是该pid的CPU使用情况。先找到自己的进程pid,然后再查看(例如查看com.le.bbs)
shell@hnSCL-Q:/ $ ps com.le.bbs USER PID PPID VSIZE RSS WCHAN PC NAME u0_a170 961 374 1603376 96532 ffffffff 00000000 S com.le.bbs shell@hnSCL-Q:/ $ cat /proc/961/stat 961 (com.le.bbs) S 374 374 0 0 -1 4194624 83875 0 1 0 2785 532 0 0 20 0 28 0 698 196143 1641857024 24133 4294967295 1 1 0 0 0 0 4612 0 38136 4294967295 0 0 17 1 0 0 0 0 0 0 0 0 0 0 0 0 0 shell@hnSCL-Q:/ $
其中
2785 532 0 0四个数字分别是
utime 该任务在用户运行状态的时间
stime 该任务在核心运行的时间
cutime 所有已死线程在用户状态运行状态的时间
cstime 所有已死线程在核心的运行时间
所以processCpuTime为这个四个属性的和。当前进行所占CPU的算法是:100*(processCpuTimeS-processCpuTimeF)/(totalCpuTimeS-totalCpuTimeF)
详细内容参考:Android获取cpu使用率,剩余内存和硬盘容量
内存使用
内存限制
adb shell进入手机,这此参数被纪录在/system/build.prop中,如果想直接查看可以使用adb shell getpropdalvik.vm.heapgrowthlimit单个应用程序最大内存限制,超过这个值会产生OOM
dalvik.vm.heapstartsize应用启动后分配的初始内存
dalvik.vm.heapsize单个java虚拟机最大的内存限制,超过这个值会产生OOM
以下是在dos中,在linux中可以直接adb shell getprop|grep
C:\Users\bugeikan :-)>adb shell shell@hnSCL-Q:/ $ cat /system/build.prop|grep heapgrowthlimit dalvik.vm.heapgrowthlimit=192m shell@hnSCL-Q:/ $ cat /system/build.prop|grep heapstartsize dalvik.vm.heapstartsize=14m shell@hnSCL-Q:/ $ cat /system/build.prop|grep heapsize dalvik.vm.heapsize=512m shell@hnSCL-Q:/ $
数据获取
查看内存使用情况shell@hnSCL-Q:/ $ dumpsys meminfo com.le.bbs Applications Memory Usage (kB): Uptime: 1135059305 Realtime: 7004018879 ** MEMINFO in pid 3336 [com.le.bbs] ** Pss Private Private Swapped Heap Heap Heap Total Dirty Clean Dirty Size Alloc Free ------ ------ ------ ------ ------ ------ ------ Native Heap 4169 4136 0 0 5748 5427 320 Dalvik Heap 23306 23028 0 0 34152 29625 4527 Dalvik Other 578 576 0 0 Stack 220 220 0 0 Gfx dev 9600 9600 0 0 Other dev 5 0 4 0 .so mmap 728 188 144 0 .apk mmap 260 0 44 0 .ttf mmap 252 0 128 0 .dex mmap 6444 0 6320 0 .oat mmap 1459 0 368 0 .art mmap 1210 948 0 0 Other mmap 24 4 8 0 Unknown 129 128 0 0 TOTAL 48384 38828 7016 0 39900 35052 4847 Objects Views: 133 ViewRootImpl: 1 AppContexts: 3 Activities: 1 Assets: 3 AssetManagers: 3 Local Binders: 7 Proxy Binders: 12 Parcel memory: 3 Parcel count: 12 Death Recipients: 0 OpenSSL Sockets: 0 SQL MEMORY_USED: 0 PAGECACHE_OVERFLOW: 0 MALLOC_SIZE: 0 shell@hnSCL-Q:/ $
查看内存使用率状况
adb shell top
User 1%, System 3%, IOW 0%, IRQ 0% User 8 + Nice 0 + Sys 21 + Idle 599 + IOW 0 + IRQ 0 + SIRQ 0 = 628 PID PR CPU% S #THR VSS RSS PCY UID Name 27047 0 2% R 1 2800K 1240K unk shell top 409 0 0% S 8 9864K 1376K fg root /system/bin/jankservice 9883 2 0% S 6 5812K 424K unk shell /sbin/adbd 13754 3 0% S 39 1659460K 59560K bg u0_a68 com.tencent.mobileqq:MSF
注:PCY显示是前台进程(fg)还是后台进程(bg)的
内存耗用:VSS/RSS/PSS/USS 的介绍
VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)
PSS - Proportional Set Size 实际使用的物理内存(比例分配共享库占用的内存)
USS - Unique Set Size 进程独自占用的物理内存(不包含共享库占用的内存)
一般来说内存占用大小有如下规律:VSS >= RSS >= PSS >= USS
响应时间/加载速度
响应时间主要分为3类1. 首次启动 –应用首次启动所花费的时间
2. 非首次启动 –应用非首次启动所花费的时间
3. 应用界面切换
数据来源
adb shell am start -W <pkg/activity>可参考Android_adb shell am/pm使用
通过使用android提供的DisplayManager来获取所有Activity的启动时间。
C:\Users\yuhushuan>adb logcat > d:\test\logcat.log ^C C:\Users\yuhushuan>d: D:\>cd test D:\test>find "Displayed" logcat.log > all.log //通过“Displayed”过滤
显示性能
性能指标
指标名称 | 指标意义 | 基础数据来源 | 采集方式 | 用途 |
---|---|---|---|---|
FPS | 系统合成帧率 | SurfaceFlinger | adb shell | 监控 |
Aggregate frame stats | 应用跳帧次数、幅度 | FrameInfo | adb shell | 监控/上报 |
Jankiness count | (估算)应用跳帧次数 | FrameInfo(128帧) | adb shell | 定位 |
Max accumulated frames | (估算)应用跳帧幅度 | FrameInfo(128帧) | adb shell | 定位 |
SM | 应用绘制轮询频率 | Choreographer | 多种方式 | 监控 |
Skipped frames | 应用跳帧次数、幅度 | Choreographer | 多种 | 监控/定位/上报 |
数据来源
命令行获取adb shell dumpsys gfxinfo <PackageName>主要数据来源:gfxinfo(Profile data in ms)
adb shell dumpsys SurfaceFlinger --latency <pkg/activity>Android性能测试之fps获取
数据参考
FrameInfo 相关指标无法直接进行缺陷定位,但 FrameInfo 当中包含了大量详尽的绘制基础数据,对于缺陷定位也有较大帮助;关于缺陷定位过程中连续掉帧阈值的选取,可参考维基百科中提到几个重要的帧率数值:
12 fps:由于人类眼睛的特殊生理结构,如果所看画面之帧率高于每秒约10-12帧的时候,就会认为是连贯的
24 fps:有声电影的拍摄及播放帧率均为每秒24帧,对一般人而言已算可接受
30 fps:早期的高动态电子游戏,帧率少于每秒30帧的话就会显得不连贯,这是因为没有动态模糊使流畅度降低
60 fps:在实际体验中,60帧相对于30帧有着更好的体验
以上各数据分别对应: 0 帧、1帧、2.5帧、5~6帧。(这就是为啥选择3/6的原因)
相关阅读
[Fps Versus Frame Time](http://www.mvps.org/directx/articles/fps_versus_frame_time.htm) [量化和优化用户与 Android 设备之间的交互](https://software.intel.com/zh-cn/android/articles/quantify-and-optimize-the-user-interactions-with-android-devices)
测试显示性能-基于Android M 开发者预览版
电量、流量
流量测试,同样需要引入几个名词中等负荷:应用正常操作
高负荷:应用极限操作
流量测试包括以下测试项:
a、应用首次启动流量提示
b、应用后台连续运行2小时的流量值
c、应用高负荷运行的流量峰值
d、应用中等负荷运行时的流量均值
数据来源
通过PIDD:\test>adb shell ps com.le.bbs USER PID PPID VSIZE RSS WCHAN PC NAME u0_a170 29273 374 1679132 173580 ffffffff 00000000 S com.le.bbs D:\test>adb shell cat /proc/29273/net/dev > net.txt D:\test>
以下为net.txt内容:
Inter-| Receive | Transmit face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed r_rmnet_data7: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r_rmnet_data4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 wlan0: 36971167 30768 0 5 0 0 0 0 1731561 20200 0 0 0 0 0 0 r_rmnet_data1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 p2p0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 sit0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 dummy0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet0: 157348588 265691 0 0 0 0 0 0 41547752 311861 0 0 0 0 0 0 r_rmnet_data6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r_rmnet_data3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 lo: 279636994 548567 0 0 0 0 0 0 279636994 548567 0 0 0 0 0 0 rmnet_data7: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet_data6: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet_data5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet_data4: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet_data3: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet_data2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet_data1: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 rmnet_data0: 152976131 263638 0 0 0 0 0 0 41547752 311861 0 0 0 0 0 0 r_rmnet_data8: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r_rmnet_data0: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r_rmnet_data5: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 r_rmnet_data2: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
这边的wlan0代表wifi 上传下载量标识! 上传下载量单位是字节可以/1024换算成KB
这里可以看到下载的字节数 、数据包 和 发送的字节数 、数据包
小技巧:wlan0这些值如何初始化0 很简单 你打开手机飞行模式再关掉就清0了
通过UID
adb shell cat /proc/<pid>/status测试pid=29273,查看结果uid=10170
adb shell cat /proc/net/xt_qtaguid/stats > allnet.txt
find "10170" allnet.txt
D:\test>adb shell cat /proc/net/xt_qtaguid/stats > allnet.txt D:\test>find "10170" allnet.txt ---------- ALLNET.TXT idx iface acct_tag_hex uid_tag_int cnt_set rx_bytes rx_packets tx_bytes tx_packets rx_tcp_bytes rx_tcp_packets rx_udp_bytes rx_udp_packets rx_other_bytes rx_other_packets tx_tcp_bytes tx_tcp_packets tx_udp_bytes tx_udp_packets tx_other_bytes tx_other_packets 56 wlan0 0x0 10170 0 10729 55 6033 100 10729 55 0 0 0 0 6033 100 0 0 0 0 57 wlan0 0x0 10170 1 3245372 3410 254265 3412 3245372 3410 0 0 0 0 254265 3412 0 0 0 0 154 rmnet_data0 0x0 10170 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 155 rmnet_data0 0x0 10170 1 2261 4 482 5 2261 4 0 0 0 0 482 5 0 0 0 0
其中第6和8列为 rx_bytes(接收数据)和tx_bytes(传输数据)包含tcp,udp等所有网络流量传输的统计。一个uid可能对应多个 进程,所以这有两行流量是累加的就求和就行。
Crash
数据获取
将crash log上报给服务器,不再赘述第三方工具:友盟统计、百度统计
ANR
第三方测试工具
GT安测试
腾讯APT
相关文章推荐
- Android性能专项测试之Heap Viewer工具
- Android性能专项测试之Systrace工具
- Android 性能测试实践(一)
- android ORM框架的性能简单测试(androrm vs ormlite)
- Android 性能测试
- Android UI性能专项测试及优化
- 【Android测试】【第二节】性能——CPU时间片
- APT(Android Performance Testing Tools)安卓平台高效性能测试工具
- 【腾讯TMQ】【Android场景化性能测试】UI流畅度篇
- android应用性能测试之CPU和内存占用
- Android性能专项测试之battery-historian试用
- Android 性能测试实践(三)Cpu
- Android性能专项测试之GPU Monitor
- Android 性能测试初探(二)
- Android应用性能测试
- Android 应用性能测试方案一之 log 分析
- android客户端性能测试 (一)
- Android性能测试:CPU内存监控工具APT
- android性能测试-腾讯GT使用说明
- Android 性能测试及优化