本发明涉及一种ios卡顿的监控方法及系统,属于ios应用技术领域。
背景技术:
目前各大公司都有了自己的ios(苹果公司的移动操作系统)平台困顿监控方案,基本原理都是利用一个单独的子线程来定时的监控主线程的runloop(是接收处理异步消息事件的循环)状态来计算屏幕刷新率,这样的方案主要解决的是主线程的cpu(中央处理器,centralprocessingunit)占用率过高导致的卡顿,目前app的卡顿原因多种多样,主线程cpu耗时过久只是其中一种原因,gpu(图形处理器,graphicsprocessingunit)的瓶颈导致的卡顿也是一个重要的原因,现有的方案无法监控gpu的瓶颈,掩盖了真实的原因,导致问题的排查更加困难。
技术实现要素:
本发明要解决的技术问题是:为克服上述问题,提供一种能够独立监控cpu和gpu的性能指标的ios卡顿的监控方法及系统。
本发明解决其技术问题所采用的技术方案是:
一种ios卡顿的监控方法,包括以下步骤:
s1:有渲染任务时,先在gpu中建立新的第一图层;
s2:通过所述第一图层将绘制指令从后台提交到gpu;
s3:在cpu中建立监控gpu第一子线程,通过所述第一子线程对gpu进行卡顿监控。
优选地,还包括处理保存步骤s4:在cpu中建立新的处理子线程,通过所述处理子线程处理所述第一子线程输出的gpu处理频率,并将结果作为监听数据保存。
优选地,所述步骤s2中,所述第一图层在执行渲染任务时,先调取draw方法,在调取同时,将数据发送给第一子线程,之后所述第一图层再进行渲染。
优选地,所述步骤s3中,所述第一子线程在获取第一图层的数据后,计算次数/时间,得到gpu的处理频率。
优选地,所述步骤s4中,所述处理子线程获得第一子线程的gpu处理频率后,先进行处理,并记录堆栈上下文,然后渲染结果到ui,最后将数据作为监听数据保存到文件。
一种ios卡顿的监控系统,包括:
渲染处理模块:有渲染任务时,先在gpu中建立新的第一图层,并通过所述第一图层将绘制指令从后台提交到gpu;
监控模块:在cpu中建立监控gpu的第一子线程,通过所述第一子线程对gpu进行卡顿监控。
优选地,还包括:
监控存储模块:在cpu中建立新的处理子线程,通过所述处理子线程处理所述第一子线程输出的gpu处理频率,并将结果作为监听数据保存。
本发明的有益效果是:本发明在接到渲染指令时,建立一个新的图层layer,该图层layer可以从后台线程将绘制指令提交给gpu,从而不占用主线程的runloop,也就不会影响cpu卡顿的监控,从而实现独立监控gpu的帧处理频率。
附图说明
下面结合附图和实施例对本发明进一步说明。
图1是本发明一个实施例的流程图;
图2是本发明一个实施例的示意图。
具体实施方式
现在结合附图对本发明作进一步详细的说明。这些附图均为简化的示意图,仅以示意方式说明本发明的基本结构,因此其仅显示与本发明有关的构成。
实施例1
如图1所示的本发明所述一种ios卡顿的监控方法,包括以下步骤:
s1:有渲染任务时,先在gpu中建立新的第一图层;
ios系统渲染框架调用绘制方法来获取cpu发来的绘制指令,再将指令提交给gpu进行渲染,在gpu执行渲染的这段时间,渲染框架会占用当前提交绘制指令线程的runloop,在ios平台,苹果要求必须在主线程执行这些ui操作,这导致了gpu在执行渲染操作的时候,cpu的主线程的runloop也被占用,导致无法判断出是因为gpu的卡顿而引起的cpu卡顿,从而直接影响了监控的准确性,所以本发明在接到渲染指令时,建立一个新的图层layer,该图层layer可以从后台线程将绘制指令提交给gpu,从而不占用主线程的runloop,也就不会影响cpu卡顿的监控,从而实现独立监控gpu的帧处理频率。
s2:通过所述第一图层将绘制指令从后台提交到gpu;
在优选地实施方式中,所述步骤s2中,所述第一图层在执行渲染任务时,先调取draw方法,在调取同时,将数据发送给第一子线程,之后所述第一图层再进行渲染。
s3:在cpu中建立监控gpu第一子线程,通过所述第一子线程对gpu进行卡顿监控。所述步骤s3中,所述第一子线程在获取第一图层的数据后,计算次数/时间,得到gpu的处理频率,在ios系统中,每次刷新时,需要cpu和gpu配合完成一次图像显示,而保证系统流畅的标准的幕刷新频率是60hz(promotion下是120hz),也就是每隔16.67ms会进行一次屏幕刷新,以此作为监控的标准。
处理保存步骤s4:如图2所示,在cpu中建立新的处理子线程,通过所述处理子线程处理所述第一子线程输出的gpu处理频率,并将结果作为监听数据保存。
所述步骤s4中,所述处理子线程获得第一子线程的gpu处理频率后,先进行处理,并记录堆栈上下文,然后渲染结果到ui,最后将数据作为监听数据保存到文件。
实施例2
一种ios卡顿的监控系统,包括:
渲染处理模块:有渲染任务时,先在gpu中建立新的第一图层,并通过所述第一图层将绘制指令从后台提交到gpu,然后由gpu进行后续的渲染指令;
监控模块:在cpu中建立监控gpu的第一子线程,通过所述第一子线程对gpu进行卡顿监控。
在优选的实施方式中,还包括:
监控存储模块:在cpu中建立新的处理子线程,通过所述处理子线程处理所述第一子线程输出的gpu处理频率,并将结果作为监听数据保存。
本发明主要侧重于提供一种独立监控ios系统gpu的方法,保证对cpu监控的准确性,在本发明没有赘述的处理部分为本领域常规的处理方法,故不再赘述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
1.一种ios卡顿的监控方法,其特征在于,包括以下步骤:
s1:有渲染任务时,先在gpu中建立新的第一图层;
s2:通过所述第一图层将绘制指令从后台提交到gpu;
s3:在cpu中建立监控gpu第一子线程,通过所述第一子线程对gpu进行卡顿监控。
2.如权利要求1所述的ios卡顿的监控方法,其特征在于,还包括处理保存步骤s4:在cpu中建立新的处理子线程,通过所述处理子线程处理所述第一子线程输出的gpu处理频率,并将结果作为监听数据保存。
3.如权利要求1所述的ios卡顿的监控方法,其特征在于,所述步骤s2中,所述第一图层在执行渲染任务时,先调取draw方法,在调取同时,将数据发送给第一子线程,之后所述第一图层再进行渲染。
4.如权利要求3所述的ios卡顿的监控方法,其特征在于,所述步骤s3中,所述第一子线程在获取第一图层的数据后,计算次数/时间,得到gpu的处理频率。
5.如权利要求2所述的ios卡顿的监控方法,其特征在于,所述步骤s4中,所述处理子线程获得第一子线程的gpu处理频率后,先进行处理,并记录堆栈上下文,然后渲染结果到ui,最后将数据作为监听数据保存到文件。
6.一种ios卡顿的监控系统,其特征在于,包括:
渲染处理模块:有渲染任务时,先在gpu中建立新的第一图层,并通过所述第一图层将绘制指令从后台提交到gpu;
监控模块:在cpu中建立监控gpu的第一子线程,通过所述第一子线程对gpu进行卡顿监控。
7.如权利要求6所述的ios卡顿的监控系统,其特征在于,还包括:
监控存储模块:在cpu中建立新的处理子线程,通过所述处理子线程处理所述第一子线程输出的gpu处理频率,并将结果作为监听数据保存。
技术总结