IOS应用的实时帧数监测方法、存储介质、设备及系统转让专利

申请号 : CN201810064284.9

文献号 : CN108304294B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 张骏张文明陈少杰

申请人 : 武汉斗鱼网络科技有限公司

摘要 :

本发明公开了一种IOS应用的实时帧数监测方法、存储介质、设备及系统,涉及IOS应用技术领域,本发明通过定义一个Objective‑C的类,并实现该类单例加载,在Objective‑C的类初始化时创建CADisplayLink,将CADisplayLink注册到IOS运行循环中;每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算当前帧数。本方案通过定义Objective‑C的类实现实时帧数监测,在IOS移动端开发Objective‑C的类所需代码小,运行时占用内存也小,因此本方案可实现IOS应用在移动端发布之后对移动端的IOS应用的实时帧数的有效管理。

权利要求 :

1.一种IOS应用的实时帧数监测方法,其特征在于:

定义一个Objective-C的类,并实现该类单例加载;在所述Objective-C的类初始化时创建定时器CADisplayLink,并绑定好CADisplayLink的回调方法,将CADisplayLink注册到IOS运行循环中,设定间隔调度次数;

每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算出当前帧数;所述回调方法包括:从CADisplayLink中读取属性帧间隔,根据当前调用CADisplayLink的时间戳与上一次调用CADisplayLink的时间戳计算出两次调用的时间间隔,累计所述时间间隔内每次调用CADisplayLink的属性帧间隔并根据间隔调度次数得出该时间间隔内的累计帧数,用累计帧数除以时间间隔即可计算出当前帧数;

在所述Objective-C的类中增加三个属性:累计帧数量、累计时间间隔和上一次调用的时间戳;

调用CADisplayLink上绑定的回调方法计算当前帧数包括:

调用CADisplayLink上绑定的回调方法,读取调用CADisplayLink时的时间戳,将CADisplayLink的属性帧间隔累计至所述累计帧数量;

判断所述时间戳与所述上一次调用的时间戳之差值,若小于预设的差值阈值,则将当前时间戳与所述上一次调用的时间戳之差值累计至累计时间间隔中;若大于等于预设的差值阈值,则用累计帧数量除以累计时间间隔即为当前帧数,并置空累计帧数量和累计时间间隔,将所述上一次调用的时间戳的值设置为所述时间戳。

2.如权利要求 1所述的一种IOS应用的实时帧数监测方法,其特征在于:所述预设的差值阈值为0.5秒。

3.如权利要求1所述的一种IOS应用的实时帧数监测方法,其特征在于:所述属性帧间隔默认值为1。

4.一种存储介质,该存储介质上存储有计算机程序,其特征在于:所述计算机程序被处理器执行时实现权利要求1至3任一项所述的方法。

5.一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,其特征在于:处理器执行计算机程序时实现权利要求1至3任一项所述的方法。

6.一种IOS应用的实时帧数监测系统,其特征在于,包括:

类创建模块,其用于定义一个Objective-C的类,并实现该类单例加载;

定时器创建模块,其用于在所述Objective-C的类初始化时创建CADisplayLink,并绑定好CADisplayLink的回调方法,将CADisplayLink注册到IOS运行循环中,设定间隔调度次数;

当前帧数计算模块,其用于每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算当前帧数;所述回调方法包括:从CADisplayLink中读取属性帧间隔,根据当前调用CADisplayLink的时间戳与上一次调用CADisplayLink的时间戳计算出两次调用的时间间隔,累计所述时间间隔内每次调用CADisplayLink的属性帧间隔并根据价格调度次数得出该时间间隔内的累计帧数,用累计帧数除以时间间隔即可计算出当前帧数;

类创建模块用于在所述Objective-C的类中增加三个属性:累计帧数量、累计时间间隔和上一次调用的时间戳;

所述当前帧数计算模块用于调用CADisplayLink上绑定的回调方法,读取调用CADisplayLink时的时间戳,将CADisplayLink的属性帧间隔累计至所述累计帧数量;

判断所述时间戳与所述上一次调用的时间戳之差值,若小于预设的差值阈值,则将当前时间戳与所述上一次调用的时间戳之差值累计至累计时间间隔中;若大于等于预设的差值阈值,则用累计帧数量除以累计时间间隔即为当前帧数,并置空累计帧数量和累计时间间隔,将所述上一次调用的时间戳的值设置为所述时间戳。

7.如权利要求6所述的一种IOS应用的实时帧数监测系统,其特征在于:所述预设的差值阈值为0.5秒。

8.如权利要求7所述的一种IOS应用的实时帧数监测系统,其特征在于:所述属性帧间隔默认值为1。

说明书 :

IOS应用的实时帧数监测方法、存储介质、设备及系统

技术领域

[0001] 本发明涉及IOS应用技术领域,具体涉及一种IOS应用的实时帧数监测方法、存储介质、设备及系统。

背景技术

[0002] 在移动应用的开发过程中,可能会遇到一些性能瓶颈,例如程序运行的卡顿或内存无法正确的释放,都无法得到很好的监控或反馈。一般的方法是将手机连上电脑,利用Xcode(一种Mac OS X操作系统上的集成开发工具)所带的Instrument工具进行监控。Xcode自带的Instrument工具是一个以独立APP形式存在的工具集,包含了很多强大的检测功能:其中包括在真机和模拟器上进行性能测试,对APP进行性能分析,检查一个或多个应用或进程的行为。Instrument工具主要用于在调试过程中随时发现问题,及时优化。但是Instrument工具只能供有应用源码的程序员使用,因此必须连接电脑,无法测量用户真实使用场景下的性能,即无法在IOS应用发布之后依然对IOS应用的运行情况进行有效的管理。

发明内容

[0003] 针对现有技术中存在的缺陷,本发明的目的在于提供一种IOS应用的实时帧数监测方法、存储介质、设备及系统,实现IOS应用发布之后对IOS应用的实时帧数的有效管理。
[0004] 为达到以上目的,本发明采取的技术方案是:一种IOS应用的实时帧数监测方法:
[0005] 定义一个Objective-C的类,并实现该类单例加载;在所述Objective-C的类初始化时创建定时器CADisplayLink,并绑定好CADisplayLink的回调方法,将CADisplayLink注册到IOS运行循环中;
[0006] 每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算出当前帧数;所述回调方法包括:
[0007] 从CADisplayLink中读取属性帧间隔,根据当前调用CADisplayLink的时间戳与上一次调用CADisplayLink的时间戳计算出两次调用的时间间隔,累计所述时间间隔内每次调用CADisplayLink的属性帧间隔得出该时间间隔内的累计帧数,用累计帧数除以时间间隔即可计算出当前帧数。
[0008] 在上述技术方案的基础上,在所述Objective-C的类中增加三个属性:累计帧数量、累计时间间隔和上一次调用的时间戳;
[0009] 调用CADisplayLink上绑定的回调方法计算当前帧数包括:
[0010] 调用CADisplayLink上绑定的回调方法,读取调用CADisplayLink时的时间戳,将CADisplayLink的属性帧间隔累计至所述累计帧数量;
[0011] 判断所述时间戳与所述上一次调用的时间戳之差值,若小于预设的差值阈值,则将当前时间戳与所述上一次调用的时间戳之差值累计至累计时间间隔中;若大于等于预设的差值阈值,则用累计帧数量除以累计时间间隔即为当前帧数,并置空累计帧数量和累计时间间隔,将所述上一次调用的时间戳的值设置为所述时间戳。
[0012] 在上述技术方案的基础上,所述预设的差值阈值为0.5秒。
[0013] 在上述技术方案的基础上,所述属性帧间隔默认值为1。
[0014] 本发明还公开了一种存储介质,该存储介质上存储有计算机程序:所述计算机程序被处理器执行时实现IOS应用的实时帧数监测方法。
[0015] 本发明还公开了一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序:处理器执行计算机程序时实现IOS应用的实时帧数监测方法。
[0016] 本发明还公开了一种IOS应用的实时帧数监测系统,包括:
[0017] 类创建模块,其用于定义一个Objective-C的类,并实现该类单例加载;
[0018] 定时器创建模块,其用于在所述Objective-C的类初始化时创建CADisplayLink,并绑定好CADisplayLink的回调方法,将CADisplayLink注册到IOS运行循环中;
[0019] 当前帧数计算模块,其用于每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算当前帧数;所述回调方法包括:
[0020] 从CADisplayLink中读取属性帧间隔,根据当前调用CADisplayLink的时间戳与上一次调用CADisplayLink的时间戳计算出两次调用的时间间隔,累计所述时间间隔内每次调用CADisplayLink的属性帧间隔得出该时间间隔内的累计帧数,用累计帧数除以时间间隔即可计算出当前帧数。
[0021] 在上述技术方案的基础上,类创建模块用于在所述Objective-C的类中增加三个属性:累计帧数量、累计时间间隔和上一次调用的时间戳;
[0022] 所述当前帧数计算模块用于调用CADisplayLink上绑定的回调方法,读取调用CADisplayLink时的时间戳,将CADisplayLink的属性帧间隔累计至所述累计帧数量;
[0023] 判断所述时间戳与所述上一次调用的时间戳之差值,若小于预设的差值阈值,则将当前时间戳与所述上一次调用的时间戳之差值累计至累计时间间隔中;若大于等于预设的差值阈值,则用累计帧数量除以累计时间间隔即为当前帧数,并置空累计帧数量和累计时间间隔,将所述上一次调用的时间戳的值设置为所述时间戳。
[0024] 在上述技术方案的基础上,所述预设的差值阈值为0.5秒。
[0025] 在上述技术方案的基础上,所述属性帧间隔默认值为1。
[0026] 与现有技术相比,本发明的优点在于:
[0027] 本发明通过定义一个Objective-C的类,并实现该类单例加载,在Objective-C的类初始化时创建CADisplayLink,将CADisplayLink注册到IOS运行循环中;每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算当前帧数。本方案通过定义Objective-C的类实现实时帧数监测,在IOS移动端开发Objective-C的类所需代码小,运行时占用内存也小,因此本方案可实现IOS应用在移动端发布之后对移动端的IOS应用的实时帧数的有效管理。

