CN112559231A - 应用检测方法、装置、设备以及存储介质 - Google Patents
应用检测方法、装置、设备以及存储介质 Download PDFInfo
- Publication number
- CN112559231A CN112559231A CN202011470185.4A CN202011470185A CN112559231A CN 112559231 A CN112559231 A CN 112559231A CN 202011470185 A CN202011470185 A CN 202011470185A CN 112559231 A CN112559231 A CN 112559231A
- Authority
- CN
- China
- Prior art keywords
- main thread
- application
- frame
- stuck
- call stack
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000001514 detection method Methods 0.000 title claims abstract description 43
- 238000000034 method Methods 0.000 claims description 33
- 238000009877 rendering Methods 0.000 claims description 16
- 238000012545 processing Methods 0.000 claims description 14
- 238000012216 screening Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 11
- 238000005070 sampling Methods 0.000 claims description 9
- 230000001360 synchronised effect Effects 0.000 claims description 4
- 238000010586 diagram Methods 0.000 description 16
- 230000009471 action Effects 0.000 description 10
- 238000004891 communication Methods 0.000 description 8
- 238000004364 calculation method Methods 0.000 description 4
- 230000006870 function Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 230000000694 effects Effects 0.000 description 2
- 230000003993 interaction Effects 0.000 description 2
- 230000008569 process Effects 0.000 description 2
- 238000012552 review Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001953 sensory effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/0703—Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
- G06F11/079—Root cause analysis, i.e. error or fault diagnosis
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Health & Medical Sciences (AREA)
- Biomedical Technology (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开提供了一种应用检测方法、装置、设备以及存储介质,涉及应用检测领域。具体实现方案为:基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据;基于卡顿数据,得到应用的卡顿原因。本公开实施例中,基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,能够快速准确地得到卡顿数据,进而基于卡顿数据快速准确地进行卡顿原因定位。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及应用检测领域。
背景技术
在安卓(Android)等操作***中,应用有很多滑动手势或者动画效果,如果手势不流畅,出现卡顿,会导致用户体验差,甚至用户会删除应用。反之,体验流畅可以吸引更多用户使用。导致卡顿的原因是很难定位的。例如,仅进行代码再次查看(review)难以发现哪些代码会导致卡顿,仅进行黑盒测试又很难确定具体导致卡顿的是什么代码。
发明内容
本公开提供了一种用于应用检测方法、装置、设备以及存储介质。
根据本公开的一方面,提供了一种应用检测方法,包括:
基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据;
基于卡顿数据,得到应用的卡顿原因。
根据本公开的另一方面,提供了一种应用检测装置,包括:
第一获取模块,用于基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据;
处理模块,用于基于卡顿数据,得到应用的卡顿原因。
根据本公开的另一方面,提供了一种电子设备,包括:
至少一个处理器;以及
与该至少一个处理器通信连接的存储器;其中,
该存储器存储有可被该至少一个处理器执行的指令,该指令被该至少一个处理器执行,以使该至少一个处理器能够执行本公开任一实施例中的应用检测方法。
根据本公开的另一方面,提供了一种存储有计算机指令的非瞬时计算机可读存储介质,该计算机指令用于使计算机执行本公开任一实施例中的应用检测方法。
根据本公开的另一方面,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现本公开任一实施例中的应用检测方法。
根据本公开的技术,基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,能够快速准确地得到卡顿数据,进而基于卡顿数据快速准确地进行卡顿原因定位。
应当理解,本部分所描述的内容并非旨在标识本公开的实施例的关键或重要特征,也不用于限制本公开的范围。本公开的其它特征将通过以下的说明书而变得容易理解。
附图说明
附图用于更好地理解本方案,不构成对本公开的限定。其中:
图1是根据本公开一实施例的应用检测方法的流程示意图;
图2是根据本公开另一实施例的应用检测方法的流程图;
图3是根据本公开另一实施例的应用检测方法的流程图;
图4是根据本公开另一实施例的应用检测方法的流程图;
图5a是根据本公开一实施例中出现卡顿的页面示例的示意图;
图5b是根据本公开一实施例中卡顿树的示意图;
图6是根据本公开一实施例的应用检测装置的示意性框图;
图7是根据本公开一实施例的应用检测装置的示意性框图;
图8是根据本公开一实施例的应用检测装置的示意性框图;
图9是根据本公开一实施例的应用检测装置的示意性框图;
图10是用来实现本公开实施例的应用检测的方法的电子设备的框图。
具体实施方式
以下结合附图对本公开的示范性实施例做出说明,其中包括本公开实施例的各种细节以助于理解,应当将它们认为仅仅是示范性的。因此,本领域普通技术人员应当认识到,可以对这里描述的实施例做出各种改变和修改,而不会背离本公开的范围和精神。同样,为了清楚和简明,以下的描述中省略了对公知功能和结构的描述。
图1是根据本公开一实施例的应用检测方法的流程示意图。该方法可以包括:
S11、基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据。
S12、基于所述卡顿数据,得到所述应用的卡顿原因。
在操作***例如安卓***中,可以运行很多应用(也可以称为应用程序),在应用运行时,可以获取该应用的每帧绘制间隔例如n毫秒。应用的主线程消息中可以包括应用执行的各任务的信息和耗时信息。例如,主线程消息中可以包括执行某个绘制任务的类型、名称、颜色、图形等信息,以及执行该绘制任务所用的时间长度。应用的主线程调用栈可以包括应用在执行每个任务时具体所需的动作、模块、元素等项目,以及每个项目所需要的耗时信息。例如,执行某个绘制任务需要生成多条线段,在主线程调用栈可以记录每条线段的信息以及绘制每条线段所需要的耗时信息。
本公开实施例中基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,能够快速准确地得到卡顿数据,进而基于卡顿数据快速准确地进行卡顿原因定位。
图2是根据本公开另一实施例的应用检测方法的流程图。该实施例的应用检测方法可以包括上述实施例的各步骤。在本实施例中,在S11中,基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据,包括:
S21、基于所述每帧绘制间隔和卡顿阈值,从所述主线程消息的执行信息和主线程调用栈中筛选得到达到卡顿阈值的卡顿数据。
具体地,可以根据实际场景预设卡顿阈值。例如,可以将卡顿阈值设置为16ms。如果每帧绘制间隔超出卡顿阈值,可以认为该帧出现卡顿原因。基于出现卡顿原因的帧所对应的时间范围,从主线程消息的执行信息和主线程调用栈中筛选卡顿数据。利用每帧绘制间隔和卡顿阈值可以获取超时较长的帧对应的主线程消息的执行信息和主线程调用栈,有利于合理地控制卡顿数据的数据量。
在一种实施方式中,基于所述每帧绘制间隔和卡顿阈值,从所述主线程消息的执行信息和主线程调用栈中筛选得到达到卡顿阈值的卡顿数据,包括:在第N帧绘制间隔大于卡顿阈值的情况下,基于第N帧的绘制开始时间戳和绘制结束时间戳,获取处于所述绘制开始时间戳和绘制结束时间戳之间的主线程消息的执行信息和主线程调用栈,N为大于或等于0的整数。基于绘制开始时间戳、绘制结束时间戳以及卡顿阈值,可以获取处于超时较长的帧的绘制开始时间戳和绘制结束时间戳之间的卡顿数据,有利于合理地控制卡顿数据的获取范围,得到符合需求且数据量不大的卡顿数据。
示例性地,如果基于某一帧的绘制开始时间戳和绘制结束时间戳得到某一帧的绘制间隔大于卡顿阈值,则表示在这一帧出现卡顿。可以从主线程消息的执行信息中,筛选出处于该绘制开始时间戳和绘制结束时间戳之间的各任务及其耗时信息。还可以从主线程调用栈中,筛选出处于该绘制开始时间戳和绘制结束时间戳之间的执行各任务所需的项目及其对应的耗时信息。
具体例如,如果基于某一帧的绘制开始时间戳T1和绘制结束时间戳T1得到该帧的绘制间隔为30毫秒,并且卡顿阈值为16毫秒,则表示在这一帧出现卡顿。可以从主线程消息的执行信息中,筛选出处于T1和T2之间的任务A1和A2,以及A1的耗时信息TA1,A2的耗时信息TA2。然后,还可以从主线程调用栈中,筛选出处于该T1和T2之间的执任务A1所需的项目:A11及其对应的耗时信息TA11,以及项目A12及其对应的耗时信息TA12;执行任务A2所需的项目:A21及其对应的耗时信息TA21,以及项目A22及其对应的耗时信息TA22。
在一种实施方式中,在S12中,基于所述卡顿数据,得到所述应用的卡顿原因,包括:
S22、基于所述卡顿数据生成用于表示所述应用的卡顿原因的日志树。通过日志树来表示卡顿原因,能够更加直观地显示出现卡顿的具体任务和耗时信息等,便于快速定位卡顿原因。
在一种实施方式中,基于所述卡顿数据生成用于表示所述应用的卡顿原因的日志树,包括:
基于处于所述每帧绘制间隔的绘制开始时间戳和绘制结束时间戳之间的所述应用执行的各任务及其耗时信息生成第一级节点;
基于执行各任务所需的项目及其对应的耗时信息生成第二级节点;
基于所述第一级节点和所述第二级节点,生成所述日志树,其中所述第二级节点为所述第一级节点的子节点。
在本公开实施例中,通过日志树的各级节点来出现卡顿时,表示执行的各任务及其耗时信息,以及执行各任务所需的项目及其对应的耗时信息,能够更加直观地显示出现卡顿的具体任务、项目和耗时信息等,便于快速定位卡顿原因。
图3是根据本公开另一实施例的应用检测方法的流程图。该实施例的应用检测方法可以包括上述实施例的各步骤。
在一种实施方式中,该方法还包括:
S31、基于***垂直同步信号获取所述每帧绘制间隔。例如,显示器进行扫描时可以参上垂直同步信号,基于垂直同步信号可以获得每帧的绘制开始时间戳和绘制结束时间戳,进而得到每帧绘制间隔。基于垂直同步信号获取的每帧绘制间隔能够表示用户实际运行体验,更加准确的定位出现卡顿的情况。例如,如果基于***垂直同步信号获取的某一帧的绘制间隔特别长,说明在这一帧出现了卡顿。
在一种实施方式中,该方法还包括:
S32、获取应用的主线程消息的执行信息,所述主线程消息的执行信息包括所述主线程消息执行的各任务及其对应的耗时信息。
示例性地,应用运行过程中,在主线程消息中可以包括应用所执行的各任务以及各任务对应的耗时信息。例如,某个绘图应用运行过程中,可能执行各种绘制任务,例如绘制图形的任务1、填充颜色的任务2和放大图形的任务3。在主线程消息中可以包括任务1的类型信息及其对应的耗时信息5毫秒,任务2的类型信息及其对应的耗时信息3毫秒,任务3的类型信息及其对应的耗时信息2毫秒。
通过获取主线程消息执行的各任务及其对应的耗时信息,有利于快速准确的定位到出现卡顿的任务及其对应的耗时信息。
在一种实施方式中,该方法还包括:
S33、采用抽样轮询的方式获取应用的主线程调用栈,所述主线程调用栈中包括执行各所述任务所需的项目及其对应的耗时信息。
示例性地,可以设置主线程调用栈的轮询时间间隔。按照轮询时间间隔抽样获取主线程调用栈。主线程调用栈中可以包括该应用在执行某些任务时具体执行的动作、使用的模块、使用的元素等,以及这些动作、模块、元素等对应的时间戳,进而可以确定这些动作、模块、元素等对应的耗时信息。例如,执行某个绘图任务包括***端点的动作,在主线程调用栈中可以包括执行该任务所需的***动作信息、端点位置信息等。
采用抽样轮询的方式获取应用的主线程调用栈中的包括执行各任务所需的项目及其对应的耗时信息,可以保证准确获取卡顿数据,并减少需要处理的数据量。
在一种实施方式中,该方法还包括:
S34、通过时间戳对所述每帧绘制间隔、所述主线程消息的执行信息和所述主线程调用栈进行匹配。
示例性地,在获取每帧绘制间隔时,可以获取每帧的绘制开始时间戳和绘制结束时间戳。在获取主线程消息的执行信息,可以获取每个任务的一个或多个时间戳。在轮询主线程调用栈时,可以获取每个任务中的各项目的时间戳等。将时间戳相同的每帧绘制间隔、所述主线程消息的执行信息和所述主线程调用栈进行匹配,便于在后续筛选时快速获取到所需的卡顿数据。例如,某一帧的绘制开始时间戳为T1,绘制结束时间戳为T2,时间戳处于T1和T2之间的各任务或各项目,可以确定为与该帧匹配。可以将时间戳匹配的帧、任务和项目等关联地存储。
在一种实施方式中,所述每帧绘制间隔、所述主线程消息的执行信息通过主线程获取,所述主线程调用栈通过异步线程获取;所述异步线程还用于执行得到卡顿数据和卡顿原因的步骤。例如,通过主线程执行S31和S32,通过异步线程执行S33、S34、S21和S22。通过异步线程执行本方案的相关计算步骤可以本方案对***的影响,进一步减少卡顿,优化应用运行效果。
图4是根据本公开另一实施例的应用检测方法的流程图。该方法可以包括:
S41:获取与卡顿相关的三种信息:
(1)根据***垂直同步信号获取每帧绘制间隔。例如,根据***垂直同步信号获取应用运行时绘制开始时间戳和绘制结束时间戳,进而可以确定的每帧绘制间隔为n毫秒。
(2)获取主线程消息循环执行了哪些任务以及各任务对应的耗时信息。基于执行每个任务的时间戳可以得到该任务对应的耗时信息。
(3)抽样轮询获取主线程调用栈。例如,可以设置轮询时间间隔,例如1微秒。按照轮询时间间隔每1微秒抽样获取主线程调用栈,得到该应用在执行任务时具体执行了哪些动作、使用了哪些模块,使用了哪些元素等,以及这些动作、模块、元素等对应的时间戳,进而可以确定这些动作、模块、元素等对应的耗时信息。
S42:将获取的这三种信息通过时间戳匹配起来。
例如,可以将每帧的绘制开始时间戳和绘制结束时间戳,任务的时间戳,执行任务所需的各种项目的时间戳匹配,使得时间戳相同的数据具有关联关系。
S43:筛选出达到卡顿阈值的数据。例如卡顿阈值为100毫秒,某一帧的绘制间隔大于卡顿阈值,可以获得该帧的开始时间戳和结束时间戳,并获取在开始时间戳和结束时间戳之间的时间范围内的上述的信息2和信息3。
S44:将耗时信息生成一棵完整的树在Log(日志平台)输出出来。例如,参见图5a和图5b,在卡顿的时间范围内,执行了主线程任务A,具体对主线程任务A中的页面上的模块A1(包括元素B1、B2)、A2(包括元素B3、B4)和A3(包括元素B5、B6、B7)进行了处理,则利用任务、模块、元素等,生成具有各个任务和各项目及其耗时信息的卡顿树,输出这个树包括的信息。
进一步地,为了进一步减少卡顿,可以采用生产者消费者模式在异步线程进行计算。例如,主线程可以主要获取每帧绘制间隔、主线程消息循环执行的任务以及各任务对应的耗时信息,并放入一个线程安全的队列中,异步线程获取主线程调用栈,并执行匹配、筛选、输出等计算。
基于本公开实施例的上述方案,可以向开发者端提供以下信息的至少之一:
(1)执行该应用出现了几次卡顿。
(2)每次卡顿的严重程度。例如,按照耗时信息中的具体时长来确定严重程度。
(3)每次卡顿是因为执行了哪些主线程任务,每个任务耗时多久。
(4)每个主线程任务都执行了哪些耗时方法调用,每个方法耗时多久。
采用本公开实施例,有利于提升定位卡顿问题的效率。
与相关技术相比,本方案能够快速获取更多更全面的与卡顿相关的信息。例如,基于开源框架BlockCanary,能获取到的信息主要包括执行了哪些方法,但是无法获取这些方法分别耗时多少。再如,基于安卓配置文件(Android Profiler),需要提前附着(attach),结束后需要显式分离(detach),并且,需要输出所有调用栈信息,而不只是卡顿的,分析成本和使用成本很高。本公开的方案,能够将用户实际运行体验和执行的代码实现完善地关联,使得出现性能问题时的定位成本降到最低。
图6是根据本公开一实施例的应用检测装置的框图。该装置可以包括:
第一获取模块61,用于基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据;
处理模块62,用于基于所述卡顿数据,得到所述应用的卡顿原因。
图7是根据本公开另一实施例的应用检测装置的框图。该实施例应用检测装置可以包括上述装置实施例的各组件。在本实施例中,在一种实施方式中,该装置的第一获取模块61还包括:
筛选子模块71,用于基于所述每帧绘制间隔和卡顿阈值,从所述主线程消息的执行信息和主线程调用栈中筛选得到达到卡顿阈值的卡顿数据。
在一种实施方式中,筛选子模块71具体用于在第N帧绘制间隔大于卡顿阈值的情况下,基于第N帧的绘制开始时间戳和绘制结束时间戳,获取处于所述绘制开始时间戳和绘制结束时间戳之间的主线程消息的执行信息和主线程调用栈,N为大于或等于0的整数。
图8是根据本公开另一实施例的应用检测装置的框图。该实施例应用检测装置可以包括上述装置实施例的各组件。在本实施例中,在一种实施方式中,处理模块62具体用于基于所述卡顿数据生成用于表示所述应用的卡顿原因的日志树。
如图8所示,在一种实施方式中,处理模块61包括:
第一生成子模块81,用于基于处于所述每帧绘制间隔的绘制开始时间戳和绘制结束时间戳之间的所述应用执行的各任务及其耗时信息生成第一级节点;
第二生成子模块82,用于基于执行各任务所需的项目及其对应的耗时信息生成第二级节点;
第三生成子模块83,基于所述第一级节点和所述第二级节点,生成所述日志树,其中所述第二级节点为所述第一级节点的子节点。
图9是根据本公开另一实施例的应用检测装置的框图。该实施例应用检测装置可以包括上述装置实施例的各组件。在本实施例中,在一种实施方式中,该装置还包括:
第二获取模块91,用于基于***垂直同步信号获取所述每帧绘制间隔。
在一种实施方式中,还包括:
第三获取模块92,用于获取应用的主线程消息的执行信息,所述主线程消息的执行信息包括所述主线程消息执行的各任务及其对应的耗时信息。
在一种实施方式中,该装置还包括:
第四获取模块93,用于采用抽样轮询的方式获取应用的主线程调用栈,所述主线程调用栈中包括执行各所述任务所需的项目及其对应的耗时信息。
在一种实施方式中,该装置还包括:
匹配模块94,用于通过时间戳对所述每帧绘制间隔、所述主线程消息的执行信息和所述主线程调用栈进行匹配。
在一种实施方式中,所述每帧绘制间隔、所述主线程消息的执行信息通过主线程获取,所述主线程调用栈通过异步线程获取;所述异步线程还用于执行得到卡顿数据和卡顿原因的步骤。例如,第一获取模块61通过主线程获取每帧绘制间隔、所述主线程消息的执行信息,通过异步线程获取主线程调用栈并得到卡顿数据。处理模块62通过异步线程获取卡顿原因。再如,第二获取模块91通过主线程执行基于***垂直同步信号获取所述每帧绘制间隔。第三获取模块92通过主线程执行获取应用的主线程消息的执行信息。第四获取模块93通过异步线程执行采用抽样轮询的方式获取应用的主线程调用栈。匹配模块94通过异步线程执行通过时间戳对所述每帧绘制间隔、所述主线程消息的执行信息和所述主线程调用栈进行匹配。筛选子模块71通过异步线程筛选得到卡顿数据。
本公开实施例各应用检测装置中的各单元、模块或子模块的功能可以参见上述应用检测方法中的对应描述,在此不再赘述。
根据本公开的实施例,本公开还提供了一种电子设备、一种可读存储介质和一种计算机程序产品。
图10示出了可以用来实施本公开的实施例的示例电子设备800的示意性框图。电子设备旨在表示各种形式的数字计算机,诸如,膝上型计算机、台式计算机、工作台、个人数字助理、服务器、刀片式服务器、大型计算机、和其它适合的计算机。电子设备还可以表示各种形式的移动装置,诸如,个人数字处理、蜂窝电话、智能电话、可穿戴设备和其它类似的计算装置。本文所示的部件、它们的连接和关系、以及它们的功能仅仅作为示例,并且不意在限制本文中描述的和/或要求的本公开的实现。
如图10所示,设备800包括计算单元801,其可以根据存储在只读存储器(ROM)802中的计算机程序或者从存储单元808加载到随机访问存储器(RAM)803中的计算机程序来执行各种适当的动作和处理。在RAM803中,还可存储设备800操作所需的各种程序和数据。计算单元801、ROM 802以及RAM 803通过总线804彼此相连。输入输出(I/O)接口805也连接至总线804。
设备800中的多个部件连接至I/O接口805,包括:输入单元806,例如键盘、鼠标等;输出单元807,例如各种类型的显示器、扬声器等;存储单元808,例如磁盘、光盘等;以及通信单元809,例如网卡、调制解调器、无线通信收发机等。通信单元809允许设备800通过诸如因特网的计算机网络和/或各种电信网络与其他设备交换信息/数据。
计算单元801可以是各种具有处理和计算能力的通用和/或专用处理组件。计算单元801的一些示例包括但不限于中央处理单元(CPU)、图形处理单元(GPU)、各种专用的人工智能(AI)计算芯片、各种运行机器学习模型算法的计算单元、数字信号处理器(DSP)、以及任何适当的处理器、控制器、微控制器等。计算单元80执行上文所描述的各个方法和处理,例如应用检测方法。例如,在一些实施例中,应用检测方法可被实现为计算机软件程序,其被有形地包含于机器可读介质,例如存储单元808。在一些实施例中,计算机程序的部分或者全部可以经由ROM 802和/或通信单元809而被载入和/或安装到设备800上。当计算机程序加载到RAM 803并由计算单元801执行时,可以执行上文描述的应用检测方法的一个或多个步骤。备选地,在其他实施例中,计算单元801可以通过其他任何适当的方式(例如,借助于固件)而被配置为执行应用检测方法。
本文中以上描述的***和技术的各种实施方式可以在数字电子电路***、集成电路***、场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、芯片上***的***(SOC)、负载可编程逻辑设备(CPLD)、计算机硬件、固件、软件、和/或它们的组合中实现。这些各种实施方式可以包括:实施在一个或者多个计算机程序中,该一个或者多个计算机程序可在包括至少一个可编程处理器的可编程***上执行和/或解释,该可编程处理器可以是专用或者通用可编程处理器,可以从存储***、至少一个输入装置、和至少一个输出装置接收数据和指令,并且将数据和指令传输至该存储***、该至少一个输入装置、和该至少一个输出装置。
用于实施本公开的方法的程序代码可以采用一个或多个编程语言的任何组合来编写。这些程序代码可以提供给通用计算机、专用计算机或其他可编程数据处理装置的处理器或控制器,使得程序代码当由处理器或控制器执行时使流程图和/或框图中所规定的功能/操作被实施。程序代码可以完全在机器上执行、部分地在机器上执行,作为独立软件包部分地在机器上执行且部分地在远程机器上执行或完全在远程机器或服务器上执行。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
为了提供与用户的交互,可以在计算机上实施此处描述的***和技术,该计算机具有:用于向用户显示信息的显示装置(例如,CRT(阴极射线管)或者LCD(液晶显示器)监视器);以及键盘和指向装置(例如,鼠标或者轨迹球),用户可以通过该键盘和该指向装置来将输入提供给计算机。其它种类的装置还可以用于提供与用户的交互;例如,提供给用户的反馈可以是任何形式的传感反馈(例如,视觉反馈、听觉反馈、或者触觉反馈);并且可以用任何形式(包括声输入、语音输入、或者触觉输入来接收来自用户的输入。
可以将此处描述的***和技术实施在包括后台部件的计算***(例如,作为数据服务器)、或者包括中间件部件的计算***(例如,应用服务器)、或者包括前端部件的计算***(例如,具有图形用户界面或者网络浏览器的用户计算机,用户可以通过该图形用户界面或者该网络浏览器来与此处描述的***和技术的实施方式交互)、或者包括这种后台部件、中间件部件、或者前端部件的任何组合的计算***中。可以通过任何形式或者介质的数字数据通信(例如,通信网络)来将***的部件相互连接。通信网络的示例包括:局域网(LAN)、广域网(WAN)和互联网。
计算机***可以包括客户端和服务器。客户端和服务器一般远离彼此并且通常通过通信网络进行交互。通过在相应的计算机上运行并且彼此具有客户端-服务器关系的计算机程序来产生客户端和服务器的关系。
应该理解,可以使用上面所示的各种形式的流程,重新排序、增加或删除步骤。例如,本公开中记载的各步骤可以并行地执行也可以顺序地执行也可以不同的次序执行,只要能够实现本公开公开的技术方案所期望的结果,本文在此不进行限制。
上述具体实施方式,并不构成对本公开保护范围的限制。本领域技术人员应该明白的是,根据设计要求和其他因素,可以进行各种修改、组合、子组合和替代。任何在本公开的精神和原则之内所作的修改、等同替换和改进等,均应包含在本公开保护范围之内。
Claims (23)
1.一种应用检测方法,包括:
基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据;
基于所述卡顿数据,得到所述应用的卡顿原因。
2.根据权利要求1所述的方法,其特征在于,基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据,包括:
基于所述每帧绘制间隔和卡顿阈值,从所述主线程消息的执行信息和主线程调用栈中筛选得到达到卡顿阈值的卡顿数据。
3.根据权利要求2所述的方法,其特征在于,基于所述每帧绘制间隔和卡顿阈值,从所述主线程消息的执行信息和主线程调用栈中筛选得到达到卡顿阈值的卡顿数据,包括:
在第N帧绘制间隔大于卡顿阈值的情况下,基于第N帧的绘制开始时间戳和绘制结束时间戳,获取处于所述绘制开始时间戳和绘制结束时间戳之间的主线程消息的执行信息和主线程调用栈,N为大于或等于0的整数。
4.根据权利要求1所述的方法,其特征在于,基于所述卡顿数据,得到所述应用的卡顿原因,包括:
基于所述卡顿数据生成用于表示所述应用的卡顿原因的日志树。
5.根据权利要求4所述的方法,其特征在于,基于所述卡顿数据生成用于表示所述应用的卡顿原因的日志树,包括:
基于处于所述每帧绘制间隔的绘制开始时间戳和绘制结束时间戳之间的所述应用执行的各任务及其耗时信息生成第一级节点;
基于执行各任务所需的项目及其对应的耗时信息生成第二级节点;
基于所述第一级节点和所述第二级节点,生成所述日志树,其中所述第二级节点为所述第一级节点的子节点。
6.根据权利要求1至5中任一项所述的方法,其特征在于,还包括:
基于***垂直同步信号获取所述每帧绘制间隔。
7.根据权利要求1至5中任一项所述的方法,其特征在于,还包括:
获取应用的主线程消息的执行信息,所述主线程消息的执行信息包括所述主线程消息执行的各任务及其对应的耗时信息。
8.根据权利要求1至5中任一项所述的方法,其特征在于,还包括:
采用抽样轮询的方式获取应用的主线程调用栈,所述主线程调用栈中包括执行各所述任务所需的项目及其对应的耗时信息。
9.根据权利要求1至5中任一项所述的方法,其特征在于,还包括:
通过时间戳对所述每帧绘制间隔、所述主线程消息的执行信息和所述主线程调用栈进行匹配。
10.根据权利要求1至5中任一项所述的方法,其特征在于,所述每帧绘制间隔、所述主线程消息的执行信息通过主线程获取,所述主线程调用栈通过异步线程获取;
所述异步线程还用于执行得到卡顿数据和卡顿原因的步骤。
11.一种应用检测装置,包括:
第一获取模块,用于基于应用的每帧绘制间隔、主线程消息的执行信息和主线程调用栈,得到卡顿数据;
处理模块,用于基于所述卡顿数据,得到所述应用的卡顿原因。
12.根据权利要求11所述的装置,其特征在于,所述第一获取模块包括:
筛选子模块,用于基于所述每帧绘制间隔和卡顿阈值,从所述主线程消息的执行信息和主线程调用栈中筛选得到达到卡顿阈值的卡顿数据。
13.根据权利要求12所述的装置,其特征在于,所述筛选子模块具体用于在第N帧绘制间隔大于卡顿阈值的情况下,基于第N帧的绘制开始时间戳和绘制结束时间戳,获取处于所述绘制开始时间戳和绘制结束时间戳之间的主线程消息的执行信息和主线程调用栈,N为大于或等于0的整数。
14.根据权利要求11所述的装置,其特征在于,所述处理模块具体用于基于所述卡顿数据生成用于表示所述应用的卡顿原因的日志树。
15.根据权利要求14所述的装置,其特征在于,所述处理模块包括:
第一生成子模块,用于基于处于所述每帧绘制间隔的绘制开始时间戳和绘制结束时间戳之间的所述应用执行的各任务及其耗时信息生成第一级节点;
第二生成子模块,用于基于执行各任务所需的项目及其对应的耗时信息生成第二级节点;
第三生成子模块,基于所述第一级节点和所述第二级节点,生成所述日志树,其中所述第二级节点为所述第一级节点的子节点。
16.根据权利要求11至15中任一项所述的装置,其特征在于,还包括:
第二获取模块,用于基于***垂直同步信号获取所述每帧绘制间隔。
17.根据权利要求11至15中任一项所述的装置,其特征在于,还包括:
第三获取模块,用于获取应用的主线程消息的执行信息,所述主线程消息的执行信息包括所述主线程消息执行的各任务及其对应的耗时信息。
18.根据权利要求11至16中任一项所述的装置,其特征在于,还包括:
第四获取模块,用于采用抽样轮询的方式获取应用的主线程调用栈,所述主线程调用栈中包括执行各所述任务所需的项目及其对应的耗时信息。
19.根据权利要求11至15中任一项所述的装置,其特征在于,还包括:
匹配模块,用于通过时间戳对所述每帧绘制间隔、所述主线程消息的执行信息和所述主线程调用栈进行匹配。
20.根据权利要求11至15中任一项所述的装置,其特征在于,所述每帧绘制间隔、所述主线程消息的执行信息通过主线程获取,所述主线程调用栈通过异步线程获取;所述异步线程还用于执行得到卡顿数据和卡顿原因的步骤。
21.一种电子设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,
所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够执行权利要求1-10中任一项所述的方法。
22.一种存储有计算机指令的非瞬时计算机可读存储介质,其特征在于,所述计算机指令用于使计算机执行权利要求1-10中任一项所述的方法。
23.一种计算机程序产品,包括计算机程序,该计算机程序在被处理器执行时实现根据权利要求1-10中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011470185.4A CN112559231B (zh) | 2020-12-15 | 2020-12-15 | 应用检测方法、装置、设备以及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011470185.4A CN112559231B (zh) | 2020-12-15 | 2020-12-15 | 应用检测方法、装置、设备以及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112559231A true CN112559231A (zh) | 2021-03-26 |
CN112559231B CN112559231B (zh) | 2023-10-03 |
Family
ID=75064677
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011470185.4A Active CN112559231B (zh) | 2020-12-15 | 2020-12-15 | 应用检测方法、装置、设备以及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112559231B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190427A (zh) * | 2021-05-11 | 2021-07-30 | 北京字节跳动网络技术有限公司 | 卡顿监控方法、装置、电子设备及存储介质 |
CN114064431A (zh) * | 2021-11-11 | 2022-02-18 | 北京字节跳动网络技术有限公司 | 卡顿检测方法、装置、可读介质及电子设备 |
CN117097883A (zh) * | 2023-10-20 | 2023-11-21 | 荣耀终端有限公司 | 一种丢帧故障原因确定方法、电子设备和存储介质 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6098169A (en) * | 1997-12-23 | 2000-08-01 | Intel Corporation | Thread performance analysis by monitoring processor performance event registers at thread switch |
US20090241095A1 (en) * | 2008-03-19 | 2009-09-24 | International Business Machines Corporation | Call Stack Sampling for Threads Having Latencies Exceeding a Threshold |
CN109426603A (zh) * | 2017-08-21 | 2019-03-05 | 北京京东尚科信息技术有限公司 | 一种分析应用程序卡顿的方法和装置 |
CN109840177A (zh) * | 2017-11-24 | 2019-06-04 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
CN110020277A (zh) * | 2017-08-28 | 2019-07-16 | 远光软件股份有限公司 | 通过指标关联树查询指标关联关系和数值变化原因的方法 |
CN111273980A (zh) * | 2020-01-14 | 2020-06-12 | 中国平安财产保险股份有限公司 | 界面线程可视化方法、装置、计算机设备及存储介质 |
CN111427779A (zh) * | 2020-03-18 | 2020-07-17 | 深圳市乐宜科技有限公司 | 应用程序的卡顿信息采集方法和装置 |
CN112052078A (zh) * | 2019-06-06 | 2020-12-08 | 阿里巴巴集团控股有限公司 | 一种耗时的确定方法和装置 |
-
2020
- 2020-12-15 CN CN202011470185.4A patent/CN112559231B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6098169A (en) * | 1997-12-23 | 2000-08-01 | Intel Corporation | Thread performance analysis by monitoring processor performance event registers at thread switch |
US20090241095A1 (en) * | 2008-03-19 | 2009-09-24 | International Business Machines Corporation | Call Stack Sampling for Threads Having Latencies Exceeding a Threshold |
CN109426603A (zh) * | 2017-08-21 | 2019-03-05 | 北京京东尚科信息技术有限公司 | 一种分析应用程序卡顿的方法和装置 |
CN110020277A (zh) * | 2017-08-28 | 2019-07-16 | 远光软件股份有限公司 | 通过指标关联树查询指标关联关系和数值变化原因的方法 |
CN109840177A (zh) * | 2017-11-24 | 2019-06-04 | 腾讯科技(深圳)有限公司 | 一种卡顿的处理方法及相关设备 |
CN112052078A (zh) * | 2019-06-06 | 2020-12-08 | 阿里巴巴集团控股有限公司 | 一种耗时的确定方法和装置 |
CN111273980A (zh) * | 2020-01-14 | 2020-06-12 | 中国平安财产保险股份有限公司 | 界面线程可视化方法、装置、计算机设备及存储介质 |
CN111427779A (zh) * | 2020-03-18 | 2020-07-17 | 深圳市乐宜科技有限公司 | 应用程序的卡顿信息采集方法和装置 |
Non-Patent Citations (2)
Title |
---|
时向泉;苏金树;陈一骄;吴纯青;: "网络处理器并行性能模型及多线程停顿特性", 通信学报, no. 09 * |
贾红健;: "Android APP卡顿的关键原因及解决措施研究", 电脑编程技巧与维护, no. 03 * |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190427A (zh) * | 2021-05-11 | 2021-07-30 | 北京字节跳动网络技术有限公司 | 卡顿监控方法、装置、电子设备及存储介质 |
CN113190427B (zh) * | 2021-05-11 | 2024-07-19 | 抖音视界有限公司 | 卡顿监控方法、装置、电子设备及存储介质 |
CN114064431A (zh) * | 2021-11-11 | 2022-02-18 | 北京字节跳动网络技术有限公司 | 卡顿检测方法、装置、可读介质及电子设备 |
CN117097883A (zh) * | 2023-10-20 | 2023-11-21 | 荣耀终端有限公司 | 一种丢帧故障原因确定方法、电子设备和存储介质 |
CN117097883B (zh) * | 2023-10-20 | 2024-04-12 | 荣耀终端有限公司 | 一种丢帧故障原因确定方法、电子设备和存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112559231B (zh) | 2023-10-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112559231B (zh) | 应用检测方法、装置、设备以及存储介质 | |
CN114445047A (zh) | 工作流生成方法、装置、电子设备及存储介质 | |
CN112965903A (zh) | 测试方法、装置、电子设备及计算机可读存储介质 | |
CN112486645A (zh) | 一种定时任务监控方法、装置、电子设备和介质 | |
CN113468021B (zh) | 监控性能数据的方法、装置、设备以及存储介质 | |
CN111008305B (zh) | 一种视觉搜索方法、装置以及电子设备 | |
CN114554110B (zh) | 视频生成方法、装置、电子设备和存储介质 | |
CN114706610A (zh) | 一种业务流程图生成方法、装置、设备及存储介质 | |
CN111352817B (zh) | 响应时间测试方法、响应时间测试装置和电子设备 | |
CN114445682A (zh) | 训练模型的方法、装置、电子设备、存储介质及产品 | |
CN112070487A (zh) | 基于ai的rpa流程的生成方法、装置、设备及介质 | |
CN114428646B (zh) | 一种数据处理方法、装置、电子设备及存储介质 | |
CN116662276B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN111416744B (zh) | 互联网线上监控报警的方法及装置 | |
CN116225941A (zh) | 一种页面检测方法、装置、电子设备及存储介质 | |
CN115686714A (zh) | 一种页面展示方法、装置、设备及存储介质 | |
CN115454310A (zh) | 一种数据的页面交互方法、装置、设备及介质 | |
CN114595155A (zh) | 一种远程代码分析方法、装置、设备及介质 | |
CN115658341A (zh) | 一种Freeswitch读写数据的方法、装置、设备及介质 | |
CN117873452A (zh) | 静态变量管理方法、装置、电子设备及存储介质 | |
CN113407844A (zh) | 小程序框架的版本推荐方法、装置、设备以及存储介质 | |
US20220214956A1 (en) | Estimation device, estimation method and estimation program | |
CN115933932A (zh) | 电子白板的笔迹生成方法、装置、电子设备及存储介质 | |
CN118132181A (zh) | 界面显示方法、装置、输注泵及存储介质 | |
CN113297492A (zh) | 数据确定方法、数据确定装置、电子设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |