logo好方法网

帧速率的检测方法和装置


技术摘要:
本公开关于一种帧速率的检测方法、装置、电子设备以及存储介质。该方法包括:将帧速率FPS检测触发定时器绑定在应用程序的线程上;启动FPS检测触发定时器,以使得FPS检测触发定时器按设定的定时周期,触发线程调用指定接口获取在所述定时周期内刷新显示的所有帧的标识;  全部
背景技术:
移动端的应用性能管理(Application  Performance  Management,APM)需求中,通 常需要使用一些指标来衡量用户对应用(Application)进行操作过程中的界面流畅度。 目前,比较被认可的指标为应用程序界面的帧速率(此处指每秒显示的帧数, Frames  Per  Second,FPS),通过检测FPS来衡量界面流畅度。可以理解的是,每秒显示的帧 数越多,界面越流畅,反之,界面可能出现卡顿。 现有技术中,以iOS移动端(即安装的操作系统包括iOS的移动端)为例,检测FPS主 要通过以下两种方式: 方式一:通过计算主线程上绑定的CADisplayLink的调用频率拟合FPS。 CADisplayLink是一个可以允许应用程序以和屏幕刷新频率相同的频率,将应用程序的界 面显示在屏幕上的定时器对象。 方式二:通过检测主线程的RunLoop的轮询频率近似得到FPS。RunLoop是一个让程 序保持持续运行状态的循环,在iOS中主要起到的作用包括:保持应用程序持续运行,以及 在每次循环中处理应用程序中的各种事件(比如:触摸事件、定时器事件、UI刷新事件等)。 iOS系统中,屏幕刷新依赖CoreAnimation,这个框架通过调度主线程的Runloop提交内容 (比如需要绘制的内存对象或者位图等)给操作系统,操作系统将提交的内容转化为纹理后 由硬件实现屏幕内容的刷新。通过给主线程的RunLoop添加监听,可以监听到RunLoop的轮 询频率,进而将该轮询频率作为计算出的FPS。 两种方式是分别计算主线程上绑定的CADisplayLink的调用频率或者主线程的 RunLoop的轮询频率来作为FPS,计算结果其实不准确等于实际FPS,而只能是近似等于FPS。 尤其在某些场景下,上述两种方式得到的FPS与实际的FPS相差更大。其中,实际的FPS应等 于用户真实看到的应用程序界面的FPS。 例如,针对第一种方式而言,主线程上绑定的CADisplayLink的调用频率受中央处 理器(Central  Processing  Unit,CPU)和图像处理器(Graphics  Processing  Unit,GPU)的 负载影响较大,在CPU或GPU负载过高的场景下,实际的FPS会降低,这样导致主线程上 CADisplayLink的调用频率会远高于实际的FPS,因此以CADisplayLink的调用频率作为FPS 会导致检测出的FPS不准确。 针对第二种方式而言,主线程的RunLoop轮询频率仅依赖CPU对主线程的RunLoop 的调度情况,与GPU无关。而事实上,实际的FPS大小却是会受到GPU负载影响的。这样,在GPU 负载过高时,直接以RunLoop轮询频率近似作为实际的FPS,而忽略了GPU负载对FPS的影响, 也会导致检测出的FPS不准确。 4 CN 111611115 A 说 明 书 2/13 页
技术实现要素:
本公开提供一种FPS检测方法、装置、电子设备以及存储介质,以至少解决采用现 有技术进行FPS检测存在的检测结果不准确的问题。本公开的技术方案如下: 根据本公开实施例的第一方面,提供一种帧速率的检测方法,包括: 将帧速率FPS检测触发定时器绑定在应用程序的线程上; 启动所述FPS检测触发定时器,以使得所述FPS检测触发定时器按设定的定时周 期,触发所述线程调用指定接口获取在所述定时周期内刷新显示的所有帧的标识;所述指 定接口包括:操作系统提供的屏幕刷新帧的标识获取接口; 根据单位时间长度内获取的所述刷新显示的所有帧的标识的数量,确定FPS。 在一种可选的实施方式中,启动所述FPS检测触发定时器,以使得所述FPS检测触 发定时器按设定的定时周期,触发所述线程调用指定接口获取在所述定时周期内刷新显示 的所有帧的标识,包括: 按照屏幕常规刷新周期,周期性修改屏幕显示的界面中设置的至少一个像素点的 指定显示属性的属性值;其中,所述指定显示属性包括与所述像素点在界面中显示方式相 关的属性; 启动所述FPS检测触发定时器,以使得所述FPS检测触发定时器按所述定时周期触 发所述线程调用指定接口获取:通过所述周期性修改屏幕显示的界面中设置的至少一个像 素点的指定显示属性的属性值的方式,在所述定时周期内触发刷新显示的所有帧的标识。 在一种可选的实施方式中,所述方法还包括:在所述屏幕显示的界面中,设置具备 所述指定显示属性的所述至少一个像素点。 在一种可选的实施方式中,所述像素点的指定显示属性,包括:透明度和色值中的 至少一种。 在一种可选的实施方式中,所述线程包括:异步线程。 在一种可选的实施方式中,根据单位时间长度内获取的所述刷新显示的所有帧的 标识的数量,确定FPS后,所述方法还包括: 存储在预设时间长度内确定的各FPS; 基于确定的各FPS,确定所述应用程序的界面显示流畅度。 在一种可选的实施方式中,基于确定的各FPS,确定所述应用程序的界面显示流畅 度,包括: 将存储的在预设时间长度内确定的各FPS上报于服务端,以使得服务端基于所述 在预设时间长度内确定的各FPS,确定所述应用程序的界面流畅度。 在一种可选的实施方式中,所述操作系统包括iOS。 根据本公开实施例的第二方面,提供一种帧速率的检测装置,包括: 绑定模块,被配置为执行将帧速率FPS检测触发定时器绑定在应用程序的线程上; 获取模块,被配置为执行启动所述FPS检测触发定时器,以使得所述FPS检测触发 定时器按设定的定时周期,触发所述线程调用指定接口获取在所述定时周期内刷新显示的 所有帧的标识;所述指定接口包括:操作系统提供的屏幕刷新帧的标识获取接口; 确定模块,被配置为执行根据单位时间长度内获取的所述刷新显示的所有帧的标 识的数量,确定FPS。 5 CN 111611115 A 说 明 书 3/13 页 在一种可选的实施方式中,所述获取模块,包括: 修改单元,被配置为执行按照所述屏幕常规刷新周期,周期性修改屏幕显示的界 面中设置的至少一个像素点的指定显示属性的属性值;其中,所述指定显示属性包括与所 述像素点在界面中显示方式相关的属性; 获取单元,被配置为执行启动所述FPS检测触发定时器,以使得所述FPS检测触发 定时器按所述定时周期触发所述线程调用指定接口获取:通过所述周期性修改屏幕显示的 界面中设置的至少一个像素点的指定显示属性的属性值的方式,在所述定时周期内触发刷 新显示的所有帧的标识。 在一种可选的实施方式中,所述装置还包括: 设置模块,被配置为执行在所述屏幕显示的界面中,设置具备所述指定显示属性 的所述至少一个像素点。 在一种可选的实施方式中,所述像素点的指定显示属性,包括:透明度和色值中的 至少一种。 在一种可选的实施方式中,所述线程包括:异步线程。 在一种可选的实施方式中,所述装置还包括: 存储模块,被配置为执行存储在预设时间长度内确定的各FPS; 确定模块,被配置为执行基于确定的各FPS,确定所述应用程序的界面显示流畅 度。 在一种可选的实施方式中,所述确定模块,被配置为具体执行:将存储的在预设时 间长度内确定的各FPS上报于服务端,以使得服务端基于所述在预设时间长度内确定的各 FPS,确定所述应用程序的界面流畅度。 在一种实施方式中,所述操作系统包括iOS。 根据本公开实施例的第三方面,提供一种电子设备,包括: 处理器;用于存储所述处理器可执行指令的存储器; 其中,所述处理器被配置为执行上述第一方面中任一项帧速率的检测方法步骤。 根据本公开实施例的第四方面,提供一种存储介质,当所述存储介质中的指令由 电子设备的处理器执行时,使得电子设备能够执行上述第一方面中任一项帧速率的检测方 法。 根据本公开实施例的第五方面,提供一种计算机程序产品,当其在电子设备上运 行时,使得帧速率的检测电子设备执行:上述第一方面中任一项帧速率的检测方法的方法 步骤。 本公开的实施例提供的技术方案至少带来以下有益效果: 在本公开实施例中,通过FPS检测触发定时器按设定的定时周期,定时触发调用指 定接口获取在定时周期内刷新显示的所有帧的标识,从而实现了直接获取真实刷新显示的 帧的标识来确定FPS,相较于现有技术中以CADisplayLink的调用频率或RunLoop的轮询频 率近似作为FPS,采用本公开实施例的方案得到的是真实的FPS,结果更准确。 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不 能限制本公开。 6 CN 111611115 A 说 明 书 4/13 页 附图说明 此处的附图被并入说明书中并构成本公开的一部分,示出了符合本公开的实施 例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。 图1是根据一示例性实施例示出的一种帧速率的检测方法的流程图。 图2是根据一示例性实施例示出的一种帧速率的检测装置的框图。 图3是根据一示例性实施例示出的一种帧速率的检测系统的框图。 图4是根据一示例性实施例示出的一种电子设备的框图。
分享到:
收藏