没有合适的资源?快使用搜索试试~ 我知道了~
首页Android专项测试之GPU测试探索
Android专项测试之GPU测试探索
441 浏览量
更新于2023-05-27
评论 1
收藏 626KB PDF 举报
我们在安卓上进行性能测试时,如果想获取CPU以及内存等常用性能指标,linux系统自身就提供了现成的方法,谷歌官方甚至公司内部也都提供了大量功能强大的分析工具。而相比之下,想要获取GPU的相关指标则没那么容易,甚至我们对GPU应该使用什么指标衡量都几乎一无所知。这一方面是由于系统没有提供相关接口与命令,另一方面似乎业界目前对于GPU的关注度不足,相关积累与沉淀较少,鉴于此,个人感觉GPU测试这一块也可以作为终端专项后面需要关注及攻克的课题。通过这两天的调研,笔者将GPU的测试方法简单的分为两类:安卓官方提供的工具及方法;GPU厂商提供的工具及方法。下面将具体介绍这两类测试分析方法。google
资源详情
资源评论
资源推荐

Android专项测试之专项测试之GPU测试探索测试探索
背景
我们在安卓上进行性能测试时,如果想获取CPU以及内存等常用性能指标,linux系统自身就提供了现成的方法,谷歌
官方甚至公司内部也都提供了大量功能强大的分析工具。而相比之下,想要获取GPU的相关指标则没那么容易,甚至
我们对GPU应该使用什么指标衡量都几乎一无所知。这一方面是由于系统没有提供相关接口与命令,另一方面似乎业
界目前对于GPU的关注度不足,相关积累与沉淀较少,鉴于此,个人感觉GPU测试这一块也可以作为终端专项后面需
要关注及攻克的课题。
通过这两天的调研,笔者将GPU的测试方法简单的分为两类:
安卓官方提供的工具及方法;
GPU厂商提供的工具及方法。
下面将具体介绍这两类测试分析方法。
一、安卓官方提供的工具
google或者百度“安卓GPU测试”等关键词搜索出来的结果多半属于这一类方法。这一类方法还有一个显著的共同点:
没有提供GPU直接关键指标,而是通过逐帧计算界面绘制渲染的过程及消耗时间间接呈现GPU的占用。具体工具及使
用方法如下:
1. GPU View Updates
开启方式:设置-开发者选项-显示GPU视图更新。主要查看view的更新以及redraw的区域大小。这个工具比较简单,
不做具体介绍。
2. Show GPU Overdraw
开启方式:设置-开发者选项-调试GPU过度绘制-显示过度绘制区域。开启后的效果如下图:
过度绘制(overdraw)指的是某些组件在屏幕像素点上绘制次数超过一次,不同颜色代表含义如下:
无色:无过度绘制,即该像素点只绘制1次

蓝色:1倍过度绘制,即该像素点绘制了2次
绿色:2倍过度绘制,即该像素点绘制了3次
浅红:3倍过度绘制,即该像素点绘制了4次
暗红:4倍过度绘制,即该像素点绘制了5次
在开发及测试的过程中,多倍过度绘制应该是需要特别注意并极力避免的。
3. Profile GPU Rendering
开启方式:设置-开发者选项-GPU呈现模式分析。
里面有两个选项:
在屏幕上显示条形图;
在 adb shell dumpsys gfxinfo中。
1、选择第一项,效果如下:
手机上出现大量GPU绘制信息,每条柱状信息代表一帧渲染时间,柱子越长代表这一帧的渲染时间越长,不同颜色代
表每一帧渲染各个阶段所占时长。为确保画面流畅,系统每秒钟需要渲染60帧(60fps),即平均每帧渲染时间为
16ms,上图中的绿色横线即为16ms“警戒线”,超过这个警戒线的柱子代表该帧渲染时间过长,可能造成界面卡顿。
柱子不同颜色的组成代表了每一帧渲染各阶段耗时,在4.x的系统中,只分了3个阶段,而在5.x系统中细分成4个阶段,
而在6.0系统中更进一步细分为了9个阶段,上图是6.0系统下呈现的效果,而在4.x系统下的呈现效果如下图所示:

下面介绍各系统下不同颜色代表的含义:
4.x:
蓝色:代表绘制时间,即创建和更新display lists的时间
红色:代表执行时间,即系统进行2D渲染Display List的时间
橙色:代表处理时间,即CPU等待GPU完成渲染处理的时间
5.x:
新增紫色:代表渲染线程写入资源所需时间
6.x:
变成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:表示计算执行动画所需要花费的时间,包含的动画有ObjectAnimator,ViewPropertyAnimator,Transition
等等。一旦这里的执行时间过长,就需要检查是不是使用了非官方的动画工具或者是检查动画执行的过程中是不是触
发了读写操作等等;
Input Handling:表示系统处理输入事件所耗费的时间,粗略等于对事件处理方法所执行的时间。一旦执行时间过长,
意味着在处理用户的输入事件的地方执行了复杂的操作;
Misc Time/Vsync Delay:表示在主线程执行了太多的任务,导致UI渲染跟不上vSync的信号而出现掉帧的情况;出现
该线条的时候,可以在Log中看到这样的日志: I/Choreographer(*): Skipped XXX frames! The application may be
doing too much work on its main thread
关于这一部分的具体原理及详细解释可以参考Android性能优化典范:
http://hukai.me/android-performance-patterns/
http://hukai.me/android-performance-patterns-season-5/
(复制链接在浏览器中打开)
2、选择第二项“adb shell dumpsys gfxinfo”,可以在终端中通过“adb shell dumpsy gfxoinfo taskName”命令获取对应进
程的帧渲染日志文件。
4. GPU Monitor
另外,在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的移动设备。高通开发了两个能够监测
剩余17页未读,继续阅读


















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0