CN115391130A - 应用程序的耗时监控方法、装置和设备 - Google Patents
应用程序的耗时监控方法、装置和设备 Download PDFInfo
- Publication number
- CN115391130A CN115391130A CN202110564229.8A CN202110564229A CN115391130A CN 115391130 A CN115391130 A CN 115391130A CN 202110564229 A CN202110564229 A CN 202110564229A CN 115391130 A CN115391130 A CN 115391130A
- Authority
- CN
- China
- Prior art keywords
- calling
- time
- consuming
- scene
- methods
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3051—Monitoring arrangements for monitoring the configuration of the computing system or of the computing system component, e.g. monitoring the presence of processing resources, peripherals, I/O links, software programs
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本公开涉及一种应用程序的耗时监控方法、装置和设备,该方法包括:确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,每个调用方法的耗时时长是基于对应的调用方法的类型确定的;向服务器发送全部调用方法的耗时时长和调用关系,以使服务器基于全部调用方法的耗时时长和调用关系对场景进行监控。从而,能够对应用程序的一个场景中的全部调用方法进行全面且精准的监控。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种应用程序的耗时监控方法、装置和设备。
背景技术
在应用程序(Application,APP)的一个场景的运行阶段中,可能会出现APP的崩溃、画面卡顿、界面绘制缓慢、网络请求错误或超时等性能问题,影响用户使用APP的体验,导致大量用户的流失。因此,如何及时对该场景下的APP性能进行监控是现亟需解决的问题。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本公开提供了一种应用程序的耗时监控方法、装置和设备。
第一方面,本公开提供了一种应用程序的耗时监控方法,包括:
确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,每个调用方法的耗时时长是基于对应的调用方法的类型确定的;
向服务器发送全部调用方法的耗时时长和调用关系,以使服务器基于全部调用方法的耗时时长和调用关系对场景进行监控。
通过第一方面提供的方法,监控代码可确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,其中每个调用方法的耗时时长是基于对应的调用方法的类型确定的。监控代码可向服务器发送全部调用方法的耗时时长和调用关系,使得服务器基于全部调用方法的耗时时长和调用关系对该场景进行全面监控。从而,能够对应用程序的一个场景中的全部调用方法进行全面且精准的监控,方便分析出应用程序的一个场景的运行阶段中存在耗时的调用方法,有助于了解全部调用方法的耗时情况和分布情况,提供了全部调用方法的性能优化的指导方向,实现了应用程序运行一个场景的自动化地的性能监控,提高了应用程序的性能监控效率,提升了用户使用应用程序的体验感。
在一种可能的设计中,在一个调用方法的类型属于C类方法时,确定调用方法的耗时时长,包括:在一个调用方法的开始时刻绑定设置第一符号;在一个调用方法的终止时刻绑定设置第二符号;通过开始方法获取第一符号开始执行的第一时刻,通过结束方法获取第二符号开始执行的第二时刻,开始方法和结束方法均设置在一个调用方法的执行过程中;将第二时刻与第一时刻的差值确定为一个调用方法的耗时时长。
在一种可能的设计中,在一个调用方法的类型属于Objective-C类方法时,确定调用方法的耗时时长,包括:通过开始方法获取一个调用方法的开始时刻,通过结束方法获取一个调用方法的结束时刻,开始方法和结束方法均设置在一个调用方法的执行过程中;将结束时刻与开始时刻的差值确定为一个调用方法的耗时时长。
在一种可能的设计中,该方法还包括:在目标线程中存储全部调用方法的耗时时长和调用关系。
在一种可能的设计中,在目标线程中存储全部调用方法的耗时时长和调用关系,包括:基于全部调用方法的调用关系,确定全部调用方法中的全部树结构;在目标线程中存储全部树结构以及每个树结构中的每个调用方法的耗时时长。
在一种可能的设计中,该方法还包括:在目标线程中存储每个树结构的调用深度。
在一种可能的设计中,场景为应用程序启动首帧页面的场景;或者,场景为应用程序通过新增的控件调用应用程序的一个页面的场景;或者,场景为应用程序从一个页面跳转到另一个页面的场景。
第二方面,本公开提供了一种应用程序的耗时监控装置,包括:
确定模块,用于确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,每个调用方法的耗时时长是基于对应的调用方法的类型确定的;
发送模块,用于向服务器发送全部调用方法的耗时时长和调用关系,以使服务器基于全部调用方法的耗时时长和调用关系对场景进行监控。
在一种可能的设计中,确定模块,具体用于在一个调用方法的开始时刻绑定设置第一符号;在一个调用方法的终止时刻绑定设置第二符号;通过开始方法获取第一符号开始执行的第一时刻,通过结束方法获取第二符号开始执行的第二时刻,开始方法和结束方法均设置在一个调用方法的执行过程中;将第二时刻与第一时刻的差值确定为一个调用方法的耗时时长。
在一种可能的设计中,确定模块,具体用于在一个调用方法的类型属于Objective-C类方法时,通过开始方法获取一个调用方法的开始时刻,通过结束方法获取一个调用方法的结束时刻,开始方法和结束方法均设置在一个调用方法的执行过程中;将结束时刻与开始时刻的差值确定为一个调用方法的耗时时长。
在一种可能的设计中,该装置还包括:存储模块,用于在目标线程中存储全部调用方法的耗时时长和调用关系。
在一种可能的设计中,存储模块,具体用于基于全部调用方法的调用关系,确定全部调用方法中的全部树结构;在目标线程中存储全部树结构以及每个树结构中的每个调用方法的耗时时长。
在一种可能的设计中,存储模块,还用于在目标线程中存储每个树结构的调用深度。
在一种可能的设计中,场景为应用程序启动首帧页面的场景;或者,场景为应用程序通过新增的控件调用应用程序的一个页面的场景;或者,场景为应用程序从一个页面跳转到另一个页面的场景。
上述第二方面以及上述第二方面的各可能的设计中所提供的应用程序的耗时监控装置,其有益效果可以参见上述第一方面和第一方面的各可能的实施方式所带来的有益效果,在此不再赘述。
第三方面,本公开提供了一种电子设备,包括:存储器和处理器;存储器用于存储程序指令;处理器用于调用存储器中的程序指令使得电子设备执行第一方面及第一方面任一种可能的设计中的应用程序的耗时监控方法。
第四方面,本公开提供了一种计算机存储介质,包括计算机指令,当计算机指令在电子设备上运行时,使得电子设备执行第一方面及第一方面任一种可能的设计中的应用程序的耗时监控方法。
第五方面,本公开提供了一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行第一方面及第一方面任一种可能的设计中的应用程序的耗时监控方法。
第六方面,本公开提供了一种芯片系统,芯片系统包括:处理器;当处理器执行存储器中存储的计算机指令时,电子设备执行第一方面及第一方面任一种可能的设计中的应用程序的耗时监控方法。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本公开实施例提供的应用程序的耗时监控方法的信令交互示意图;
图2为本公开实施例提供的应用程序的耗时监控装置的结构示意图;
图3为本公开实施例提供的应用程序的耗时监控装置的结构示意图。
具体实施方式
为了能够更清楚地理解本公开的上述目的、特征和优点,下面将对本公开的方案进行进一步描述。需要说明的是,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。
在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
示例性地,本公开提供一种应用程序的耗时监控方法、装置、设备、计算机存储介质以及计算机程序产品,该方法应用于一个应用程序中的监控代码,监控代码是在该应用程序的编译阶段中被编写到该应用程序的安装包中的软件代码。
本公开中,监控代码可获取在应用程序的一个场景的运行阶段中的全部调用方法,并基于每个调用方法的类型,确定出全部调用方法的耗时时长,且基于全部调用方法间的调用,确定出全部调用方法的调用关系。监控代码可向服务器发送全部调用方法的耗时时长和调用关系,使得服务器基于全部调用方法的耗时时长和调用关系对该场景进行全面监控。
从而,能够对应用程序的一个场景中的全部调用方法进行全面且精准的监控,方便分析出应用程序的一个场景的运行阶段中存在耗时的调用方法,有助于了解全部调用方法的耗时情况和分布情况,提供了全部调用方法的性能优化的指导方向,实现了应用程序运行一个场景的自动化地的性能监控,提高了应用程序的性能监控效率,提升了用户使用应用程序的体验感。
其中,本公开对应用程序的具体业务类型不做限定。且应用程序的一个场景可理解为该应用程序从开始启动到显示预设页面的时间段。在一些实施例中,该场景可以为该应用程序启动首帧页面(如主页面或引流页面)的场景,也可以为应用程序通过新增的控件调用应用程序的一个页面的场景,如通过新增的添加控件调用相机拍摄页面,也可以为应用程序从一个页面跳转到另一个页面的场景。
本公开中,监控代码可随应用程序的安装包一起安装在电子设备中。故,电子设备与服务器可共同组成一个通信系统。
其中,电子设备可以是平板电脑、手机、可穿戴设备、车载设备、增强现实(augmented reality,AR)/虚拟现实(virtual reality,VR)设备、笔记本电脑、超级移动个人计算机(ultra-mobile personal computer,UMPC)、上网本、个人数字助理(personaldigital assistant,PDA)、智能电视、智慧屏、高清电视、4K电视、智能音箱、智能投影仪等设备,本公开对电子设备的具体类型不作任何限制。
其中,本公开对电子设备的操作系统的类型不做限定。例如,Android系统、Linux系统、Windows系统、iOS系统等。
基于前述描述,本公开以实施例将以通信系统中的监控代码和服务器为例,结合附图和应用场景,对本公开提供的应用程序的耗时监控方法进行详细阐述。
请参阅图1,图1为本公开实施例提供的应用程序的耗时监控方法的信令交互示意图。如图1所示,本公开提供的应用程序的耗时监控方法可以包括:
S101、监控代码确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,每个调用方法的耗时时长是基于对应的调用方法的类型确定的。
随着应用程序的一个场景从开始运行到结束运行,监控代码可获取到在该场景的整个运行阶段中启动的全部方法,即全部调用方法。需要说明的是,本公开提及的调用方法或方法也可称为函数。
在该场景的整个运行阶段中,监控代码基于方法间的调用,可确定全部调用方法的调用关系。其中,调用方法的调用关系指的是调用方法是否有被其他方法调用,如调用方法A调用方法B,则调用方法A与方法B存在调用关系,和/或,调用方法是否有调用其他方法,如调用方法A被方法C调用,则调用方法A与方法C存在调用关系。
并且,在该场景的整个运行阶段中,监控代码基于方法的类型,可确定全部调用方法的耗时时长。其中,调用方法的耗时时长指的是该调用方法在该场景的运行阶段中完整的执行时长。
在调用方法有调用其他方法时,该调用方法的耗时时长包括该调用方法自身的启动时长以及其他方法的启动时长。在调用方法没有调用其他方法时,该调用方法的耗时时长包括该调用方法自身的启动时长。其中,本公开提及的一个方法的启动时长指的是该方法从开始启动到结束启动的时长。
S102、监控代码向服务器发送全部调用方法的耗时时长和调用关系。
在确定出全部调用方法的耗时时长和调用关系后,监控代码可向服务器发送全部调用方法的耗时时长和调用关系。
其中,本公开对全部调用方法的耗时时长和调用关系的发送方式不做限定。在一些实施例中,监控代码可向服务器主动发送全部调用方法的耗时时长和调用关系,和/或,监控代码也可在从服务器接收到获取指令后,向服务器发送全部调用方法的耗时时长和调用关系。
S103、服务器基于全部调用方法的耗时时长和调用关系,对场景进行监控。
在接收到全部调用方法的耗时时长和调用关系后,服务器可基于全部调用方法的耗时时长和调用关系对该场景进行监控,使得服务器可向技术人员通知该场景的性能参数。其中,该场景的性能参数可包括全部调用方法的耗时时长和调用关系),还可包括全部调用方法中的所存在耗时的调用方法,以及全部调用方法中的哪些调用方法需要进行优化处理。
其中,本公开对服务器通知该场景的性能参数的具体实现方式不做限定。另外,服务器还可向技术人员显示该场景的性能参数,使得技术人员能够直观了解到该场景的性能参数。本公开提供的应用程序的耗时监控方法,通过监控代码可确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,其中每个调用方法的耗时时长是基于对应的调用方法的类型确定的。监控代码可向服务器发送全部调用方法的耗时时长和调用关系,使得服务器基于全部调用方法的耗时时长和调用关系对该场景进行全面监控。从而,能够对应用程序的一个场景中的全部调用方法进行全面且精准的监控,方便分析出应用程序的一个场景的运行阶段中存在耗时的调用方法,有助于了解全部调用方法的耗时情况和分布情况,提供了全部调用方法的性能优化的指导方向,实现了应用程序运行一个场景的自动化地的性能监控,提高了应用程序的性能监控效率,提升了用户使用应用程序的体验感。
基于上述实施例的描述,监控代码基于每个调用方法的类型,可确定对应的调用方法的耗时时长,以便快速且准确的确定出每个调用方法的耗时时长。
其中,一个调用方法的类型可基于应用程序的安装包在编译阶段中的编写语言类型进行确定。在一些实施例中,在应用程序为iOS应用程序时,应用程序的安装包可采用C类编写语言和Objective-C类编写语言进行编写。因此,调用方法的类型可划分为C类方法和Objective-C类方法。
在一个调用方法的类型属于C方法时,监控代码可重新对该调用方法绑定预设符号,方便实现对该调用方法的插桩(hook)处理。
在一些实施例中,监控代码基于方法的时刻与符号之间的绑定关系,可在一个调用方法的开始时刻绑定设置第一符号,并在一个调用方法的终止时刻绑定设置第二符号。其中,第一符号和第二符号为预设符号,本公开对第一符号和第二符号的具体实现方式不做限定。
监控代码可通过开始方法可获取第一符号开始执行的第一时刻,且通过结束方法可获取第二符号开始执行的第二时刻。其中,开始方法和结束方法均设置在该调用方法的执行过程中。从而,监控代码可将第二时刻与第一时刻的差值确定为该调用方法的耗时时长。
举例而言,监控代码中可包括有动态链接器(the dynamic link editor,dyld)缓存。Dyld缓存是通过更新内核目标代码(简称Mach-O,为二进制的机器码)的数据段(__DATAsegment)的特定部分中的两个指针(其中,两个指针的位置分别用于指示调用方式的开始时刻和结束时刻)来分别绑定懒加载符号(lazy)和省略懒加载符号(non-lazy),即通过确认传递给重新绑定符号(rebind_symbol)中的每个符号(即lazy和non-lazy)的名称来更新每个符号对应的指针的位置,并通过前述指针的位置重新绑定lazy和non-lazy。从而,实现对一个调用方法的开始时刻和结束时刻分别进行符号的重新绑定。
综上,监控代码可采用开始方法pushCallRecord监测lazy开始执行的第一时刻,以及采用结束方法popCallRecord监测non-lazy开始执行的第二时刻,并将第二时刻和第一时刻的差值确定为调用方法的耗时时长。
在一个调用方法的类型属于Objective-C方法时,该调用方法即为objc_msgSend。在一些实施例中,监控代码可通过开始方法可获取该调用方法的开始时刻,且通过结束方法可获取该调用方法的结束时刻。其中,开始方法和结束方法均设置在该调用方法的执行过程中。从而,监控代码可将结束时刻与开始时刻的差值确定为该调用方法的耗时时长。
举例而言,监控代码可采用开始方法pushCallRecord和结束方法popCallRecord,分别记录objc_msgSend方法调用前后的时刻,再通过时刻间的差值确定出objc_msgSend方法的耗时时长。
基于上述实施例的描述,监控代码还可设置目标线程来存储该场景的性能参数,方便随时向服务器发送该场景的性能参数,且有利于统一管理该场景的性能参数。其中,目标线程可以为一个或者多个线程,本公开对此不做限定。
在一些实施例中,监控代码可将全部调用方法的耗时时长和调用关系存储在目标线程中。监控代码可从目标线程中调用全部调用方法的耗时时长和调用关系,以便随时且快速向服务器发送全部调用方法的耗时时长和调用关系。
其中,本公开对目标线程存储该场景的性能参数的具体实现方式不做限定。在一些实施例中,由于全部调用方法是按照树结构的方式进行调用的。因此,监控代码基于全部调用方法的调用关系,可确定全部调用方法中的全部树结构。从而,监控代码可将全部树结构以及每个树结构中的每个调用方法的耗时时长存储在目标线程中,简化还原该场景的全部调用方法的调用关系。
其中,本公开对监控代码确定全部树结构的具体实现方式不做限定。例如,监控代码可从全部调用方法中确定出全部根调用方法。针对其中一个根调用方法而言,监控代码可确定该个根调用方法对应的全部子调用方法,再将该个根调用方法和该个根调用方法对应的全部子方法确定为一个树结构。从而,监控代码可确定出全部树结构。
除了全部树结构以及每个树结构的每个调用方法的耗时时长之外,监控代码还可将每个树结构的调用深度(如采用索引(index)进行表示)存储在目标线程中,实现全部树结构、每个树结构的每个调用方法的耗时时长以及每个树结构的调用深度三者的绑定存储,方便随时进行数据存取和数据展示。
另外,监控代码还可将每个树结构中的每个调用方法的调用深度存储在目标线程中。其中,本公开对每个调用方法的调用深度的获取方式不做限定。
在一些实施例中,由于一个树结构中的全部调用方法可存在多种遍历方式,如一个树结构中的全部调用方法包括:方法A、方法B和方法C且方法A调用方法B和方发C。则遍历方法可包括:方法A可先调用方法B后调用方法C,或者,方法A可先调用方法C后调用方法A。因此,监控代码可利用开始方法pushCallRecord和结束方法popCallRecord,记录一个树结构的调用深度。在该树结构中,开始方法pushCallRecord在一个调用方法开始调用其他方法时对该树结构的调用深度加一,在该调用方法结束调用其他方法时对该树结构的调用深度减一。从而,该监控代码可按照一个树结构中的全部调用方法的遍历方式,确定出该树结构的调用深度以及该树结构中的每个调用方法的调用深度。
假设一个树结构中的全部调用方法包括:方法A、方法B和方法C、方法D和方法E,且方法A调用方法B和方法C,方法B调用方法D和方法E。
在调用方法A的开始之前,树结构的深度设为0。在调用方法A的开始后,开始方法pushCallRecord可获取方法A的开始时刻,此时,树结构的调用深度为0,方法A的调用深度为0。
由于方法A先调用方法B。因此,开始方法pushCallRecord可获取方法B的开始时刻,此时,树结构的调用深度+1,变为1,方法B的调用深度为1。
由于方法B先调用方法D。因此,开始方法pushCallRecord可获取方法D的开始时刻,此时,树结构的调用深度+1,变为2,方法B的调用深度为2。
在调用方法D结束时,结束方法popCallRecord可获取方法D的结束时刻,此时,树结构的调用深度-1,变为1。
由于方法B后调用方法E。因此,开始方法pushCallRecord可获取方法E的开始时刻,此时,树结构的调用深度+1,变为2,方法E的调用深度为2。
在调用方法E结束时,结束方法popCallRecord可获取方法D的结束时刻,此时,树结构的调用深度-1,变为1。
在调用方法B结束时,结束方法popCallRecord可获取方法B的结束时刻,此时树结构的调用深度-1,变为0。
由于方法A后调用方法C。因此,开始方法pushCallRecord可获取方法C的开始时刻,此时树结构的调用深度+1,变为1,方法C的调用深度为1。
在调用方法C结束时,结束方法popCallRecord可获取方法C的结束时刻,此时树结构的调用深度-1,变为0。
综上,上述树结构的调用深度为2,方法A的调用深度为0,方法B和方法C的调用深度为1,方法D和方法E的调用深度为2。
另外,本公开对监控代码获取全部调用方法的耗时时长和调用关系的具体实现方式不做限定。在一些实施例中,监控代码可调用方法start开始运行该场景,可调用方法stop结束运行该场景,且调用方法save将该场景的性能参数(如全部调用方法的耗时时长和调用关系)存储到目标线程中,从而,监控代码便可获取全部调用方法的耗时时长和调用关系。
示例性地,本公开提供一种应用程序的耗时监控装置。
请参阅图2,图2为本公开实施例提供的应用程序的耗时监控装置的结构示意图。本公开的应用程序的耗时监控装置可设置在电子设备中的监控代码,监控代码是在该应用程序的编译阶段中被编写到该应用程序的安装包中的软件代码,可实现上述图1实施例的应用程序的耗时监控方法对应于监控代码的操作。
如图2所示,本公开提供的应用程序的耗时监控装置100可以包括:确定模块101和发送模块102。
确定模块101,用于确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,每个调用方法的耗时时长是基于对应的调用方法的类型确定的;
发送模块102,用于向服务器发送全部调用方法的耗时时长和调用关系,以使服务器基于全部调用方法的耗时时长和调用关系对场景进行监控。
在一些实施例中,确定模块101,具体用于在一个调用方法的类型属于C类方法时,在一个调用方法的开始时刻绑定设置第一符号;在一个调用方法的终止时刻绑定设置第二符号;通过开始方法获取第一符号开始执行的第一时刻,通过结束方法获取第二符号开始执行的第二时刻,开始方法和结束方法均设置在一个调用方法的执行过程中;将第二时刻与第一时刻的差值确定为一个调用方法的耗时时长。
在一些实施例中,确定模块101,具体用于在一个调用方法的类型属于Objective-C类方法时,通过开始方法获取一个调用方法的开始时刻,通过结束方法获取一个调用方法的结束时刻,开始方法和结束方法均设置在一个调用方法的执行过程中;将结束时刻与开始时刻的差值确定为一个调用方法的耗时时长。
请参阅图3,图3为本公开实施例提供的应用程序的耗时监控装置的结构示意图。如图3所示,本公开提供的应用程序的耗时监控装置100在图2所示装置结构的基础上,还可以包括:存储模块103。
存储模块103,用于在目标线程中存储全部调用方法的耗时时长和调用关系。
在一些实施例中,存储模块103,具体用于基于全部调用方法的调用关系,确定全部调用方法中的全部树结构;在目标线程中存储全部树结构以及每个树结构中的每个调用方法的耗时时长。
在一些实施例中,存储模块103,还用于在目标线程中存储每个树结构的调用深度。
在一些实施例中,场景为应用程序启动首帧页面的场景;或者,场景为应用程序通过新增的控件调用应用程序的一个页面的场景;或者,场景为应用程序从一个页面跳转到另一个页面的场景。
本公开提供的应用程序的耗时监控装置,可执行上述方法实施例,其具体实现原理和技术效果,可参见上述方法实施例,本公开此处不再赘述。
示例性地,本公开提供一种电子设备,包括:一个或多个处理器;存储器;以及一个或多个计算机程序;其中一个或多个计算机程序被存储在存储器中;一个或多个处理器在执行一个或多个计算机程序时,使得电子设备实现前文实施例的应用程序的耗时监控方法。
示例性地,本公开提供一种芯片系统,芯片系统应用于包括存储器和传感器的电子设备;芯片系统包括:处理器;当处理器执行前文实施例的应用程序的耗时监控方法。
示例性地,本公开提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器使得电子设备执行时实现前文实施例的应用程序的耗时监控方法。
示例性地,本公开提供一种计算机程序产品,当计算机程序产品在计算机上运行时,使得计算机执行前文实施例的应用程序的耗时监控方法。
在上述实施例中,全部或部分功能可以通过软件、硬件、或者软件加硬件的组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本公开实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如,固态硬盘(solid state disk,SSD))等。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
Claims (11)
1.一种应用程序的耗时监控方法,其特征在于,包括:
确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,每个调用方法的耗时时长是基于对应的调用方法的类型确定的;
向服务器发送全部调用方法的耗时时长和调用关系,以使所述服务器基于全部调用方法的耗时时长和调用关系对所述场景进行监控。
2.根据权利要求1所述的方法,其特征在于,在一个调用方法的类型属于C类方法时,确定所述调用方法的耗时时长,包括:
在所述一个调用方法的开始时刻绑定设置第一符号;
在所述一个调用方法的终止时刻绑定设置第二符号;
通过开始方法获取所述第一符号开始执行的第一时刻,通过结束方法获取所述第二符号开始执行的第二时刻,所述开始方法和结束方法均设置在所述一个调用方法的执行过程中;
将所述第二时刻与所述第一时刻的差值确定为所述一个调用方法的耗时时长。
3.根据权利要求1所述的方法,其特征在于,在一个调用方法的类型属于Objective-C类方法时,确定所述调用方法的耗时时长,包括:
通过开始方法获取所述一个调用方法的开始时刻,通过结束方法获取所述一个调用方法的结束时刻,所述开始方法和结束方法均设置在所述一个调用方法的执行过程中;
将所述结束时刻与所述开始时刻的差值确定为所述一个调用方法的耗时时长。
4.根据权利要求1-3任一项所述的方法,其特征在于,所述方法还包括:
在目标线程中存储全部调用方法的耗时时长和调用关系。
5.根据权利要求4所述的方法,其特征在于,所述在目标线程中存储全部调用方法的耗时时长和调用关系,包括:
基于全部调用方法的调用关系,确定全部调用方法中的全部树结构;
在所述目标线程中存储所述全部树结构以及每个树结构中的每个调用方法的耗时时长。
6.根据权利要求5所述的方法,其特征在于,所述方法还包括:
在目标线程中存储每个树结构的调用深度。
7.根据权利要求1-6任一项所述的方法,其特征在于,
所述场景为所述应用程序启动首帧页面的场景;
或者,所述场景为所述应用程序通过新增的控件调用所述应用程序的一个页面的场景;
或者,所述场景为所述应用程序从一个页面跳转到另一个页面的场景。
8.一种应用程序的耗时检测装置,其特征在于,包括:
确定模块,用于确定在应用程序的一个场景的运行阶段中的全部调用方法的耗时时长和调用关系,每个调用方法的耗时时长是基于对应的调用方法的类型确定的;
发送模块,用于向服务器发送全部调用方法的耗时时长和调用关系,以使所述服务器基于全部调用方法的耗时时长和调用关系对所述场景进行监控。
9.一种电子设备,包括:一个或多个处理器;存储器;以及一个或多个计算机程序;其中所述一个或多个计算机程序被存储在所述存储器中;其特征在于,所述一个或多个处理器在执行所述一个或多个计算机程序时,使得所述电子设备实现如权利要求1-7任一项所述的应用程序的耗时监控方法。
10.一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在电子设备上运行时,使得所述电子设备执行如权利要求1-7任一项所述的应用程序的耗时监控方法。
11.一种计算机程序产品,其特征在于,当所述计算机程序产品在计算机上运行时,使得所述计算机执行如权利要求1-7任一项所述的应用程序的耗时监控方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110564229.8A CN115391130A (zh) | 2021-05-24 | 2021-05-24 | 应用程序的耗时监控方法、装置和设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110564229.8A CN115391130A (zh) | 2021-05-24 | 2021-05-24 | 应用程序的耗时监控方法、装置和设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115391130A true CN115391130A (zh) | 2022-11-25 |
Family
ID=84114358
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110564229.8A Pending CN115391130A (zh) | 2021-05-24 | 2021-05-24 | 应用程序的耗时监控方法、装置和设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115391130A (zh) |
-
2021
- 2021-05-24 CN CN202110564229.8A patent/CN115391130A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101643022B1 (ko) | 카탈로그-기반 소프트웨어 컴포넌트 관리 | |
CN106127036B (zh) | 持续性和弹性的工作者进程 | |
CN109766362B (zh) | 数据处理方法及装置 | |
US8918776B2 (en) | Self-adapting software system | |
WO2022199282A1 (zh) | 线程快照解析方法、装置、设备和存储介质 | |
EP2761462B1 (en) | Method and device for obtaining using-frequency of application program | |
CN110659210A (zh) | 一种信息获取方法、装置、电子设备及存储介质 | |
US20100299661A1 (en) | Load-Time Code Optimization In a Computing Environment | |
WO2018212924A1 (en) | Enhanced component latency tracking | |
CN105677481A (zh) | 一种数据处理方法、系统及电子设备 | |
CN115391130A (zh) | 应用程序的耗时监控方法、装置和设备 | |
CN115705294B (zh) | 用于获取函数调用信息的方法、装置、电子设备和介质 | |
WO2022078057A1 (zh) | 应用包发布方法、应用方法、装置、介质、服务器及设备 | |
CN105610908B (zh) | 一种基于安卓设备的samba服务实现方法及系统 | |
CN111198853A (zh) | 数据处理方法、装置、电子设备及计算机可读存储介质 | |
CN113448585B (zh) | 一种线程池的编译方法、装置、电子设备和存储介质 | |
CN109522187B (zh) | 状态信息快速提取方法及装置 | |
CN111324386B (zh) | 分身应用程序的启动方法、装置、电子设备及存储介质 | |
CN111310175A (zh) | 基于插件化的iOS应用安全监测与防护方法及装置 | |
CN113377382A (zh) | 一种软件安装包的处理方法、装置、电子设备及存储介质 | |
CN108259566A (zh) | 一种应用的数据同步方法及装置 | |
US11966723B2 (en) | Automatic management of applications in a containerized environment | |
CN111625432B (zh) | 页面加载耗时确定方法、装置和计算机可读存储介质 | |
CN113806229B (zh) | 接口变更的测试脚本复用方法、装置、设备、介质及产品 | |
CN110489140B (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 |