程序耗时数据的处理方法、设备和存储介质技术

技术编号:32705996 阅读:10 留言:0更新日期:2022-03-20 08:00
本申请涉及一种程序耗时数据的处理方法、设备和存储介质。该方法包括:在程序的目标代码段开始执行时,使用目标代码段起始位置处的第一插桩方法获取目标代码段的第一耗时数据,第一耗时数据包括开始执行时间,目标代码段包括调用层级不超过调用层级阈值的代码段;在目标代码段执行结束时,使用目标代码段结束位置处的第二插桩方法获取目标代码段的第二耗时数据,第二耗时数据包括执行完毕时间,目标代码段的第一耗时数据和第二耗时数据用于确定目标代码段的执行耗时。仅采集调用层级不超过调用层级阈值的目标代码段的第一耗时数据和第二耗时数据,可以降低性能损耗,提高耗时跟踪的准确性。踪的准确性。踪的准确性。

【技术实现步骤摘要】
程序耗时数据的处理方法、设备和存储介质


[0001]本申请涉及计算机
,特别是涉及一种程序耗时数据的处理方法、设备及存储介质。

技术介绍

[0002]为了优化运行在电子设备上的应用程序的性能,需要对应用程序运行期间调用的代码段的执行耗时进行跟踪,以便于开发者定位到应用程序运行期间的耗时点,从而针对耗时点进行优化。
[0003]应用程序的耗时跟踪工具需要在应用程序运行阶段采集目标代码段的耗时数据,例如开始执行时间、执行完毕时间等。应用程序包括数量庞大的代码段,对这些代码段进行耗时数据的采集本身就会占用处理资源。因此,目前应用程序耗时跟踪方式往往存在性能损耗大、耗时跟踪不准确的问题。

技术实现思路

[0004]为解决上述现有技术存在耗时跟踪工具自身性能损耗大,导致耗时跟踪不准确的问题,本申请实施例提出一种程序耗时数据的处理方法、设备和存储介质。
[0005]第一方面,本申请实施例提供一种程序耗时数据的处理方法,该方法包括:
[0006]在程序的目标代码段开始执行时,使用目标代码段起始位置处的第一插桩方法获取目标代码段的第一耗时数据,第一耗时数据包括开始执行时间,目标代码段包括调用层级不超过调用层级阈值的代码段;
[0007]在目标代码段执行结束时,使用目标代码段结束位置处的第二插桩方法获取目标代码段的第二耗时数据,第二耗时数据包括执行完毕时间,目标代码段的第一耗时数据和第二耗时数据用于确定目标代码段的执行耗时。
[0008]程序的代码段往往存在嵌套调用的情况,例如某个代码段被其上级代码段调用,该代码段在执行过程中还会调用其下级代码段。现有的耗时跟踪工具往往不限定调用层级,采集作用域内所有调用层级的代码段,导致性能损耗较大。本申请实施例提供的方法,仅采集调用层级不超过调用层级阈值的目标代码段的第一耗时数据和第二耗时数据,可以降低性能损耗,提高耗时跟踪的准确性。
[0009]可选的,使用所述目标代码段起始位置处的第一插桩方法获取所述目标代码段的第一耗时数据之前,所述方法还包括:
[0010]将所述程序的当前代码段对应的栈深度与所述调用层级阈值进行比较,若所述栈深度不大于所述调用层级阈值,所述当前代码段为所述目标代码段。
[0011]可选的,第一耗时数据和/或第二耗时数据中还包括目标代码段的标识,目标代码段所在线程的标识。相应的,根据目标代码段的标识,在预定的代码段标识与名称映射字典中查找目标代码段的名称;按照指定可视化工具可识别的数据格式,将目标代码段的标识、目标代码段的名称、目标代码段所在线程的标识、开始执行时间和执行完毕时间保存到目
标文件,目标文件的文件格式为指定可视化工具可识别的文件格式;将目标文件发送给可视化工具,以便可视化工具利用目标文件确定目标代码段的耗时,并将目标代码段的耗时转换为可视化数据。
[0012]为了便于开发人员发现耗时点,可以可视化的形式呈现目标代码段的耗时。本申请实施例提供的方法得到并发送目标文件,以复用现有的可视化工具。
[0013]在上述任意方法实施例的基础上,上述方法还可以包括如下操作:获取目标代码段的开始执行时间与执行完毕时间之间的时间差;将该时间差与第一时间差阈值进行比较;若该时间差大于第一时间差阈值,保留目标代码段的第一耗时数据和第二耗时数据。
[0014]本申请实施例提供的方法过滤掉耗时较短的目标代码段的耗时数据,从而达到压缩耗时数据的数据量的目的,可以进一步降低性能损耗。
[0015]在此基础上,上述目标代码段包括程序的指定工作域内的代码段,指定工作域是根据程序的历史目标代码段确定的,历史目标代码段为第一耗时数据和第二耗时数据被保留的历史代码段。
[0016]本申请实施例提供的方法,根据历史目标代码段确定本次耗时数据采集的工作域,一方面可以压缩程序代码,另一方面也可以避免不必要的耗时数据采集,降低性能损耗。
[0017]在上述任意方法实施例的基础上,目标代码段可以包括程序的主线程中的代码段和程序的辅助线程中的代码段。
[0018]程序的部分代码段(例如与显示界面相关的代码段)运行在主线程,部分代码段运行在辅助线程。在辅助线程中运行的某个代码段执行期间若占用某个内存区域,则该内存区域的读写锁与该代码段绑定,在这期间,若主线程中运行的某个代码段也需要占用该内存区域,则需要等待上述代码段释放该内存区域的读写锁。代码段目前的耗时跟踪工具仅对程序的主线程中的代码段进行耗时跟踪,对于上述情况,主线程上运行的上述代码段的执行耗时较长,会被误认为该代码段为耗时较长的代码段,而实际情况并非如此。本申请实施例提供的方法不仅对主线程的代码段采集耗时数据,还对辅助线程的代码段采集耗时数据,对于上述情况,主线程和辅助线程的代码段的执行耗时均提供给开发人员,开发人员据此能够发现真正的耗时点,进而制定正确的耗时优化方案。
[0019]在上述任意方法实施例的基础上,在目标代码段异常终止的情况下,还可以通过目标代码段的上级代码段调用结束指令结束目标代码段,上级代码段为调用目标代码段的代码段。
[0020]若目标代码段异常终止,则第二插装方法无法获取到执行完毕时间,导致该目标代码段的耗时数据采集异常。采用本申请实施例提供的方法,在目标代码段异常终止的情况下,可以通过其上级代码段调用结束指令结束目标代码段,从而保证第二插装方法获取到执行完毕时间。
[0021]第二方面,本申请实施例提供一种电子设备,包括:
[0022]第一耗时数据采集模块,用于在程序的目标代码段开始执行时,使用所述目标代码段起始位置处的第一插桩方法获取所述目标代码段的第一耗时数据,所述第一耗时数据包括开始执行时间,所述目标代码段包括调用层级不超过调用层级阈值的代码段;
[0023]第二耗时数据采集模块,用于在所述目标代码段执行结束时,使用所述目标代码
段结束位置处的第二插桩方法获取所述目标代码段的第二耗时数据,所述第二耗时数据包括执行完毕时间,所述目标代码段的第一耗时数据和第二耗时数据用于确定所述目标代码段的执行耗时。
[0024]程序的代码段往往存在嵌套调用的情况,例如某个代码段被其上级代码段调用,该代码段在执行过程中还会调用其下级代码段。现有的耗时跟踪工具往往不限定调用层级,采集作用域内所有调用层级的代码段,导致性能损耗较大。本申请实施例提供的方法,仅采集调用层级不超过调用层级阈值的目标代码段的第一耗时数据和第二耗时数据,可以降低性能损耗,提高耗时跟踪的准确性。
[0025]可选的,所述电子设备还包括层级控制模块,用于将所述程序的当前代码段对应的栈深度与所述调用层级阈值进行比较,若所述栈深度不大于所述调用层级阈值,所述当前代码段为所述目标代码段。
[0026]可选的,所述第一耗时数据和所述第二耗时数据中还包括所述目标代码段的标识,所述目标代码段所在线程的标识,所述电子设备还包括目标文件处理模块,用于:根据所述目标代码段的标识,在预定的代码段标识与名称映射字典中本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种程序耗时数据的处理方法,其特征在于,所述方法包括:在程序的目标代码段开始执行时,使用所述目标代码段起始位置处的第一插桩方法获取所述目标代码段的第一耗时数据,所述第一耗时数据包括开始执行时间,所述目标代码段包括调用层级不超过调用层级阈值的代码段;在所述目标代码段执行结束时,使用所述目标代码段结束位置处的第二插桩方法获取所述目标代码段的第二耗时数据,所述第二耗时数据包括执行完毕时间,所述目标代码段的第一耗时数据和第二耗时数据用于确定所述目标代码段的执行耗时。2.根据权利要求1所述的方法,其特征在于,使用所述目标代码段起始位置处的第一插桩方法获取所述目标代码段的第一耗时数据之前,所述方法还包括:将所述程序的当前代码段对应的栈深度与所述调用层级阈值进行比较,若所述栈深度不大于所述调用层级阈值,所述当前代码段为所述目标代码段。3.根据权利要求1所述的方法,其特征在于,所述第一耗时数据和/或所述第二耗时数据中还包括所述目标代码段的标识,所述目标代码段所在线程的标识,所述方法还包括:根据所述目标代码段的标识,在预定的代码段标识与名称映射字典中查找所述目标代码段的名称;按照指定可视化工具可识别的数据格式,将所述目标代码段的标识、所述目标代码段的名称、所述目标代码段所在线程的标识、所述开始执行时间和所述执行完毕时间保存到目标文件,所述目标文件的文件格式为所述指定可视化工具可识别的文件格式;将所述目标文件发送给所述可视化工具,以便所述可视化工具利用所述目标文件确定所述目标代码段的耗时,并将所述目标代码段的耗时转换为可视化数据。4.根据权利要求1至3任一项所述的方法,其特征在于,所述方法还包括:获取所述目标代码段的开始执行时间与执行完毕...

【专利技术属性】
技术研发人员:陈兴超
申请(专利权)人:北京字节跳动网络技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1