本发明涉及一种安卓调试桥命令获取帧率的方法、装置和计算机可读存储介质。
背景技术:
0、技术背景
1、随着计算机硬件的发展,在移动终端上显示的视频、游戏都拥有越来越丰富的视觉呈现,对硬件特别是gpu、cpu的要求也越来越高。在现有的移动终端中,帧率fps(1秒内平均画面刷新次数)和jank数(卡顿次数)是测试移动终端性能的一个重要参数。fps是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。fps是测量保存、显示动态视频所需的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。显示器制约着的硬件重绘的次数,因此合适的fps值应该受限于硬件重绘的次数。如果fps设置不合适,与硬件不匹配,就会有卡顿、画面撕裂等问题,影响画面的正常呈现。通过对帧率fps和jank数的测定,不仅可以了解移动终端相关性能,还可以根据计算出的数值,反过来对移动终端的显示设置进行合理优化。因此简单快速的测定帧率fps和jank数就非常重要。
2、如专利文献cn106339300a公开了一种第三方游戏的fps获取方法,其特征在于:通过远程线程在第三方游戏的目标进程中插入用于计算fps值的注入模块,注入模块hook所述目标进程的present函数,设置present函数的伪函数mypresent函数,并将present函数替换为mypresent函数,统计一秒内mypresent函数被调用的次数,所述mypresent函数一秒内被调用的次数即为fps值。
3、相关技术中,为了获取fps值,需要在移动终端中插入一个注入模块,存在操作不便且涉及到系统权限问题。
技术实现思路
1、本发明要解决相关技术中,获取fps值操作不便且存在系统权限问题,本发明的发明人经过大量研究发现,如果利用安卓调试桥命令进行测试,并且采用python撰写脚本,将不会涉及系统权限问题,而且对移动终端硬件资源占用少,能够快速高效的获取待测试程序的fps值。
2、安卓调试桥命令(android debug bridge):简称adb命令,是一种允许模拟器或已连接的android设备进行通信的命令行工具,它可为各种设备操作提供便利,如安装和调试应用,并提供对unix shell(用于在模拟器或连接的设备上运行各种命令)的访问。
3、针对上述存在的局限性,本发明提出了一种用安卓调试桥命令获取帧率的方法,包括:
4、步骤101:通过adb connect ip命令或usb数据线连接移动终端;
5、步骤102:通过发送安卓调试桥命令获取帧数据;所述安卓调试桥命令脚本为python撰写;
6、步骤103:根据步骤102获取的帧数据计算fps值;
7、步骤104:显示当前的fps值。
8、进一步地:所述步骤102包括:
9、步骤102a:通过安卓调试桥命令获取移动终端基本信息、待测试程序包名、待测试程序启动页并进行分析;根据系统预设的映射模型,将所述包名、所述启动页组装为适配所述移动终端、所述待测试程序的从surfaceview层获取帧数据命令;
10、步骤102b:发送组装好的从surfaceview层获取帧数据的命令获取帧数据;
11、进一步地:所述步骤102中所述获取的帧数据,每行数据包括:开始绘制图像时间t1、帧传递给硬件的垂直同步时间t2、完成绘制的瞬时时间t3;所述fps值计算公式为:
12、fps=t2总个数/(相邻两行的t2之间的差的总和/1000000000)。
13、进一步地:还包括
14、步骤105:根据步骤102中获取的所述帧数据计算jank次数;
15、步骤102中获取的所述帧数据,每行数据包括:开始绘制图像时间t1、帧传递给硬件的垂直同步时间t2、完成绘制的瞬时时间t3,当一行数据中完成绘制的瞬时时间t3-开始绘制图像时间t1>16.7ms,记录为一次jank;依次对每行数据进行判断,得到的累计jank的次数作为jank次数;
16、步骤106:显示当前的jank次数。
17、进一步地:还包括:
18、步骤105:根据步骤102获取的所述帧数据计算jank次数;
19、所述步骤102中获取的所述帧数据,每行数据包括:开始绘制图像时间t1、帧传递给硬件的垂直同步时间t2、完成绘制的瞬时时间t3,当相邻两行的t2之间的差>16.7ms,记录为一次jank;依次遍历每行数据进行判断,计算当前行t2与上一个当前行t2之差,进行上述判断,将得到的累计的jank的次数作为jank次数;
20、步骤106:显示当前的jank次数。
21、一种用安卓调试桥命令获取帧率的装置,所述装置的脚本使用python编写,所述装置包括:
22、连接模块301:通过adb connect ip命令或usb数据线与移动终端建立通信连接;
23、获取模块302:向移动终端发送安卓调试桥命令,获取帧数据;
24、计算模块303:根据获取模块获取的帧数据,计算fps值和jank次数;
25、显示模块304:显示当前的fps值和jank次数。
26、进一步地:所述连接模块使用adb connect ip命令与移动终端建立通信的方式为:
27、向连接usb数据线的移动终端发送adb tcpip:5555建立连接;
28、断开usb数据线,发送adb connect ip:5555建立无线连接。
29、进一步地:所述获取模块:
30、通过安卓调试桥命令获取移动终端基本信息、待测试程序包名、待测试程序当前启动页并进行分析,根据系统预设的映射模型,将所述包名、所述启动页组装为适配所述移动终端、所述待测试程序的从surfaceview层获取帧数据命令;
31、发送组装好的从surfaceview层获取帧数据命令从而获取帧数据。
32、进一步地:所述计算模块:
33、根据所述步骤102中所述获取的帧数据,计算所述fps值;所述获取的帧数据每行数据包括:开始绘制图像时间t1、帧传递给硬件的垂直同步时间t2、完成绘制的瞬时时间t3;
34、所述fps值计算公式为:
35、fps=t2总个数/(相邻两行的t2之间的差的总和/1000000000);
36、所述jank次数的计算方法为:
37、当一行数据中完成绘制的瞬时时间t3-开始绘制图像时间t1>16.7ms,记录为一次jank;依次对每行数据进行上述判断,将得到的累计的jank次数作为jank次数;
38、或,当相邻两行的t2之间的差>16.7ms,记录为一次jank;依次遍历每行数据进行判断,计算当前行t2与上一个当前行t2之差,进行上述判断,将得到的累计的jank次数作为jank次数;
39、一种存储有计算机指令的非瞬时计算机可读存储介质,其中,所述计算机指令用于使所述计算机执行上述其中一项所述的方法。
40、与相关技术相对比,本发明具有以下优点:
41、使用本发明的安卓调试桥命令获取帧率的方法,通过简单的通过adb connet ip命令或usb数据线与移动终端建立通信,使用python撰写adb脚本,不会涉及系统权限问题,而且减少了对移动终端的硬件的占用,能够快速高效的获取待测试程序的fps值并进行实时显示,从而方便了对设备帧率的测试和调试。
42、使用本发明的安卓调试桥命令获取帧率的装置和计算机可读存储介质,通过简单的通过adb connet ip命令或usb数据线与移动终端建立通信,使用python撰写adb脚本,不会涉及系统权限问题,而且对移动终端的影响小,能够快速高效的获取待测试程序的fps值并进行实时显示,从而方便了对设备帧率的测试和调试。
43、相关技术中,用数据线连接移动终端进行测试,测试的移动终端数量有限,而且需要人工进行连接,通过使用adb connet ip命令的方式,使测试不用受制于数据线连接,可以随时根据需要自动进行测试,可以同时对较多数量的移动终端进行测试,并节省了人工连接的工作。