当前位置: 首页>移动开发>正文

adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗

Android用户也许会经常碰到以下的问题:


手机很快没电了——应用耗电大



  2)首次/非首次启动应用,进入应用特别慢——应用启动慢



  3)应用使用过程中,越来越卡——CPU能力不足/内存泄露



  4)应用页面卡顿——帧率较低、页面卡顿


性能测试,不然将会直接影响用户体验。



   一.启动时间



  启动时间同样也遵循2-5-8原则,所谓2-5-8原则就是当用户能够在2秒以内启动应用进入第一帧,会感觉系统的响应很快;当用户在2-5秒之间得到响应时,会感觉系统的响应速度还可以;当用户在5-8秒以内得到响应时,会感觉系统的响应速度很慢,但是还可以接受;而当用户在超过8秒后仍然无法得到响应时,会感觉系统糟透了,或者认为系统已经失去响应,而选择退出这个app或者卸载该app。因此启动时间对用户的使用行为起到至关重要的作用。



  这里启动时间分两种情况:首次启动(冷启动)和非首次启动(热启动)应用所花费的时间。



  在测试app启动时间之前,我们先来看看这张经典的Activity生命周期图,如图1。



 

adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_adb命令,第1张



  图1 Activity的生命周期



  流程简介:



  1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法,最后调用onResume,Activity进入运行状态。



  2.当前Activity被其他Activity覆盖或被锁屏:系统会调用onPause方法,暂停当前Activity的执行。



  3.当前Activity由被覆盖状态回到前台或解锁屏:系统会调用onResume方法,再次进入运行状态。



  4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onStop方法,进入停滞状态。



  5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。



  6.当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。



  7.用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。



  从Activity的生命周期流程图,我们可以看出启动时间即onCreate()方法开始执行到onResume()方法执行结束的时间,也就是activity完全启动的时间。



   那么怎么获取该时间



  方法一:通过logcat中ActivityManager的相关数据获取。



  1)ddms设置过滤条件“by Log Tag”为:ActivityManager;



  2)启动app,查看通过DDMS抓取到的log。



adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_Android_02,第2张



  以2345王牌浏览器app为例,可查看获得log如下:



adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_移动开发_03,第3张



  除了通过DDMS抓取外,还可以通过adb logcat命令来获取。



  >adb logcat -d -s ActivityManager|findstr "Displayed">D:\log.txt



adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_Android_04,第4张



  其实两者获取到的信息是一样的(这里演示时非同一次启动,因此启动时间有点差异)。只是DDMS抓的通常是main缓存中的,也就是应用程序打印的日志文件,可以实时查看。而通过命令抓取的话,只能重定向到文件,抓完之后才能查看。



shell也有些许介绍。



  1)获取app包名和类名



  >adb shell dumpsys activity|findstr mFocusedActivity



  2)获取启动时间



  >adb shell am start -W –n <packageName>/<activityName>



adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_shell_05,第5张



  通过比较,可以发现这两种方法获取到的时间是一样的。(注意:这两种方法都是同一次启动,非同一次启动,会有差异)



  对于这几个时间,这里引用知乎作者Gracker答案中的结论:“如果只关心某个应用自身启动耗时,参考TotalTime;如果关心系统启动应用耗时,参考WaitTime;如果关心应用有界面Activity启动耗时,参考ThisTime。”



二.性能测试工具——Emmagee



  Emmagee是一款简单易用的Android性能检测小工具,主要用于监控单个App的CPU,内存,流量,启动耗时,电量,电流等性能状态的变化。



  1)通过官方网站安装(个别机型目前不支持),设置“应用退出后台后仍可监听”便于自动化测试。



  2)通过adb命令在sdcard目录下pull出测试结果csv文档(也可通过app配置邮箱,发送到自己的邮箱)。



adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_启动时间_06,第6张



  3)查看测试结果csv文档,这里以百度浏览器app为例,测试结果如下。



adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_adb命令_07,第7张



  注释:



  已知部分不支持的机型可在此查阅:https://github.com/NetEase/Emmagee/wiki/Some-devices-are-not-supported



  电流: 小于0是放电大于0是充电



  启动时间: 为空是应用已启动或者未搜集到启动时间



  N/A: 不支持或者数据异常



  4)利用excel的功能生成统计图,方便分析。



  

adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗,adb shell dumpsys gfxinfo获取GPU频率 adb可以获取帧率吗_启动时间_08,第8张



  该工具测试的结果可作为测试参考,另外对于帧率还可以用FPS Meter工具进行测试。



   三.利用adb命令监测app相关性能信息



在这里就不一一演示了。 
  
 
  

      //内存使用率 
  
 
  

      1.adb shell dumpsys meminfo <pakagename> 
  
 
  

      2. 通过android提供的API来测试(ActivityManager.MemoryInfo()) 
  
 
  

      //CPU占有率 
  
 
  

      1.adb shell top 
  
 
  

      2.adb shell dumpsys cpuinfo 
  
 
  

      //功耗 
  
 
  

      1.adb shell dumpsys battery


  2.通过android本身的API来测试(ProwerManager.WakeLock)


//查看总体的CPU占用        


         # cat /proc/stat        


         //查看进程的CPU占用        


         # cat /proc/<PID>/stat        


         //查看总体的RAM        


         # cat /proc/meminfo | head -n 4        


         //查看进程的RAM        


         # dumpsys meminfo <packagename>        


         # dumpsys meminfo <PID>        


         //查看进程的当前RAM        


         # procrank        


         //开机后的总流量(字节数)        


         # cat proc/self/net/dev        


         //上传流量/上行流量        


         # cat /proc/uid_stat/2000/tcp_snd        


         //下载流量/下行流量        


         # cat /proc/uid_stat/2000/tcp_rcv



   四.稳定性测试/压力测试



  在前面的博客常用的adb命令中介绍过adb shell monkey来对app进行压力测试,请参考。



https://www.xamrdz.com/mobile/4yd1961447.html

相关文章: