CN112698890A - 函数耗时采集方法、装置、设备及存储介质 - Google Patents
函数耗时采集方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN112698890A CN112698890A CN202011633717.1A CN202011633717A CN112698890A CN 112698890 A CN112698890 A CN 112698890A CN 202011633717 A CN202011633717 A CN 202011633717A CN 112698890 A CN112698890 A CN 112698890A
- Authority
- CN
- China
- Prior art keywords
- time
- function
- consuming
- data
- acquisition
- 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
- 238000000034 method Methods 0.000 title claims abstract description 141
- 230000006870 function Effects 0.000 claims abstract description 433
- 230000008569 process Effects 0.000 claims abstract description 73
- 238000010586 diagram Methods 0.000 claims description 50
- 238000004590 computer program Methods 0.000 claims description 10
- 230000002159 abnormal effect Effects 0.000 description 16
- VYZAMTAEIAYCRO-UHFFFAOYSA-N Chromium Chemical compound [Cr] VYZAMTAEIAYCRO-UHFFFAOYSA-N 0.000 description 8
- 239000003550 marker Substances 0.000 description 8
- 238000012545 processing Methods 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 5
- 238000001514 detection method Methods 0.000 description 4
- 238000011161 development Methods 0.000 description 4
- 238000011084 recovery Methods 0.000 description 4
- 238000007405 data analysis Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000013480 data collection Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4482—Procedural
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/955—Retrieval from the web using information identifiers, e.g. uniform resource locators [URL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/448—Execution paradigms, e.g. implementations of programming paradigms
- G06F9/4488—Object-oriented
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Debugging And Monitoring (AREA)
Abstract
本申请实施例公开了一种函数耗时采集方法、装置、设备及存储介质,涉及计算机技术领域,其包括:启动目标应用程序;运行所述目标应用程序时,采集至少一个目标函数的耗时数据,所述目标函数为所述目标应用程序运行过程中运行的函数,所述目标函数包括核心函数和/或被标记的非核心函数;所述耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器。采用上述方法可以解决现有技术中无法采集应用程序运行过程中各函数真实耗时的技术问题。
Description
技术领域
本申请实施例涉及计算机技术领域,尤其涉及一种函数耗时采集方法、装置、设备及存储介质。
背景技术
iOS是一种移动操作系统,iOS中可安装各类应用程序供用户使用。在各类应用程序的开发过程中,随着应用程序的业务复杂度及功能丰富性的增强,使得应用程序出现了各种性能问题,如出现启动速度变慢、运行卡顿等问题,严重影响了用户的使用体验。
一般而言,应用程序运行过程中使用的函数耗时越久,应用程序出现性能问题的可能越大。因此,明确应用程序运行过程中各函数的耗时情况是解决性能问题的一种必要手段。现有技术,通常使用iOS的集成开发环境(Xcode)提供的线下分析应用程序性能的工具(Instruments),通过该工具采用开发模式连接安装应用程序的设备并进行分析,以模拟用户使用应用程序的场景,进而实现抓取耗时的函数。这样虽然能抓取到耗时的函数,但是,模拟的使用场景无法完全反映真实的使用场景,尤其是业务复杂的应用程序,仅靠模拟使用场景是无法得到应用程序运行过程中各函数的真实耗时。因此,如何采集应用程序运行过程中各函数的真实耗时,成为了亟需解决的技术问题。
发明内容
本申请实施例提供了一种函数耗时采集方法、装置、设备及存储介质,以解决现有技术中无法采集应用程序运行过程中各函数真实耗时的技术问题。
第一方面,本申请实施例提供了一种函数耗时采集方法,包括:
启动目标应用程序;
运行所述目标应用程序时,采集至少一个目标函数的耗时数据,所述目标函数为所述目标应用程序运行过程中运行的函数,所述目标函数包括核心函数和/或被标记的非核心函数;
所述耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器。
第二方面,本申请实施例还提供了一种函数耗时采集装置,包括:
应用启动模块,用于启动目标应用程序;
耗时采集模块,用于运行所述目标应用程序时,采集至少一个目标函数的耗时数据,所述目标函数为所述目标应用程序运行过程中运行的函数,所述目标函数包括核心函数和/或被标记的非核心函数;
耗时上报模块,用于所述耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器。
第三方面,本申请实施例还提供了一种函数耗时采集设备,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如第一方面所述的函数耗时采集方法。
第四方面,本申请实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如第一方面所述的函数耗时采集方法。
上述函数耗时采集方法、装置、设备及存储介质,通过启动目标应用程序,并在目标应用程序运行过程中,采集运行的各目标函数的耗时数据,并在采集结束后,将采集到的耗时数据上报至后台服务器的技术手段,解决了现有技术中无法采集应用程序运行过程中各函数真实耗时的技术问题,实现了在目标应用程序的使用过程中对函数耗时的采集,保证了耗时数据的真实性。并且,通过采集核心函数和/或被标记的非核心函数的耗时数据,扩大了可采集耗时数据的函数类型,除了核心函数外,还可采集一些非核心但开发人员觉得有必要或者感兴趣的函数或代码的耗时数据,使得采集的耗时数据更加全面,进而使得后台服务器更加准确、全面的了解目标应用程序运行过程中的函数耗时情况。
附图说明
图1为本申请实施例提供的一种函数耗时采集方法的流程图;
图2为本申请实施例提供的另一种函数耗时采集方法的流程图;
图3为本申请实施例提供的一种函数耗时采集方法的模块类图;
图4为本申请实施例提供的又一种函数耗时采集方法的流程图;
图5为本申请实施例提供的一种函数耗时采集装置的结构示意图;
图6为本申请实施例提供的一种函数耗时采集设备的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例用于解释本申请,而非对本申请的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本申请相关的部分而非全部结构。
本申请实施例提供的函数耗时采集方法可以由函数耗时采集设备执行,该函数耗时采集设备可以通过软件和/或硬件的方式实现,该函数耗时采集设备可以是两个或多个物理实体构成,也可以是一个物理实体构成。实施例中,函数耗时采集设备为用户使用的设备,如函数耗时采集设备为手机、平板电脑、笔记本等。
进一步的,函数耗时采集设备中安装有至少一类操作系统,其中,操作系统包括但不限定于安卓系统、iOS系统及Windows系统等。实施例中,以操作系统为iOS系统为例进行描述。实施例中,函数耗时采集设备可以基于操作系统安装至少一个应用程序,该应用程序可以为操作系统自带的应用程序,也可以为从第三方设备或者后台服务器中下载的应用程序。其中,应用程序所执行的业务以及实现的功能的具体内容实施例不作限定。
具体的,图1为本申请实施例提供的一种函数耗时采集方法的流程图,参考图1,该函数耗时采集方法具体包括:
步骤110、启动目标应用程序。
目标应用程序是指当前需要采集函数耗时的应用程序,函数耗时是指运行函数时所消耗的时间。目标应用程序安装在函数损耗采集设备中,其可以执行函数耗时采集方法。当前,目标应用程序为线上应用程序。其中,线上应用程序是指使用场景下供用户使用的应用程序。
启动目标应用程序是指在函数损耗采集设备中运行该目标应用程序。一个实施例中,当接收到用户针对该目标应用程序的启动指令时,启动目标应用程序,之后,用户可以使用该目标应用程序。进一步的,目标应用程序启动后在函数耗时采集设备的前台中运行,即函数耗时采集设备中显示该目标应用程序的运行界面,用户可通过运行界面进行交互。
步骤120、运行目标应用程序时,采集至少一个目标函数的耗时数据,目标函数为目标应用程序运行过程中运行的函数,目标函数包括核心函数和/或被标记的非核心函数。
示例性的,运行目标应用程序是指运行目标应用程序的程序代码,以实现对应的业务及功能。其中,程序代码运行过程中通过调用不同的函数实现不同的功能或执行不同业务。一般而言,功能越丰富或业务越复杂的程序代码所包含的函数越多。实施例中,程序代码包括核心函数和非核心函数,其中,核心函数可理解为采用操作系统的主要编程语言编写的符合调用规范的函数,其也可理解为实现目标应用程序主要功能、业务的函数,每个核心函数均有自身的函数名称。非核心函数是指除核心函数外的其他函数或代码,非核心函数可以是其他编程语言编写的函数。例如,iOS系统使用的主要编程语言为Objective-C,此时,核心函数是Objective-C函数,其他函数是非Objective-C函数。
示例性的,目标函数是指目标应用程序运行过程中需要采集耗时数据的函数。耗时数据是指目标函数的运行时长,即耗时数据是采集函数耗时得到的具体数据。目标函数为一个或多个,实施例中,以多个目标函数进行示例性描述。进一步的,目标函数包括核心函数和/或被标记的非核心函数,实施例中,以目标函数包括核心函数和被标记的非核心函数为例进行描述。可理解,被标记的非核心函数是指由目标应用程序的开发人员在程序代码中标记的函数或代码,被标记的非核心函数包含一个或多个连续的函数或者一段或多段连续的代码,即被标记的非核心函数可以是程序代码中任意阶段或任意类型的函数或代码。其中,标记方式可以根据实际情况设定,例如,开发人员在一段代码中添加表示起点的标识和表示终点的标识,并建立相应的标签,此时,两个标识间的代码就是被标记的非核心函数,且建立的标签为被标记的非核心函数的函数名称。可理解,开发人员可根据实际需求在程序代码中标记一个或多个非核心函数。
具体的,目标应用程序运行过程中,若运行至目标函数,则采集目标函数的耗时数据。可理解,目标应用程序运行过程中会运行多个目标函数,此时,每个目标函数对应一个采集的耗时数据。即运行至一目标函数时,采集该目标函数的耗时数据,之后,运行至另一目标函数时,采集另一目标函数的耗时数据,以此类推。
需说明,目标应用程序运行过程中所要运行的函数主要取决于用户选择执行的业务或功能,若某个业务或功能未被用户选择,则其对应的函数不会被运行。因此,目标应用程序运行过程中,可能不会运行全部的目标函数,此时,只采集被运行的各目标函数的耗时数据。
一个实施例中,耗时数据的采集方式是:记录目标函数开始运行的时间以及结束运行的时间,之后,将两个时间的差值作为采集到的耗时数据。需说明,实施例中采集的耗时数据还包括相应目标函数的函数名称,以通过函数名称区分不同的耗时数据。
步骤130、耗时数据采集结束后,将本次采集到的耗时数据上报至目标应用程序的后台服务器。
示例性的,目标应用程序与后台服务器进行数据通信,其中,后台服务器是为目标应用程序提供服务的后台设备,其由目标应用程序的维护人员或开发人员操作,后台服务器提供的具体服务内容实施例不作限定。
一个实施例中,确定结束采集耗时数据后,获取当前采集到的全部耗时数据并上报至后台服务器。其中,确定结束的方式可以根据实际情况设定。如检测到目标应用程序被切换至后台运行时,结束采集耗时数据。再如,设定数量(一个或多个)的业务或功能被执行完毕后,结束采集耗时数据。需说明,若目标应用程序的运行过程中重复运行某一目标函数,则该目标函数每次运行完毕后均采集当前运行的耗时数据,此时,结束采集耗时数据后,获取的全部耗时数据中存在多个耗时数据具有相同的函数名称。
可选的,将耗时数据上报至后台服务器时,先将耗时数据转换成便于查看的文件,之后,将该文件上报至后台服务器。其中,文件中耗时数据的显示方式实施例不作限定,例如,文件中通过图表的方式显示耗时数据、通过火焰图的方式显示耗时数据等。还可选的,核心函数的耗时数据和非核心函数的耗时数据可以通过不同的文件分别上报,以便于后台服务器快速查看需要的耗时数据。耗时数据上报至后台服务器后,确定本次采集流程正常结束。当再次启动目标应用程序后,可再次执行上述操作以采集新的耗时数据。
可理解,当耗时数据上报后,后台服务器可查看各耗时数据,并确定出耗时较长的函数,之后,后台服务器的开发人员或维护人员可对函数进行优化,以缩短函数的运行时长进而避免出现性能问题。
上述,通过启动目标应用程序,并在目标应用程序运行过程中,采集运行的各目标函数的耗时数据,并在采集结束后,将采集到的耗时数据上报至后台服务器的技术手段,解决了现有技术中无法采集应用程序运行过程中各函数真实耗时的技术问题,实现了在目标应用程序的使用过程中对函数耗时的采集,保证了耗时数据的真实性。并且,通过采集核心函数和/或被标记的非核心函数的耗时数据,扩大了可采集耗时数据的函数类型,除了核心函数外,还可采集一些非核心但开发人员觉得有必要或者感兴趣的函数或代码的耗时数据,使得采集的耗时数据更加全面,进而使得后台服务器更加准确、全面的了解目标应用程序运行过程中的函数耗时情况。
图2为本申请实施例提供的另一种函数耗时采集方法的流程图。该函数耗时采集方法是在上述实施例的基础上进行具体化。参考图2,该函数耗时采集方法具体包括:
步骤201、启动目标应用程序。
步骤202、运行目标应用程序时,判断是否读取到采集失败标识。若读取到采集失败标识,则停止本次采集。若未读取到采集失败标识,则执行步骤203。
采集失败标识为指示耗时数据采集过程发生异常的标识。一个实施例中,异常是指目标应用程序的运行过程意外终止。其中,导致异常的原因实施例不作限定,如采集耗时数据时导致程序代码运行崩溃,进而导致异常出现。当异常发生时,目标应用程序无法正常运行,用户无法使用目标应用程序。
可选的,若某次耗时数据的采集过程发生异常,则终断该次采集流程,并将该次采集流程确认为非正常结束。当再次启动目标应用程序并准备采集耗时数据时,若检测到前次采集流程非正常结束,则生成采集失败标识,并停止当前的采集流程。
典型的,每次启动目标应用程序后,均会先判断是否可以读取到采集失败标识。若读取到采集失败标识,则说明先前采集流程发生了异常,并停止本次采集。其中,停止本次采集的原因为:由于采集流程已经发生异常,若再次启动采集流程,则本次启动的采集流程仍存在发生异常的可能,这样会对用户正常使用目标应用程序造成影响。因此,为了避免采集流程对目标应用程序的影响,在读取到采集失败标识后,不会再次进行采集。需说明,停止采集耗时数据对目标应用程序的运行没有影响,即用户可正常使用目标应用程序。进一步的,若未读取到采集失败标识,则说明先前的采集流程未发生异常,因此,执行步骤203。
步骤203、判断是否读取到第一结束标识,第一结束标识表示前次采集正常结束。若读取到第一结束标识,则执行步骤204。若未读取到第一结束标识,则执行步骤210。
结束标识为表示耗时数据采集流程正常结束的标识,实施例中,每个耗时数据采集流程正常结束后,均会生成一个结束标识。且不同采集流程生成的结束标识可以相同或不同,当结束标识不同时,结束标识可体现当前采集流程的采集次数或时间。当结束标识相同时,生成新的结束标识后可删除旧的结束标识。实施例中,以结束标识相同为例进行说明。可理解,某次耗时数据的采集流程非正常结束时,该次采集流程会被直接终断,因此,不会生成该次采集对应的结束标识。因此,当前未读取到采集失败标识时,只能说明先前的采集流程未出现异常,但是不能确定前一次采集流程是否正常结束。因此,实施例中,还需通过读取结束标识来确定前一次采集流程是否正常结束。
为了便于描述,实施例中通过第一结束标识表示前次采集正常结束。具体的,判断是否读取到第一结束标识。若读取到第一结束标识,则说明前一次采集流程正常结束,并开启本次采集流程,执行步骤204,否则,说明前一次采集流程非正常结束,并终断本次采集,执行步骤210。
步骤204、获取本地设备的第一设备信息和后台服务器设置的第二设备信息,第二设备信息为可采集耗时数据的设备信息。
设备信息包括设备型号、操作系统版本等内容。一个实施例中,由开发人员预先设置可采集耗时数据的设备信息,并在后台服务器等云端控制设备(通过网络实现控制的设备)中保存该设备信息。实施例中,将开发人员设置的设备信息记为第二设备信息,即第二设备信息为可采集耗时数据的设备信息。可理解,第二设备信息是开发人员认为需要采集耗时数据的函数耗时采集设备所对应的设备信息,且开发人员可随时调整第二设备信息。进一步的,将本地设备(即当前使用的函数耗时采集设备)的设备信息记为第一设备信息。
一个实施例中,以后台服务器存储第二设备信息为例进行描述。运行目标应用程序时,获取本地设备的第一设备信息以及后台服务器的第二设备信息。可理解,开发人员设置的第二设备信息为一个或多个,当第二设备信息为多个时,从后台服务器中获取多个第二设备信息。
步骤205、判断第一设备信息与第二设备信息是否匹配。若匹配,则执行步骤206,否则,停止本次采集。
具体的,比较第一设备信息和第二设备信息,以确定其包含的内容是否一致。若一致,则说明两个设备信息匹配,本地设备需要采集耗时数据,执行步骤206。否则,说明两个设备信息不匹配,本地设备无需采集耗时数据,停止本次的采集。
一个实施例中,确定当前可采集耗时数据时,生成开始采集标记。该开始采集标记用于指示当前采集流程正常开始。
步骤206、采集至少一个目标函数的耗时数据,目标函数为目标应用程序运行过程中运行的函数,目标函数包括核心函数和/或被标记的非核心函数。
一个实施例中,目标函数包括核心函数,核心函数为Objective-C函数。可选的,iOS系统中应用程序运行过程中的核心函数为Objective-C编码语言编写的函数,实施例中,将核心函数记为Objective-C函数。可理解,每个Objective-C函数均有对应的函数名称。此时,本步骤具体为:当运行至Objective-C函数时,通过Hook objc_msgSend函数采集Objective-C函数的耗时数据。
具体的,Hook是指将程序代码中的函数替换为其他函数,并在Hook中运行被替换的函数。由于函数在Hook中运行,所以通过Hook可得到函数的耗时数据。进一步的,Objective-C编程语言中所有的方法调用均由objc_msgSend函数转发。此时,Hook objc_msgSend函数是指利用objc_msgSend函数实现Hook掉Objective-C函数。示例性的,运行至Objective-C函数时,通过Hook objc_msgSend函数将Objective-C函数替换为其他函数,并在Hook中运行Objective-C函数。其中,其他函数的内容实施例不作限定。进一步的,Hook运行Objective-C函数时,记录开始运行的时间和结束运行的时间,并根据两个时间的差值得到Objective-C函数的耗时数据。可选的,得到耗时数据时,将Objective-C函数的函数名称加入耗时数据中。
一个实施例中,目标函数包括被标记的非核心函数,被标记的非核心函数包括起点标记和终点标记。可理解,被标记的非核心函数为非Objective-C函数。其中,每个被标记的非核心函数对应一个起点标记和一个终点标记,起点标记和终点标记用于在目标应用程序的程序代码中标记非核心函数的起始代码和结束代码。可选的,不同非核心函数的起点标记和结束标记为相同的标记,即各起点标记的表示形式相同,各结束标记的表示形式相同,或者,不同非核心函数的起点标记和结束标记也可以为不同的标记,即各起点标记的表示形式不同,各结束标记的表示形式不同。一般而言,开发人员在程序代码中添加起点标记和终点标记,以得到被标记的非核心函数。可选的,每个被标记的非核心函数对应一个标签,该标签同样由开发人员设置。此时,本步骤包括步骤2061-步骤2063:
步骤2061、检测到起点标记时,确认被标记的非核心函数开始运行,记录运行开始时间。
程序代码运行过程中,若检测到当前运行的代码被添加了起点标记,则确定检测到起点标记,进而确定被标记的非核心函数开始运行,并记录当前的时间。实施例中,将被标记的非核心函数开始运行时的时间记为运行开始时间。
步骤2062、检测到终点标记时,确认被标记的非核心函数结束运行,记录运行结束时间。
确定被标记的非核心函数开始运行后,继续运行程序代码,若检测到当前运行的代码被添加了终点标记,则确定检测到终点标记,进而确定被标记的非核心函数运行完毕(结束),并记录当前的时间。实施例中,将被标记的非核心函数结束运行的时间记为运行结束时间。
可选的,检测到起点标记到检测到终点标记的过程中,不会再检测到其他的起点标记。
步骤2063、根据运行开始时间和运行结束时间得到被标记的非核心函数的耗时数据。
示例性的,将运行结束时间与运行开始时间作差后,可得到被标记的非核心函数的运行时长,即得到被标记的非核心函数的耗时数据。可选的,运行被标记的非核心函数时读取程序代码中为被标记的非核心函数添加的标签,并将该标签添加到耗时数据中。
步骤207、检测到预先设定的结束事件触发时,停止采集耗时数据。
结束事件为用于指示停止采集耗时数据的事件。结束事件为一个或多个。结束事件为自定义的事件,其可以由开发人员预先设定。结束事件的内容实施例不作限定,例如,结束事件为目标应用程序进入后台运行或目标应用程序加载完当前数据(如加载完目标应用程序的显示主页)。
具体的,开始采集耗时数据后,检测结束事件是否被触发。其中,若结束事件为多个,则检测到任一结束事件发生后确定结束事件被触发。例如,结束事件包括目标应用程序进入后台运行和加载完目标应用程序的显示主页,当目标应用程序进入后台运行后,确定检测到结束事件被触发。
进一步的,结束事件被触发后,停止采集耗时数据。需说明,目标应用程序可以继续运行,只是不再采集目标函数的耗时数据。
可理解,未检测到结束事件时,在目标应用程序的运行过程中会持续采集运行的各目标函数的耗时数据。
步骤208、耗时数据采集结束后,将本次采集到的耗时数据上报至目标应用程序的后台服务器。
实施例中,为了便于后台服务器查看耗时数据,在上报耗时数据前,对耗时数据进行处理,以转换成便于查看的文件。
一个实施例中,目标函数包括核心函数,此时,将本次采集到的耗时数据上报至目标应用程序的后台服务器包括步骤2081-步骤2082:
步骤2081、根据至少一个核心函数的耗时数据绘制火焰图文件。
一般而言,目标应用程序运行过程中会运行较多的核心函数,此时,为了将各核心函数的耗时数据直观体现,实施例中采用火焰图的方式显示耗时数据。具体的,火焰图(Flame Graphs)是性能分析的利器,被广泛应用在数据分析和统计中。一个实施例中,按各核心函数的运行顺序依次获取各核心函数的名称和耗时数据,并绘制火焰图。可理解,当某个核心函数被运行多次时,对应的多个耗时数据分别体现在火焰图中。
进一步的。火焰图绘制完成后,生成火焰图文件。其中,火焰图文件是指包含火焰图的文件。火焰图文件的格式实施例不做限定,例如,火焰图文件为图片格式。再如,火焰图文件为JSON文件。其中,JSON是一种轻量级的数据交换格式。当火焰图文件为JSON文件时,为了便于开发人员通过后台服务器获取火焰图文件,可将火焰图文件按特定格式组织。例如,开发人员使用chrome浏览器查看火焰图文件时,从后台服务器获取火焰图文件(JSON文件)后按chrome trace格式组织,如在名称中添加chrome trace字符,之后,开发人员便可以在chrome浏览器中通过chrome://tracing/网址打开火焰图文件。可理解,函数耗时采集设备生成火焰图文件时也可以在本地按特定格式组织,如按chrome trace格式组织,以在本地通过chrome浏览器打开火焰图文件。
步骤2082、将火焰图文件上报至目标应用程序的后台服务器。
生成火焰图文件后,将火焰图文件上报至后台服务器。可理解,每次采集完成后,均会生成一个体现核心函数耗时数据的火焰图文件,并上报至后台服务器中。
另一个实施例中,目标函数包括被标记的非核心函数,此时,将本次采集到的耗时数据上报至目标应用程序的后台服务器包括步骤2083-步骤2084:
步骤2083、根据至少一个被标记的非核心函数的耗时数据生成字典数据文件。
其中,字典是一种可变容器模型,可存储任意类型对象。字典数据是指字典类型的数据,字典数据文件是指包含字典数据的文件,其是自动(或手动)存储数据源定义和属性的文档。实施例中,字典数据文件由函数耗时采集设备自动生成。实施例中,将被标记的非核心函数的耗时数据生成为字典数据文件,以便于后台服务器通过字典的方式查找对应的耗时数据,并进行分析。具体的,获取各被标记的非核心函数的标签和耗时数据,并生成字典数据文件。
步骤2084、将字典数据文件上报至目标应用程序的后台服务器。
生成字典数据文件后,将字典数据文件上报至后台服务器。可理解,每次采集完成后,均会生成一个体现被标记的非核心函数耗时数据的字典数据文件,并上报至后台服务器中。
可理解,若目标函数包括核心函数和被标记的非核心函数,那么,本次采集完成后,会生成一个火焰图文件以及一个字典数据文件,并且,火焰图文件和字典数据文件均被上报至后台服务器中。实际应用中,也可以只上报核心函数的火焰图文件,而将字典数据文件分享至大数据平台中,以通过大数据平台进行数据分析。
步骤209、生成第二结束标识,第二结束标识表示本次采集正常结束。
当前生成的结束标识用于表示本次耗时数据采集流程正常结束,实施例中,通过第二结束标识表示当前生成的结束标识,可理解,第二结束标识和第一结束标识可以为相同或不同的标识,可选的,生成第二结束标识后删除第一结束标识,并在下一次采集开始前将第二结束标识作为第一结束标识,以通过读取第二结束标识明确本次采集流程正常结束。
示例性的,将耗时数据上报至后台服务器后,确定本次采集流程结束。生成第二结束标识。。
步骤210、生成采集失败标识。
示例性的,若当前未读取到第一结束标识,则说明前一次采集流程非正常结束。因此,可以确定前一次采集流程失败,并记录采集失败。其中,记录采集失败的方式为生成采集失败标识。可理解,该采集失败标识与步骤202中读取的采集失败标识为同一标识。由于前一次采集流程非正常结束,因此,目标应用程序不会再重复进行采集。通过采集失败标识可提示后续的采集流程不再进行采集。
步骤211、生成采集失败事件,向后台服务器上报采集失败事件。
具体的,生成采集失败标识后,生成采集失败事件,并将后台服务器上报采集失败事件。其中,采集失败事件用于通知后台服务器当前目标应用程序采集耗时数据出现异常。采集失败事件的生成方式实施例不作限定。典型的,上报采集失败事件后,结束本次流程。可理解,结束本次流程时,目标应用程序正常运行。
一个实施例中,后台服务器接收到采集失败事件后可查询函数耗时采集设备的异常日志,以通过异常日志定位导致非正常结束的原因,进而进行调整。其中,函数耗时采集设备运行过程中会生成运行日志,当采集流程非正常结束时,运行日志中会记录非正常结束以及非正常结束时函数耗时采集设备的运行情况。此时,记录非正常结束的日志便可理解为异常日志。实际应用中,当生成采集失败标识后,若还需要采集耗时数据,则可由后台服务器进行强制恢复,即后台服务器控制函数耗时采集设备删除采集失败标识,并生成第一结束标识,以保证新的采集流程正常开始。
上述,通过采集失败标识和第一结束标识可实现崩溃恢复机制,即先前采集流程产生异常时规避后续新的采集流程再次产生异常的风险,进而避免影响用户正常使用目标应用程序。通过第一设备信息和第二设备信息进行匹配,并在两个设备信息匹配时才会开始采集流程,可以实现针对性采集有问题(如耗时较长)的设备中目标函数耗时数据,便于后台服务器快速调整,降低频繁采集耗时数据对设备性能带来的损耗。通过Hook objc_msgSend函数实现了对线上目标应用程序的Objective-C函数的耗时采集,并且还可以采集非Objective-C函数的耗时数据,使得采集的耗时数据更加全面。
在上述实施例的基础上,除了将耗时数据上报至后台服务器外,还可以将耗时数据共享至大数据平台。其中,大数据平台是指可存储分析海量数据的服务器,用户通过访问大数据平台可获取需要的数据。此时,步骤208之后,还包括步骤212-步骤213:
步骤212、获取耗时数据在后台服务器中的网络存储地址。
具体的,后台服务器接收到耗时数据后,会在网络中存储耗时数据,并将耗时数据的网络存储地址反馈至函数耗时采集设备中。其中,网络存储地址为统一资源定位系统(uniform resource locator,URL)地址。即函数耗时采集设备上报耗时数据后,获取后台服务器反馈的URL地址。
可选的,后台服务器可以将核心函数的耗时数据和被标记的非核心函数的耗时数据分别存储,并且可以反馈各耗时函数的URL地址,或者,选择性返回核心函数耗时数据的URL地址或者是被标记的非核心函数耗时数据的URL地址。例如,后台服务器接收到耗时数据后,只反馈存储核心函数耗时数据的URL地址。
步骤213、将网络存储地址上报至大数据平台,以便大数据平台通过网络存储地址获取耗时数据。
示例性的,将网络存储地址上报至大数据平台。大数据平台保存该网络存储地址。当大数据平台需要获取耗时数据时,可通过该网络存储地址获取耗时数据。
一个实施例中,目标函数为多个,本步骤包括步骤2131-步骤2133:
步骤2131、根据耗时数据在多个目标函数中确定至少一个耗时目标函数。
具体的,根据各目标函数的耗时数据,选择耗时较长的目标函数,实施例中,将耗时较长的目标数据记为耗时目标函数。其中,耗时目标函数的数量可根据实际情况设定,如耗时目标函数的数量为10时,根据耗时数据选择耗时最长的前10个目标函数作为耗时目标函数。或者是,设定耗时目标函数的最少耗时,之后,根据耗时数据选择超出最少耗时的目标函数作为耗时目标函数。
可选的,若仅向大数据平台上报核心函数耗时数据的网络存储地址,则本步骤中,仅在核心函数中选择耗时目标函数。
步骤2132、根据耗时目标函数和网络存储地址生成统计事件数据。
具体的,将耗时目标函数和网络存储地址整合成在一起形成一个文件,并将整合后的文件记为统计事件数据。其中,统计事件数据记录的耗时目标函数可以是目标函数的函数名称。统计事件数据的格式为大数据平台可识别的格式。得到统计事件数据后,确定生成上报事件。可选的,当耗时目标函数为核心函数时,也可以将被标记的非核心函数的耗时数据添加至统计事件数据中。
步骤2133、将统计事件数据上报至大数据平台。
具体的,将统计事件数据上报至大数据平台。此时,大数据平台不仅可以通过网络通信地址获取耗时数据,还可以明确耗时目标函数。
可选的,上报大数据平台后,生成结束标识。
上述,通过将耗时数据上报至大数据平台,可以使其他用户通过大数据平台查看耗时数据并明确耗时目标函数,同时,还便于大数据平台进行分析,以得到函数耗时的综合情况,例如,明确同一应用程序在不同函数耗时采集设备中的函数耗时情况、同一应用程序中耗时较高的目标函数等,还可以通过URL找到耗时核心函数的火焰图文件,以便于数据分析。
下面对本申请实施例提供的方法进行示例性描述。其中,图3为本申请实施例提供的一种函数耗时采集方法的模块类图,其示出了执行函数耗时采集方法时需要的各类和模块以及各类和模块间的结构关系。其中,使用上述模块类可使用类模块创建含有方法和属性代码的自己的对象,即执行函数耗时采集方法。其中,类是指是一种用户定义的引用数据类型。模块是完成某一功能所需的一段程序或子程序。
具体的,参考图3,执行函数耗时采集方法需要的模块类包括:BVTimeProfiler(模块入口类)、BVSettingConifgManager(云控配置管理类)、BVCallTrace(Objetive-C函数耗时采集模块)、BVMethodCostEvent(任意函数/阶段耗时采集模块)、BVLogFileUploader(文件上报模块)、BVEventReporter(事件上报模块)
其中,BVTimeProfiler用于对外提供接口,其中,提供的接口包括采集目标函数耗时数据的接口、生成上报文件的接口(如生成火焰图文件的接口、字典数据文件的接口)、文件上报的接口(如上报火焰图文件、字典数据文件的接口)、根据云控配置启动的接口(如获取第二设备信息的接口)、实现崩溃自动恢复的接口(如读取采集失败标识的接口和读取结束标识的接口),事件上报接口(如上报统计事件数据的接口)等。其中,崩溃自动恢复由BVTimeProfiler实现。BVSettingConifgManager用于提供云控配置(如存储后台服务器中的第二设备信息)的拉取、保存和解析功能。BVCallTrace用于采集核心函数的耗时数据,并生成对应的火焰图文件。BVMethodCostEvent用于采集非核心函数的耗时数据,并生成对应的字典数据文件。BVLogFileUploader用于上报任意类型的文件(如上报火焰图文件和字典数据文件),并获取文件的URL。BVEventReporter用于上报事件,如将统计事件数据上报至大数据平台中,或将失败事件上报至后台服务器。
本示例中,将一次采集流程记为trace。具体的,图4为本申请实施例提供的又一种函数耗时采集方法的流程图,其为通过图3的结构执行函数耗时采集方法时的流程图。
具体的,参考图4,该函数耗时采集方法包括:
启动目标应用程序后,BVTimeProfiler开始读取trace失败标识(即采集失败标识),并判断是否读取到trace失败标识(即判断是否发生过非正常结束)。若读取到trace失败标识,则结束本次采集。否则,BVTimeProfiler开始读取trace流程结束标识(即读取第一结束标识),并判断是否读取到trace流程结束标识,若未读取到trace流程结束标识,则生成trace失败标识(即生成第二结束标识)并启动BVEventReporter,以由BVEventReporter向后台服务器上报失败事件,结束本次采集流程。若读取到trace流程结束标识,则从BVSettingConifgManager中读取设备型号和操作系统版本(即第二设备信息),之后,BVTimeProfiler判断当前读取的设备型号和操作系统版本与本地设备的设备型号和操作系统版本是否匹配,若不匹配,则结束本次采集,若匹配,则标记trace开始,并开始采集流程(图4中记为start trace)。之后,启动BVCallTrace,由BVCallTrace Hook objc_msgSend函数,以开始采集Objective-C函数的耗时数据。同时,启动BVMethodCostEvent,由BVMethodCostEvent允许采集被标记的非Objective-C函数,并开始采集被标记的非Objective-C函数的耗时数据。结束事件触发后,BVTimeProfiler结束采集流程(图4中记为stop trace),通知BVCallTrace停止Hook objc_msgSend函数,即停止采集Objective-C函数的耗时数据。同时,通知BVMethodCostEvent停止采集被标记的非Objective-C函数。之后,BVCallTrace生成chrome trace的火焰图文件(JSON格式),BVMethodCostEvent生成字典数据文件。之后,BVTimeProfiler启动BVLogFileUploader,由BVLogFileUploader向后台服务器上报火焰图文件和字典数据文件,之后,BVLogFileUploader获取火焰图文件在后台服务器中的URL地址。BVCallTrace统计前十个耗时最长的Objective-C函数作为耗时目标函数。之后,BVTimeProfiler整合BVLogFileUploader、BVCallTrace和BVMethodCostEvent中的数据(如BVLogFileUploader的URL地址、BVCallTrace的耗时目标函数、BVMethodCostEvent的字典数据文件等),生成统计事件数据,并启动BVEventReporter,由BVEventReporter向大数据平台上报统计事件数据,上报完成后,BVTimeProfiler生成trace流程结束标识,即标记trace结束,之后,确定本次采集流程正常结束。
可理解,通过模块类的方式便于对函数耗时采集方法所使用代码进行开发和维护。
图5为本申请实施例提供的一种函数耗时采集装置的结构示意图,参考图5,该函数耗时采集装置包括:应用启动模块301、耗时采集模块302和耗时上报模块303。
其中,应用启动模块301,用于启动目标应用程序;耗时采集模块302,用于运行所述目标应用程序时,采集至少一个目标函数的耗时数据,所述目标函数为所述目标应用程序运行过程中运行的函数,所述目标函数包括核心函数和/或被标记的非核心函数;耗时上报模块303,用于所述耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器。
在上述实施例的基础上,还包括:第一判断模块,用于采集至少一个目标函数的耗时数据之前,判断是否读取到第一结束标识,第一结束标识表示前次采集正常结束;第一执行模块,用于若读取到所述第一结束标识,则执行采集至少一个目标函数的耗时数据的操作。
在上述实施例的基础上,还包括:第二判断模块,用于判断是否读取到第一结束标识之前,判断是否读取到采集失败标识;第一停止模块,用于若读取到所述采集失败标识,则停止本次采集;第二执行模块,用于若未读取到所述采集失败标识,则执行判断是否读取到第一结束标识的操作。
在上述实施例的基础上,还包括:第一标识生成模块,用于若未读取到所述第一结束标识,则生成所述采集失败标识;失败上报模块,用于生成采集失败事件,并向所述后台服务器上报采集失败事件。
在上述实施例的基础上,还包括:第二标识生成模块,用于将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器之后,生成所述第二结束标识,第二结束标识表示本次采集正常结束。
在上述实施例的基础上,还包括:信息获取模块,用于获取本地设备的第一设备信息和所述后台服务器设置的第二设备信息,所述第二设备信息为可采集耗时数据的设备信息;第三判断模块,用于判断所述第一设备信息与所述第二设备信息是否匹配;第三执行模块,用于若匹配,则执行所述采集至少一个目标函数的耗时数据的操作。
在上述实施例的基础上,还包括:结束检测模块,用于耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器之前,检测到预先设定的结束事件触发时,停止采集所述耗时数据。
在上述实施例的基础上,所述目标函数包括核心函数,耗时上报模块303包括:第一文件生成单元,用于耗时数据采集结束后,根据至少一个所述核心函数的耗时数据绘制火焰图文件;第一文件上报单元,用于将所述火焰图文件上报至所述目标应用程序的后台服务器。所述目标函数包括被标记的非核心函数,耗时上报模块303包括:第二文件生成单元,用于根据至少一个所述被标记的非核心函数的耗时数据生成字典数据文件;第二文件上报单元,用于将所述字典数据文件上报至所述目标应用程序的后台服务器。
在上述实施例的基础上,还包括:地址获取模块,用于将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器之后,获取所述耗时数据在所述后台服务器中的网络存储地址;事件上报模块,用于将所述网络存储地址上报至大数据平台,以便所述大数据平台通过所述网络存储地址获取所述耗时数据。
在上述实施例的基础上,目标函数为多个,事件上报模块包括:耗时函数确定单元,用于根据所述耗时数据在多个所述目标函数中确定至少一个耗时目标函数;事件生成单元,用于根据所述耗时目标函数和所述网络存储地址生成统计事件数据;事件上报单元,用于将所述统计事件数据上报至大数据平台。
在上述实施例的基础上,所述目标函数包括核心函数,所述核心函数为Objective-C函数,耗时采集模块302具体用于:运行所述目标应用程序时,当运行至所述Objective-C函数时,通过Hook objc_msgSend函数采集所述Objective-C函数的耗时数据。目标函数包括被标记的非核心函数,所述被标记的非核心函数包括起点标记和终点标记,耗时采集模块302包括:第一检测单元,用于运行所述目标应用程序时,检测到所述起点标记时,确认所述被标记的非核心函数开始运行,记录运行开始时间;第二检测单元,用于检测到所述终点标记时,确认所述被标记的非核心函数结束运行,记录运行结束时间;耗时确定单元,用于根据所述运行开始时间和所述运行结束时间得到所述被标记的非核心函数的耗时数据。
上述提供的函数耗时采集装置可用于执行上述任意实施例提供的函数耗时采集方法,具备相应的功能和有益效果。
值得注意的是,上述函数耗时采集装置的实施例中,所包括的各个单元和模块只是按照功能逻辑进行划分的,但并不局限于上述的划分,只要能够实现相应的功能即可;另外,各功能单元的具体名称也只是为了便于相互区分,并不用于限制本发明的保护范围。
图6为本申请实施例提供的一种函数耗时采集设备的结构示意图。如图6所示,该函数耗时采集设备包括处理器40、存储器41、输入装置42以及输出装置43;函数耗时采集设备中处理器40的数量可以是一个或多个,图6中以一个处理器40为例。函数耗时采集设备中处理器40、存储器41、输入装置42以及输出装置43可以通过总线或其他方式连接,图6中以通过总线连接为例。
存储器41作为一种计算机可读存储介质,可用于存储软件程序、计算机可执行程序以及模块,如本发明实施例中的函数耗时采集方法对应的程序指令/模块(例如,函数耗时采集装置中的应用启动模块、耗时采集模块和耗时上报模块)。处理器40通过运行存储在存储器41中的软件程序、指令以及模块,从而执行函数耗时采集设备的各种功能应用以及数据处理,即实现上述的函数耗时采集方法。
存储器41可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据函数耗时采集设备的使用所创建的数据等。此外,存储器41可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储器41可进一步包括相对于处理器40远程设置的存储器,这些远程存储器可以通过网络连接至函数耗时采集设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置42可用于接收输入的数字或字符信息,以及产生与函数耗时采集设备的用户设置以及功能控制有关的键信号输入。输出装置43可包括显示屏等显示设备。
上述函数耗时采集设备包含函数耗时采集装置,可以用于执行任意函数耗时采集方法,具备相应的功能和有益效果。
此外,本发明实施例还提供一种包含计算机可执行指令的存储介质,所述计算机可执行指令在由计算机处理器执行时用于执行本申请任意实施例所提供的函数耗时采集方法中的相关操作,且具备相应的功能和有益效果。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。
因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括要素的过程、方法、商品或者设备中还存在另外的相同要素。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (14)
1.一种函数耗时采集方法,其特征在于,包括:
启动目标应用程序;
运行所述目标应用程序时,采集至少一个目标函数的耗时数据,所述目标函数为所述目标应用程序运行过程中运行的函数,所述目标函数包括核心函数和/或被标记的非核心函数;
所述耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器。
2.根据权利要求1所述的函数耗时采集方法,其特征在于,所述采集至少一个目标函数的耗时数据之前,包括:
判断是否读取到第一结束标识,所述第一结束标识表示前次采集正常结束;
若读取到所述第一结束标识,则执行采集至少一个目标函数的耗时数据的操作。
3.根据权利要求2所述的函数耗时采集方法,其特征在于,所述判断是否读取到第一结束标识之前,包括:
判断是否读取到采集失败标识;
若读取到所述采集失败标识,则停止本次采集;
若未读取到所述采集失败标识,则执行判断是否读取到第一结束标识的操作。
4.根据权利要求3所述的函数耗时采集方法,其特征在于,还包括:
若未读取到所述第一结束标识,则生成所述采集失败标识;
生成采集失败事件,并向所述后台服务器上报所述采集失败事件。
5.根据权利要求2所述的函数耗时采集方法,其特征在于,所述将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器之后,包括:
生成所述第二结束标识,所述第二结束标识表示本次采集正常结束。
6.根据权利要求1所述的函数耗时采集方法,其特征在于,所述采集至少一个目标函数的耗时数据之前,包括:
获取本地设备的第一设备信息和所述后台服务器设置的第二设备信息,所述第二设备信息为可采集耗时数据的设备信息;
判断所述第一设备信息与所述第二设备信息是否匹配;
若匹配,则执行所述采集至少一个目标函数的耗时数据的操作。
7.根据权利要求1所述的函数耗时采集方法,其特征在于,所述耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器之前,包括:
检测到预先设定的结束事件触发时,停止采集所述耗时数据。
8.根据权利要求1所述的函数耗时采集方法,其特征在于,所述目标函数包括核心函数,
所述将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器包括:
根据至少一个所述核心函数的耗时数据绘制火焰图文件;
将所述火焰图文件上报至所述目标应用程序的后台服务器;
所述目标函数包括被标记的非核心函数,
所述将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器包括:
根据至少一个所述被标记的非核心函数的耗时数据生成字典数据文件;
将所述字典数据文件上报至所述目标应用程序的后台服务器。
9.根据权利要求1所述的函数耗时采集方法,其特征在于,所述将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器之后,包括:
获取所述耗时数据在所述后台服务器中的网络存储地址;
将所述网络存储地址上报至大数据平台,以便所述大数据平台通过所述网络存储地址获取所述耗时数据。
10.根据权利要求9所述的函数耗时采集方法,其特征在于,所述目标函数为多个,
所述将所述网络存储地址上报至大数据平台包括:
根据所述耗时数据在多个所述目标函数中确定至少一个耗时目标函数;
根据所述耗时目标函数和所述网络存储地址生成统计事件数据;
将所述统计事件数据上报至大数据平台。
11.根据权利要求1所述的函数耗时采集方法,其特征在于,所述目标函数包括核心函数,所述核心函数为Objective-C函数,
所述采集至少一个目标函数的耗时数据包括:
当运行至所述Objective-C函数时,通过Hook objc_msgSend函数采集所述Objective-C函数的耗时数据;
所述目标函数包括被标记的非核心函数,所述被标记的非核心函数包括起点标记和终点标记,
所述采集至少一个目标函数的耗时数据包括:
检测到所述起点标记时,确认所述被标记的非核心函数开始运行,记录运行开始时间;
检测到所述终点标记时,确认所述被标记的非核心函数结束运行,记录运行结束时间;
根据所述运行开始时间和所述运行结束时间得到所述被标记的非核心函数的耗时数据。
12.一种函数耗时采集装置,其特征在于,包括:
应用启动模块,用于启动目标应用程序;
耗时采集模块,用于运行所述目标应用程序时,采集至少一个目标函数的耗时数据,所述目标函数为所述目标应用程序运行过程中运行的函数,所述目标函数包括核心函数和/或被标记的非核心函数;
耗时上报模块,用于所述耗时数据采集结束后,将本次采集到的所述耗时数据上报至所述目标应用程序的后台服务器。
13.一种函数耗时采集设备,其特征在于,包括:
一个或多个处理器;
存储器,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-11中任一所述的函数耗时采集方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-11中任一所述的函数耗时采集方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011633717.1A CN112698890A (zh) | 2020-12-31 | 2020-12-31 | 函数耗时采集方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011633717.1A CN112698890A (zh) | 2020-12-31 | 2020-12-31 | 函数耗时采集方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112698890A true CN112698890A (zh) | 2021-04-23 |
Family
ID=75513731
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011633717.1A Pending CN112698890A (zh) | 2020-12-31 | 2020-12-31 | 函数耗时采集方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112698890A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641422A (zh) * | 2021-08-18 | 2021-11-12 | 北京沃东天骏信息技术有限公司 | 文件生成方法、装置、电子设备和计算机可读介质 |
Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224437A (zh) * | 2014-06-11 | 2016-01-06 | 腾讯科技(深圳)有限公司 | 一种获取移动终端上事务执行耗时的方法和装置 |
CN105335204A (zh) * | 2014-07-29 | 2016-02-17 | 株式会社日立制作所 | 软件程序的灰度发布控制方法和灰度发布控制装置 |
CN107025173A (zh) * | 2017-04-05 | 2017-08-08 | 腾讯科技(深圳)有限公司 | 一种函数执行时间的测试方法及装置 |
CN108197004A (zh) * | 2018-01-23 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | Ios应用的方法耗时、加载视图耗时的监测方法及系统 |
CN108549600A (zh) * | 2018-03-29 | 2018-09-18 | 珠海市魅族科技有限公司 | 一种性能分析方法及装置、服务器和可读存储介质 |
CN110618933A (zh) * | 2019-08-15 | 2019-12-27 | 华为技术有限公司 | 性能分析方法与系统、电子设备与存储介质 |
CN110941551A (zh) * | 2019-11-21 | 2020-03-31 | 腾讯科技(深圳)有限公司 | 一种应用卡顿检测方法、装置、设备及计算机存储介质 |
CN111104281A (zh) * | 2019-11-20 | 2020-05-05 | 腾讯科技(深圳)有限公司 | 一种游戏性能监控方法、装置、系统及存储介质 |
CN111198725A (zh) * | 2019-12-30 | 2020-05-26 | 掌阅科技股份有限公司 | 应用启动的处理方法、计算设备及计算机存储介质 |
CN111736817A (zh) * | 2020-07-21 | 2020-10-02 | 平安国际智慧城市科技股份有限公司 | 函数执行耗时的确定方法、装置、终端设备及存储介质 |
CN111880990A (zh) * | 2020-07-20 | 2020-11-03 | 北京三快在线科技有限公司 | 一种异常处理方法及装置 |
CN112099798A (zh) * | 2020-09-16 | 2020-12-18 | 广州虎牙科技有限公司 | 公有函数执行耗时的统计方法、装置、存储介质及终端 |
-
2020
- 2020-12-31 CN CN202011633717.1A patent/CN112698890A/zh active Pending
Patent Citations (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224437A (zh) * | 2014-06-11 | 2016-01-06 | 腾讯科技(深圳)有限公司 | 一种获取移动终端上事务执行耗时的方法和装置 |
CN105335204A (zh) * | 2014-07-29 | 2016-02-17 | 株式会社日立制作所 | 软件程序的灰度发布控制方法和灰度发布控制装置 |
CN107025173A (zh) * | 2017-04-05 | 2017-08-08 | 腾讯科技(深圳)有限公司 | 一种函数执行时间的测试方法及装置 |
CN108197004A (zh) * | 2018-01-23 | 2018-06-22 | 武汉斗鱼网络科技有限公司 | Ios应用的方法耗时、加载视图耗时的监测方法及系统 |
CN108549600A (zh) * | 2018-03-29 | 2018-09-18 | 珠海市魅族科技有限公司 | 一种性能分析方法及装置、服务器和可读存储介质 |
CN110618933A (zh) * | 2019-08-15 | 2019-12-27 | 华为技术有限公司 | 性能分析方法与系统、电子设备与存储介质 |
CN111104281A (zh) * | 2019-11-20 | 2020-05-05 | 腾讯科技(深圳)有限公司 | 一种游戏性能监控方法、装置、系统及存储介质 |
CN110941551A (zh) * | 2019-11-21 | 2020-03-31 | 腾讯科技(深圳)有限公司 | 一种应用卡顿检测方法、装置、设备及计算机存储介质 |
CN111198725A (zh) * | 2019-12-30 | 2020-05-26 | 掌阅科技股份有限公司 | 应用启动的处理方法、计算设备及计算机存储介质 |
CN111880990A (zh) * | 2020-07-20 | 2020-11-03 | 北京三快在线科技有限公司 | 一种异常处理方法及装置 |
CN111736817A (zh) * | 2020-07-21 | 2020-10-02 | 平安国际智慧城市科技股份有限公司 | 函数执行耗时的确定方法、装置、终端设备及存储介质 |
CN112099798A (zh) * | 2020-09-16 | 2020-12-18 | 广州虎牙科技有限公司 | 公有函数执行耗时的统计方法、装置、存储介质及终端 |
Non-Patent Citations (1)
Title |
---|
用户7451029: "如何对 iOS 启动阶段耗时进行分析", pages 1 - 25, Retrieved from the Internet <URL:https://cloud.tencent.com/developer/article/1645856> * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113641422A (zh) * | 2021-08-18 | 2021-11-12 | 北京沃东天骏信息技术有限公司 | 文件生成方法、装置、电子设备和计算机可读介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110069463B (zh) | 用户行为处理方法、装置电子设备及存储介质 | |
US10664387B2 (en) | Code component debugging in an application program | |
CN106844217B (zh) | 对应用的控件进行埋点的方法及装置、可读存储介质 | |
US9904517B2 (en) | System and method for automatic modeling of an application | |
US20140075371A1 (en) | System and method for model based session management | |
CN110020339B (zh) | 基于无埋点的网页数据采集方法及装置 | |
CN107800757B (zh) | 用户行为记录方法及装置 | |
CN112650688B (zh) | 自动化回归测试方法、关联设备以及计算机程序产品 | |
CN112817817B (zh) | 埋点信息查询方法、装置、计算机设备和存储介质 | |
CN110554962A (zh) | 回归测试的流程覆盖方法、服务器及计算机可读存储介质 | |
CN113987393A (zh) | 一种网页操作记录器、系统、装置及方法 | |
CN112069073A (zh) | 测试用例的管理方法、终端和存储介质 | |
CN113190401A (zh) | 快游戏的异常监控方法、电子设备、移动终端以及存储介质 | |
CN110716804A (zh) | 无用资源的自动删除方法、装置、存储介质及电子设备 | |
CN110765007A (zh) | 一种面向安卓应用的崩溃信息线上分析方法 | |
CN112698890A (zh) | 函数耗时采集方法、装置、设备及存储介质 | |
CN111382183A (zh) | 一种数据查询方法及装置 | |
CN112035308A (zh) | 系统接口测试表格的生成方法及装置 | |
CN109491882B (zh) | 一种机箱数据处理方法、系统、设备机箱及可读存储介质 | |
CN112835779A (zh) | 测试用例确定方法、装置、计算机设备 | |
CN114500249B (zh) | 一种根因定位方法和装置 | |
CN115659045A (zh) | 用户操作的识别方法、装置、存储介质以及电子设备 | |
CN116010244A (zh) | 自动化测试方法、装置、电子设备及存储介质 | |
CN115481025A (zh) | 自动化测试的脚本录制方法、装置、计算机设备及介质 | |
CN115203306A (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 |