首页 > 编程知识 正文

安卓测试fps软件,手机测试游戏fps的软件

时间:2023-05-03 09:44:33 阅读:189562 作者:1991

安卓的fps测试是我打开测试开发大门的关键。 两年前的今天,关于安卓性能测试的资料非常少,以fps为例,网络上的文章寥寥无几,但直到今年,很多资料已经在各个技术论坛上被大家看到了。 我一直在寻找写这个技术探索的机会。 所以,心比不上行动。

FPS(framespersecond )通常表示在我们屏幕上每秒显示的图像)帧数,反映了当前硬件上APP演示的性能消耗。 例如,我们在吸入CS时,总是关注fps是否很高。 越高,平滑度越高。 因此,fps是应用性能测试中的重要指标之一。

Androidapp需要从与Android图形显示相关的模块开始测量fps的数值。 一种常用的方法是切入安卓的SurfaceFlinger服务,它是图形显示过程中软件层和硬件层的交互点,是至关重要的一环。 SurfaceFlinger分析每个合成的app中的图层,并通过硬件渲染合成的图像数据。 由于硬件渲染的结构很复杂,Android系统将硬件操作抽象出来以便于调用。 与此SurfaceFlinger对接的层称为硬件抽象层(HAL )。 SurfaceFlinger和HAL在功能上部分结合,Surface合成的一些工作依赖于HAL。

那么,如何从SurfaceFlinger检索fps数据呢? 大致参考一下《Android性能测试之fps获取》的句子吧。 这种方式成功率很高,而且我家的手机虽然行不通,但是不用路线,所以很方便

首先,adb允许您导出SurfaceFlinger服务的运行时信息。

从ADB shell dumpsyssurfaceflingerdump输出的信息包括在surfaceflinger中对每个层进行加工的信息以及硬件显示层上的层次。 例如以下所示。

layer0x 796 c 18 e 800 (com.supercell.clash royale.Kunlun/com.supercell.clash royale.gameappkunlun #0) regiontrantranspanspaspare 2240 ] regionvisibleregion (this=0x 796 c18e 810,count=1) [ 0,0,0,0,0 ] regionsurfacedamamon count=1] [ 0,0,0,0,0 crop=) ) 0,0,1080,1080,invalidate=0,dataspace=(deprecated ) sRGB Linear Full range,pixel format=rgba _ 8888 ate flags=0x00000000 1.00 )客户端=0x 796 FB 03ec 0通常,我们选择前端的app进行fps统计,因此选择可见性足够大且z轴为正的层。 除了这个过滤点之外,还可以在HAL中的硬件合成(HWC )信息中过滤想要获取数据的层。

获得图层后,可以通过输入以下命令导出该图层渲染的时间数据:

adbshelldumpsyssurfaceflinger--如果latency层名称成功,将显示以下三列中的数据:

//fromchromiumandroidpylib 16954612 . 7657467895087657482691352765749349349349757465553746574657465745747465749645557457457457457457464574574574574574574574574574574574574574574574 第7505050505007507676765行表示显示器的刷新率(16.95ms毫秒),通常为固定值。 剩下的每行表示一帧的时间数据,三个时间数据分别表示:

APP描绘时刻(a )垂直同步信号到来的时刻) b ) SurfaceFlinger将帧全部提交到硬件的时刻) c )垂直同步) VSync ),是指玩竞技游戏的学生应该很熟悉的,这是显示器的刷新显示器通常有多个缓存,显示器绘制在一个缓存中,而显示器通过在另一个缓存中读取帧数据来显示在屏幕上。 但是,视频卡的播放速度总是比显示器的刷新速度快,所以视频卡不在任何地方,最后到显示器上读取帧的高速缓存并写入数据,该显示器的上半部分是一帧,下半部分是另一帧因此,显示器通过该机制将显卡的呈现屏蔽在其他缓存中,保证了显示屏的流畅运行。

由于典型的Android APP打开了垂直同步,因此在数据线数- 1/B中,如果将最后一个垂直同步时间减去第一个垂直同步时间的时间差设为b,就可以很容易地得到fps的原始值。

但是,除此之外,还必须考虑绘画的失帧(jank )的因素。 掉帧与前一个画面被撕裂相反,是系统日程的问题,是下一个VSync信号到来时,没有准备下一个图像数据,显示器会再次显示前一个帧数据。 通过统计Ceil((c-a )/refresh-period ) ),可以了解每个垂直同步的出图~硬件显示的标准值(jankflag )。 理论上这个标准值是固定值。 实际上,如果该基准值发生变动,就会有漏帧。

这样,我们可以通过从fps的原始值中减去时间差变动的次数(丢帧次数),获得真正的fps值。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。