本发明涉及电子设备领域,尤其是一种移动终端帧率检测方法、装置及移动终端。
背景技术:
随着移动通信的发展和人们生活水平的不断提高,各种安卓设备的使用越来越普及,安卓设备已经成为人们生活中不可缺少的通信工具。
目前,在移动产品市场,消费者对移动设备的性能关注度越来越高,用户对显示设备显示的画面品质的要求越来越高,而流畅性是影响用户对设备性能评价最直接和重要的因素之一。因此,设备的流畅性是用户关注的关键点,其评测、分析、优化方法更是各设备厂商重点研究的内容。而FPS(Frame Per Second,帧率)是图形处理器每秒刷新次数,是评价安卓设备流畅性评测的重要参数。
技术实现要素:
本发明实施例提供一种移动终端帧率检测方法、装置及移动终端,可以提高帧率检测的准确度。
第一方面,本发明实施例提供了一种移动终端帧率检测方法,包括:
获取第一命令;
初始化第一进程,其中所述第一进程具备执行所述第一命令的权限;
至少两次将所述第一命令输入给所述第一进程,获取所述第一进程每次执行所述第一命令时的数据输出流,并依据所述数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳;
依据至少两个所述累计刷新次数以及对应的时间戳,确定移动终端的帧率值。
第二方面,本发明实施例提供了一种移动终端帧率检测装置,包括:
命令获取模块,用于获取第一命令;
进程初始化模块,用于初始化第一进程,其中所述第一进程具备执行所述第一命令的权限;
信息确定模块,用于至少两次将所述第一命令输入给所述第一进程,获取所述第一进程每次执行所述第一命令时的数据输出流,并依据所述数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳;
帧率确定模块,用于依据至少两个所述累计刷新次数以及对应的时间戳,确定移动终端的帧率值。
第三方面,本发明实施例提供了一种移动终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其中,所述处理器执行所述计算机程序时实现以下步骤:
获取第一命令;
初始化第一进程,其中所述第一进程具备执行所述第一命令的权限;
至少两次将所述第一命令输入给所述第一进程,获取所述第一进程每次执行所述第一命令时的数据输出流,并依据所述数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳;
依据至少两个所述累计刷新次数以及对应的时间戳,确定移动终端的帧率值。
本发明实施例在帧率检测过程中,通过获取第一命令,初始化具备执行第一命令权限的第一进程,随后至少两次将第一命令输入给第一进程,通过第一进程执行第一命令,获取第一进程每次执行第一命令时的数据输出流,依据数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳,并依据不同累计刷新次数和对应的时间戳确定移动终端的帧率值。确保了帧率检测的准确性和实时性。
附图说明
图1为本发明实施例中提供的一种移动终端帧率检测方法的流程示意图;
图2为本发明实施例中提供的一种移动终端屏幕的示意图;
图3为本发明实施例中提供的另一种移动终端帧率检测方法的流程示意图;
图4为本发明实施例中提供的一种触摸屏显示装置的结构示意图;
图5为本发明实施例中提供的一种移动终端的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
图1为本发明实施例中提供的一种移动终端帧率检测方法的流程示意图,该方法可以由触摸屏显示装置执行,该装置可由软件实现,一般可加载在移动终端中。如图1所示,该方法可以包括:
步骤11、获取第一命令。
其中,第一命令可以是查询类命令,用于查询移动终端中屏幕当前显示帧的累计刷新次数和时间戳。示例性的,可以在监测到帧率检测事件时,获取第一命令。
可以在移动终端的设置界面提供帧率检测功能的选项开关,其默认状态是关闭的。若检测到帧率检测功能的选项开关处于启动状态,则产生帧率检测事件。例如,用户需要了解移动终端的帧率时,可以点击开启帧率检测功能的选项开关,移动终端在检测到该选项开关处于启动状态时产生帧率检测事件。用户不需要了解帧率时,可以直接关闭该选项开关。
步骤12、初始化第一进程,其中所述第一进程具备执行所述第一命令的权限。
步骤13、至少两次将所述第一命令输入给所述第一进程,获取所述第一进程每次执行所述第一命令时的数据输出流,并依据所述数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳。
通过如下方式,至少两次获得屏幕当前显示帧的累计刷新次数和时间戳:将第一命令输入给第一进程,通过第一进程执行第一命令,获得第一进程的数据输出流(即第一命令的查询结果),并从数据输出流中分别得到屏幕当前显示帧的累计刷新次数和时间戳。
步骤14、依据至少两个所述累计刷新次数以及对应的时间戳,确定移动终端的帧率值。
其中,针对任意两个累计刷新次数,依据对应的两个时间戳可以得到这两个累计刷新次数之间的时间长度,依据两个累计刷新次数的差值可以得到该时间长度内的刷新次数,该时间长度内的刷新次数除以该时间长度即能够得到移动终端的帧率值。需要说明的是,也可以先得到多个帧率值,并将各帧率值的均值作为移动终端的帧率值。并且,累计刷新次数可以是十六进制格式,在确定帧率值时可以先将累计刷新次数转换为十进制格式。
本发明实施例在帧率检测过程中,通过获取第一命令,初始化具备执行第一命令权限的第一进程,随后至少两次将第一命令输入给第一进程,通过第一进程执行第一命令,获取第一进程每次执行第一命令时的数据输出流,依据数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳,并依据不同累计刷新次数和对应的时间戳确定移动终端的帧率值。确保了帧率检测的准确性和实时性。
示例性的,所述初始化第一进程,可以包括:创建所述第一进程;为所述第一进程创建数据流。第一进程的数据流用于获得通过第一进程执行第一命令时,第一命令的执行结果。
示例性的,所述至少两次将所述第一命令输入给所述第一进程,可以包括:将所述第一命令赋值给第一字符串;至少两次在所述第一进程内输入所述第一字符串。由于移动终端中未提供命令输入窗口,为了便于在第一进程中输入第一命令的内容,可以将第一命令赋值给第一字符串,并通过第一字符串将第一命令输入给第一进程。
示例性的,依据所述数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳,可以包括:将所述数据输出流的输出内容保存到第一变量中;截取所述第一变量的第一字符得到屏幕当前显示帧的累计刷新次数,以及截取所述第一变量的第二字符得到屏幕当前显示帧的时间戳。由于第一命令的查询结果具有固定格式,且第一命令的查询结果不仅可以包含屏幕当前显示帧的累计刷新次数和时间戳,还可以包含其他内容,通过将数据输出流的输出内容保存到第一变量中,并依据查询结果的格式进行字符截取分别得到屏幕当前显示帧的累计刷新次数和时间戳。
示例性的,所述确定移动终端的帧率值之后,还可以包括:在移动终端屏幕的设定区域创建悬浮窗口,并将所述帧率值展示在所述悬浮窗口内。参考图2,在移动终端屏幕的右上角区域内创建悬浮窗口01,以帧率值为40帧每秒为例,可以将帧率数值40显示在悬浮窗口01内,便于用户通过悬浮窗口01展示的内容直观地了解终端的帧率值。
在上述实施例的基础上,参考图3,为了避免应用启动或界面切换过程中的屏幕界面出现闪烁或停顿现象,确定移动终端的帧率值之后,还可以包括:
步骤25、若当前正在运行的活动进程是应用启动进程或界面切换进程,且所述帧率值低于帧率阈值,则记录当前CPU(Central Processing Unit,中央处理器)频率值,并执行CPU频率提升操作。
其中,帧率阈值可以是预先设定的经验值,如帧率阈值可以是60帧每秒。若当前正在运行的活动进程是应用启动进程或界面切换进程,且所述帧率值低于帧率阈值,则可以通知CPU进行提频操作,暂时性的提升CPU的性能,从而达到提高帧率值的目的。
步骤26、若检测到所述应用启动进程或界面切换进程结束,则依据记录的当前CPU频率值对CPU频率进行恢复。
若应用启动进程或界面切换进程结束,可以依据提频操作之前记录的CPU频率值进行频率恢复操作,以降低移动终端的功耗。
本发明实施例针对基于安卓系统的移动终端,具体提供了一种移动终端帧率检测方法,该方法可以包括:
1)在检测到帧率检测功能的选项开关由关闭状态切换为启动状态时,获取adb(Android Debug Bridge,安卓调试桥)命令“service call SurfaceFlinger 1013”。
2)创建新的shell进程,并为所述新的shell进程创建数据流。
创建具有adb命令执行权限的shell进程。由于移动终端中不支持通过窗口输入adb命令,故可以通过创建一个新的具有shell权限的进程,并为新的shell进程创建数据流,以便于后续通过新的shell进程输入adb命令,以及通过对应的数据流得到adb命令的查询结果。具体的实现代码可以如下:
Process process=Runtime.getRuntime().exec("sh");//创建新的shell进程//
DataOutputStream os=new DataOutputStream(process.getOutputStream
());
BufferedReader ir=new BufferedReader(new InputStreamReader(process.getInputStream()))//为新的shell进程创建数据流,以便于后续依据该数据流的输出结果得到adb命令的查询结果//。
3)至少两次在所述shell进程中输入adb命令“service call SurfaceFlinger1013”,并通过所述数据流的输出结果得到所述adb命令的查询结果。
为了便于在shell进程中输入adb命令的内容,在创建shell进程之前可以预先将adb命令的内容保存到变量中,并且通过在shell进程中写入对应变量的取值即可实现adb命令内容的输入。具体的实现代码可以如下:
String getFps40="service call SurfaceFlinger 1013"//将adb命名的内容保存到变量getFps40中,以便于后续输入该命令的内容//
os.writeBytes(getFps40+"\n");//输入adb命令的字符串//。
4)每次在所述shell进程中输入adb命令后,shell进程执行adb命令,获取shell进程的数据输出流,并通过所述数据流的输出结果得到所述adb命令的查询结果,如可以将数据流的输出内容保存在变量str中。具体的实现代码可以如下:
str=ir.readLine()//将数据流的输出内容保存在变量str//。
5)截取变量str的第一字符得到屏幕当前显示帧的累计刷新次数。
以变量str包含如下内容为例:
root@X9077:/#service call SurfaceFlinger 1013
service call SurfaceFlinger 1013
Result:Parcel(00004fde)'.0..'
可以通过截取str字符串中字符“(”和字符“)”之间的字符得到当前显示帧的累计刷新次数。
6)截取变量str的第二字符得到屏幕当前显示帧的时间戳。
7)依据至少两个所述累计刷新次数以及对应的时间戳,确定移动终端的帧率值。
图4为本发明实施例中提供的一种移动终端帧率检测装置的结构示意图,该装置可以配置于移动终端中。如图4所示,该移动终端帧率检测装置的具体结构可以包括:
命令获取模块31,用于获取第一命令;
进程初始化模块32,用于初始化第一进程,其中所述第一进程具备执行所述第一命令的权限;
信息确定模块33,用于至少两次将所述第一命令输入给所述第一进程,获取所述第一进程每次执行所述第一命令时的数据输出流,并依据所述数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳;
帧率确定模块34,用于依据至少两个所述累计刷新次数以及对应的时间戳,确定移动终端的帧率值。
示例性的,所述进程初始化模块32具体可以用于:
创建所述第一进程;
为所述第一进程创建数据流。
示例性的,所述信息确定模块33具体可以用于:
将所述第一命令赋值给第一字符串;
至少两次在所述第一进程内输入所述第一字符串。
示例性的,所述信息确定模块33具体可以用于:
将所述数据输出流的输出内容保存到第一变量中;
截取所述第一变量的第一字符得到屏幕当前显示帧的累计刷新次数,以及截取所述第一变量的第二字符得到屏幕当前显示帧的时间戳。
示例性的,该装置还可以包括:
帧率展示模块,用于在确定移动终端的帧率值之后,在移动终端屏幕的设定区域创建悬浮窗口,并将所述帧率值展示在所述悬浮窗口内。
示例性的,该装置还可以包括:
频率提示模块,用于在确定移动终端的帧率值之后,若当前正在运行的活动进程是应用启动进程或界面切换进程,且所述帧率值低于帧率阈值,则记录当前CPU频率值,并执行CPU频率提升操作;
频率恢复模块,用于若检测到所述应用启动进程或界面切换进程结束,则依据记录的当前CPU频率值对CPU频率进行恢复。
上述移动终端帧率检测装置,与本发明任意实施例所提供的移动终端帧率检测方法属于同一发明构思,可执行本发明任意实施例所提供的移动终端帧率检测方法,具备执行移动终端帧率检测方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任意实施例提供的移动终端帧率检测方法。
本发明实施例提供了一种移动终端,该移动终端可以包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序。
图5为本发明实施例中提供的一种移动终端的结构示意图,如图5所示,图示智能手机400可以包括:存储器401、中央处理器(Central Processing Unit,以下简称CPU)402、外设接口403、RF电路405、音频电路406、扬声器411、电源管理芯片408、输入/输出(I/O)子系统409、其它输入/控制设备410以及外部端口404,这些部件通过一个或多个通信总线或信号线407来通信。
应该理解的是,图示智能手机400仅仅移动终端的一个范例,并且智能手机400可以具有比图中所示出的更多的或者更少的部件,可以组合两个或更多的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
下面就本实施例提供的用于帧率检测的智能手机进行详细的描述。
存储器401:存储器401可以被CPU402、外设接口403等访问,存储器401可以包括高速随机存取存储器,还可以包括非易失性存储器,例如一个或多个磁盘存储器件、闪存器件、或其它易失性固态存储器件。
外设接口403,外设接口可以将设备的输入和输出外设连接到CPU402和存储器401。
I/O子系统409:I/O子系统409可以将设备上的输入输出外设,例如触摸屏402和其它输入/控制设备410,连接到外设接口403。I/O子系统409可以包括显示控制器4091和用于控制其它输入/控制设备410的一个或多个输入控制器4092。其中,一个或多个输入控制器4092从其它输入/控制设备410接收电信号或者向其它输入/控制设备410发送电信号,其它输入/控制设备410可以包括物理按钮(按压按钮、摇臂按钮等)、拨号盘、滑动开关、操纵杆或点击滚轮。值得说明的是,输入控制器4092可以与以下任一个连接:键盘、红外端口、USB接口以及诸如鼠标的指示设备。
触摸屏412:触摸屏412是用户终端与用户之间的输入接口和输出接口,将可视输出显示给用户,可视输出可以包括图形、文本、图标或视频等。
I/O子系统409中的显示控制器4091从触摸屏412接收电信号或者向触摸屏412发送电信号。触摸屏412检测触摸屏上的接触,显示控制器4091将检测到的接触转换为与显示在触摸屏412上的用户界面对象的交互,即实现人机交互,显示在触摸屏412上的用户界面对象可以是运行游戏的图标、联网到相应网络的图标等。值得说明的是,设备还可以包括光鼠,光鼠是不显示可视输出的触摸敏感表面,或者是由触摸屏形成的触摸敏感表面的延伸。
RF电路405,主要用于建立手机与无线网络(即网络侧)的通信,实现手机与无线网络的数据接收和发送。例如收发短信息、电子邮件等。具体地,RF电路405接收并发送RF信号,RF信号也称为电磁信号,RF电路405将电信号转换为电磁信号或将电磁信号转换为电信号,并且通过该电磁信号与通信网络以及其它设备进行通信。RF电路405可以包括用于执行这些功能的已知电路,其包括但不限于天线系统、RF收发机、一个或多个放大器、调谐器、一个或多个振荡器、数字信号处理器、CODEC芯片组、用户标识模块(Subscriber Identity Module,SIM)等等。
音频电路406,主要用于从外设接口403接收音频数据,将该音频数据转换为电信号,并且将该电信号发送给扬声器411。
扬声器411,用于将手机通过RF电路405从无线网络接收的语音信号,还原为声音并向用户播放该声音。
电源管理芯片408,用于为CPU402、I/O子系统及外设接口所连接的硬件进行供电及电源管理。
本发明实施例提供的CPU402执行所述计算机程序时实现以下步骤:
获取第一命令;
初始化第一进程,其中所述第一进程具备执行所述第一命令的权限;
至少两次将所述第一命令输入给所述第一进程,获取所述第一进程每次执行所述第一命令时的数据输出流,并依据所述数据输出流确定屏幕当前显示帧的累计刷新次数和时间戳;
依据至少两个所述累计刷新次数以及对应的时间戳,确定移动终端的帧率值。
上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其它等效实施例,而本发明的范围由所附的权利要求范围决定。