附图说明

[0028] 图1为本发明实施例中IOS应用的实时帧数监测方法的流程示意图;
[0029] 图2为本发明实施例中IOS应用的实时帧数监测系统的结构示意图。

具体实施方式

[0030] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。此外,下面所描述的本发明各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
[0031] 以下首先就本发明的术语进行解释和说明:
[0032] Objective-C:Objective-C主要应用于IOS操作系统和IOS应用程序的编写。它是一个用C写成很小的运行库,令应用程序的尺寸增加很小,和大部分OO(Object Oriented,面向对象)系统使用极大的VM执行时间会取代了整个系统的运作相反,Objective-C写成的程序通常不会比其原始码大很多。而其函式库亦和Smalltalk系统要使用极大的内存来开启一个窗口的情况相反。同时,Objective-C完全兼容标准C语言。
[0033] Objective-C的类和属性:类是核心支持面向对象编程及Objective-C的特点,通常被称为用户定义的类型。类是用来指定对象的形式,它结合了数据表示和方法操纵这些数据转换成一个整齐的包。类的属性是用来提供访问其他类的类的实例变量。
[0034] 实现类单例加载:即保证一个类只生成一个实例对象。
[0035] 定时器:即CADisplayLink,CADisplayLink是一个能以和屏幕刷新率相同的频率将内容画到屏幕上的定时器。在应用中创建一个新的CADisplayLink对象,把它添加到一个runloop中,并给它提供一个target和selector在屏幕刷新的时候调用。一但CADisplayLink以特定的模式注册到runloop之后,每当屏幕需要刷新的时候,runloop就会调用CADisplayLink绑定的target上的selector,这时target可以读到CADisplayLink的每次调用的时间戳,用来准备下一帧显示需要的数据。
[0036] 属性间隔帧:属性间隔帧,即frameInterval。frameInterval属性是可读可写的NSInteger型值,标识间隔多少帧调用一次CADisplayLink的selector方法,默认值是1,即每帧都调用一次。如果每帧都调用一次的话,对于IOS设备来说那刷新频率就是60HZ也就是每秒60次,如果将frameInterval设为2那么就会两帧调用一次,也就是变成了每秒刷新30次。
[0037] 实施例1:
[0038] 参见图1所示,本发明实施例提供一种IOS应用的实时帧数监测方法:
[0039] S1,定义一个Objective-C的类,并实现该类单例加载;
[0040] S2,在Objective-C的类初始化时创建CADisplayLink,并绑定好CADisplayLink的回调方法,将CADisplayLink注册到IOS运行循环中;
[0041] S3,每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算出当前帧数;回调方法包括:
[0042] 从CADisplayLink中读取属性帧间隔,根据当前调用CADisplayLink的时间戳与上一次调用CADisplayLink的时间戳计算出两次调用的时间间隔,累计时间间隔内每次调用CADisplayLink的属性帧间隔得出该时间间隔内的累计帧数,用累计帧数除以时间间隔即可计算出当前帧数。
[0043] 在Objective-C的类中增加三个属性:累计帧数量、累计时间间隔和上一次调用的时间戳;
[0044] 调用CADisplayLink上绑定的回调方法计算当前帧数包括:
[0045] 调用CADisplayLink上绑定的回调方法,读取调用CADisplayLink时的时间戳,将CADisplayLink的属性帧间隔累计至累计帧数量;
[0046] 判断时间戳与上一次调用的时间戳之差值,若小于预设的差值阈值,则将当前时间戳与上一次调用的时间戳之差值累计至累计时间间隔中;若大于等于预设的差值阈值,则用累计帧数量除以累计时间间隔即为当前帧数,并置空累计帧数量和累计时间间隔,将上一次调用的时间戳的值设置为时间戳。
[0047] 其中,预设的差值阈值为0.5秒。属性帧间隔默认值为1。即每帧都调用一次。如果每帧都调用一次的话,对于IOS设备来说那刷新频率就是60HZ也就是每秒60次,如果将frameInterval设为2那么就会两帧调用一次,也就是变成了每秒刷新30次。
[0048] 本方案通过定义Objective-C的类实现实时帧数监测,在IOS移动端开发Objective-C的类所需代码小,运行时占用内存也小,因此本方案可实现IOS应用在移动端发布之后对移动端的IOS应用的实时帧数的有效管理。
[0049] 实施例2:
[0050] 本发明实施例公开了一种存储介质,该存储介质上存储有计算机程序,计算机程序被处理器执行时实现IOS应用的实时帧数监测方法。
[0051] 本发明实施例的存储介质存储有实现IOS应用的实时帧数监测方法,在IOS移动端开发Objective-C的类所需代码小,运行时占用内存也小,因此本方案可实现IOS应用在移动端发布之后对移动端的IOS应用的实时帧数的有效管理。
[0052] 实施例3:
[0053] 本发明实施例公开了一种电子设备,包括存储器和处理器,存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现IOS应用的实时帧数监测方法。
[0054] 本发明实施例的存储器上储存有在处理器上运行的计算机程序,处理器执行计算机程序时实现IOS应用的实时帧数监测方法。在IOS移动端开发Objective-C的类所需代码小,运行时占用内存也小,因此本方案可实现IOS应用在移动端发布之后对移动端的IOS应用的实时帧数的有效管理。
[0055] 实施例4:
[0056] 参见图2所示,本发明实施例公开了一种IOS应用的实时帧数监测系统,包括:
[0057] 类创建模块,其用于定义一个Objective-C的类,并实现该类单例加载;
[0058] 定时器创建模块,其用于在Objective-C的类初始化时创建CADisplayLink,并绑定好CADisplayLink的回调方法,将CADisplayLink注册到IOS运行循环中;
[0059] 当前帧数计算模块,其用于每次IOS运行循环结束时,调用CADisplayLink上绑定的回调方法计算当前帧数;回调方法包括:
[0060] 从CADisplayLink中读取属性帧间隔,根据当前调用CADisplayLink的时间戳与上一次调用CADisplayLink的时间戳计算出两次调用的时间间隔,累计时间间隔内每次调用CADisplayLink的属性帧间隔得出该时间间隔内的累计帧数,用累计帧数除以时间间隔即可计算出当前帧数。
[0061] 类创建模块用于在Objective-C的类中增加三个属性:累计帧数量、累计时间间隔和上一次调用的时间戳;
[0062] 当前帧数计算模块用于调用CADisplayLink上绑定的回调方法,读取调用CADisplayLink时的时间戳,将CADisplayLink的属性帧间隔累计至累计帧数量;
[0063] 判断时间戳与上一次调用的时间戳之差值,若小于预设的差值阈值,则将当前时间戳与上一次调用的时间戳之差值累计至累计时间间隔中;若大于等于预设的差值阈值,则用累计帧数量除以累计时间间隔即为当前帧数,并置空累计帧数量和累计时间间隔,将上一次调用的时间戳的值设置为时间戳。预设的差值阈值为0.5秒。属性帧间隔默认值为1。
[0064] 本发明实施例的IOS应用的实时帧数监测系统通过类创建模块、定时器创建模块和当前帧数计算模块实时计算当前帧数,在IOS移动端开发Objective-C的类所需代码小,运行时占用内存也小,因此本方案可实现IOS应用在移动端发布之后对移动端的IOS应用的实时帧数的有效管理。
[0065] 本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。