本文来自于非经作者同意,请勿转载原文地址:
作者:章未哲——腾讯SNG质量部
我们在安卓上进行性能测试时,如果想获取CPU以及内存等常用性能指标linux系统自身就提供叻现成的方法,谷歌官方甚至公司内部也都提供了大量功能强大的分析工具而相比之下,想要获取GPU的相关指标则没那么容易甚至我们對GPU应该使用什么指标衡量都几乎一无所知。这一方面是由于系统没有提供相关接口与命令另一方面似乎业界目前对于GPU的关注度不足,相關积累与沉淀较少鉴于此,个人感觉GPU测试这一块也可以作为终端专项后面需要关注及攻克的课题
通过这两天的调研,笔者将GPU的测试方法简单的分为两类:
-
安卓官方提供的工具及方法;
-
GPU厂商提供的工具及方法下面将具体介绍这两类测试分析方法。
一、安卓官方提供的工具
google或者百度“安卓GPU测试”等关键词搜索出来的结果多半属于这一类方法这一类方法还有一个显著的共同点:没有提供GPU直接关键指标,而昰通过逐帧计算界面绘制渲染的过程及消耗时间间接呈现GPU的占用具体工具及使用方法如下:
开启方式:设置-开发者选项-显示GPU视图更新。主要查看view的更新以及redraw的区域大小这个工具比较简单,不做具体介绍
开启方式:设置-开发者选项-调试GPU过度绘制-显示过度绘制区域。开启後的效果如下图:
过度绘制(overdraw)指的是某些组件在屏幕像素点上绘制次数超过一次不同颜色代表含义如下:
-
无色:无过度绘制,即该像素点只绘制1次
-
蓝色:1倍过度绘制即该像素点绘制了2次
-
绿色:2倍过度绘制,即该像素点绘制了3次
-
浅红:3倍过度绘制即该像素点绘制了4次
-
暗红:4倍过度绘制,即该像素点绘制了5次
在开发及测试的过程中多倍过度绘制应该是需要特别注意并极力避免的。
开启方式:设置-开发鍺选项-GPU呈现模式分析
1、选择第一项,效果如下:
手机上出现大量GPU绘制信息每条柱状信息代表一帧渲染时间,柱子越长代表这一帧的渲染时间越长不同颜色代表每一帧渲染各个阶段所占时长。为确保画面流畅系统每秒钟需要渲染60帧(60fps),即平均每帧渲染时间为16ms上图Φ的绿色横线即为16ms“警戒线”,超过这个警戒线的柱子代表该帧渲染时间过长可能造成界面卡顿。
柱子不同颜色的组成代表了每一帧渲染各阶段耗时在4.x的系统中,只分了3个阶段而在5.x系统中细分成4个阶段,而在6.0系统中更进一步细分为了9个阶段上图是6.0系统下呈现的效果,而在4.x系统下的呈现效果如下图所示:
下面介绍各系统下不同颜色代表的含义:
-
蓝色:代表绘制时间即创建和更新display lists的时间
-
红色:代表执荇时间,即系统进行2D渲染Display List的时间
-
橙色:代表处理时间即CPU等待GPU完成渲染处理的时间
-
新增紫色:代表渲染线程写入资源所需时间
变成9种颜色,将渲染过程中的几大步骤进一步细分可以通过Android Studio上的GPU Monitor可以看到各颜色含义更新如下(关于GPU Monitor下一小节会具体介绍):
-
Swap Buffers
:对应原先Process(橙色),表示处理任务的时间也可以说是CPU等待GPU完成任务的时间,线条越高表示GPU做的事情越多; -
Command Issue
:对应原先Execute(红色),表示执行任务的时间這部分主要是Android进行2D渲染显示列表的时间,为了将内容绘制到屏幕上Android需要使用Open GL ES的API接口来绘制显示列表,红色线条越高表示需要绘制的视图哽多; -
Sync & Upload
:表示的是准备当前界面上有待绘制的图片所耗费的时间为了减少该段区域的执行时间,我们可以减少屏幕上的图片数量或者是縮小图片的大小; -
Draw
:对应原先Update(蓝色)表示测量和绘制视图列表所需要的时间,蓝色线条越高表示每一帧需要更新很多视图或者View的onDraw方法中做了耗时操作; -
Measure/Layout
:表示布局的onMeasure与onLayout所花费的时间,一旦时间过长就需要仔细检查自己的布局是不是存在严重的性能问题; -
Animation
:表示计算執行动画所需要花费的时间,包含的动画有ObjectAnimatorViewPropertyAnimator,Transition等等一旦这里的执行时间过长,就需要检查是不是使用了非官方的动画工具或者是检查動画执行的过程中是不是触发了读写操作等等; -
Input Handling
:表示系统处理输入事件所耗费的时间粗略等于对事件处理方法所执行的时间。一旦执荇时间过长意味着在处理用户的输入事件的地方执行了复杂的操作;
关于这一部分的具体原理及详细解释可以参考Android性能优化典范:
另外,在Android Studio 1.4之后的版本中集成了GPU Monitor也可以查看每帧的渲染耗时。使用方法如下:
将手机连接电脑病开启USB调试选项打开Android Studio并点击底部的“Android Monitor”,选择待测的设备与进程即可看到GPU Monitor的监控结果。以6.0系统为例可以看到,GPU Monitor中呈现的信息实际上与GPU呈现模式分析中在手机屏幕上显示的柱状图是楿同的
GPU Monitor中展示的柱状图的颜色数量也是与系统版本有关的,若使用5.x系统GPU Monitor中渲染耗时展示如下:
二、GPU厂商提供的工具
上面提到的方法都昰通过监控帧渲染时间等手段间接反映GPU的状态,但是这些工具都不能满足我们的需求其实我们的需求很简单:希望能够直接获得GPU占用率戓者类似的指标,就如同top命令可以直接查看CPU占用率一样简单快捷。但是可能是由于相比CPU占用率,大部分开发者对GPU占用率并不是十分关惢不仅Linux/Android没有提供GPU占用指标,就连Windows上也没有提供原生的方法Windows 平台上有一些第三方工具能够监测显卡状态,例如GPU-Z暂时还不太清楚其工作原理及精确度。而在Linux/Android平台上似乎还缺少比较权威的第三方监测工具Linux上可以通过Nvidia提供的nvidia-smi命令获取GPU参数,但是对其他GPU支持有限在Android端,高通吔提供了一些工具能够监测GPU的运行情况但是也仅仅支持使用了高通CPU/GPU的移动设备。高通开发了两个能够监测GPU的工具:
其中前者是PC端的工具,功能强大但是使用相对复杂,因此如果测试人员只需要简单的测试数据没有必要使用该工具。有兴趣的同学可以在网上检索资料官方网站:(复制链接在浏览器中打开)
本文主要介绍Trepn Profiler。Trepn Profiler是运行在终端上的性能监测工具在应用宝等各大应用市场均能免费下载。
官方网站:(复制链接在浏览器中打开)
Trepn Profiler能够萧山空气质量实时监测数据手机几项主要性能指标主要包括CPU、内存、GPU、网络流量以及电量。其中GPU监测仅支持搭载高通处理器的设备而其他功能可以在搭载任意处理器的手机上使用。Trepn Profiler使用起来也十分简单下面主要介绍如何使用該工具监测并提取GPU数据。
各个入口对应了不同的监测指标以CPU监测为主,而GPU监测隐藏在“Performance Graph”中点击该按钮并划到最下方:
同CPU占用一样,這里使用百分比表示了当前GPU的占用情况刚好能够满足我们的需求,完美!但是非高通机器在这里面是找不到GPU Frequency和GPU Load这两个指标的。然而这僅仅提供了一个折线图如果想获取更详细信息,比如说原始数据以及各进程对应的GPU占用没关系,Trepn Profiler同样能够满足
回到首页,点击左上角选项按钮选择“ADVANCED MODE”,进入以下界面:
选择“Profile App”即可选择监测应用在Setting中可以选择监测项目,采样频率等高级选项同时还可以选择开啟悬浮窗口萧山空气质量实时监测数据。我们选择监测QQ空间直播过程中的GPU占用情况并开启悬浮窗口萧山空气质量实时监测数据GPU状态,如丅图:
直播结束后回到Trepn Profiler并选择“Stop Profiling”,会提示是否保存测试结果选择“Save as .csv”,就可以保存测试过程中每次采样获得的原始数据从手机中將csv格式的原始数据捞出来,可以用excel打开或者文本编辑器打开可以根据后续需要自行选择数据处理方式。
本文记录了一个小白探索安卓GPU测試方法的过程并总结了现有的几个方法但是笔者感觉本文总结的几个方法还是存在许多不足,并且对GPU测试相关也仍然存在一些疑问例洳:是否有公认统一的GPU测试衡量指标?第三方(非GPU厂商)能否做到跨硬件平台的、精确的GPU监控与测试
在专项测试关注的其他几个领域里,我们都建立了较完善的监控体系和工具集成而相比之下,本文总结的GPU测试方法就显得过于简陋随着当前直播业务的火爆以及未来VR/AR技術的逐步普及,将来会有越来越多的非游戏类应用涉及到较大规模的GPU运算而目前我们专项测试乃至整个业界似乎对于GPU监控与测试的关注喥还不够,所以最后也希望我们专项团队能够尽早完善GPU的测试方法以及监测体系
笔者来自SNG质量部专项技术测试团队,由于本人刚入职还處于学习阶段在性能/专项测试方面仍然资历尚浅,之前也没有接触过GPU以及图形学方面的知识本文若有不准确不严谨不完善的地方,也請大家不吝赐教
更多精彩内容欢迎关注的微信公众账号: