CN115495303A - 帧率处理方法、装置、存储介质以及终端 - Google Patents

帧率处理方法、装置、存储介质以及终端 Download PDF

Info

Publication number
CN115495303A
CN115495303A CN202110683368.2A CN202110683368A CN115495303A CN 115495303 A CN115495303 A CN 115495303A CN 202110683368 A CN202110683368 A CN 202110683368A CN 115495303 A CN115495303 A CN 115495303A
Authority
CN
China
Prior art keywords
code
application program
target application
target
interface
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
Application number
CN202110683368.2A
Other languages
English (en)
Inventor
陈鑫
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong Oppo Mobile Telecommunications Corp Ltd
Original Assignee
Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Guangdong Oppo Mobile Telecommunications Corp Ltd filed Critical Guangdong Oppo Mobile Telecommunications Corp Ltd
Priority to CN202110683368.2A priority Critical patent/CN115495303A/zh
Priority to PCT/CN2022/091673 priority patent/WO2022262472A1/zh
Publication of CN115495303A publication Critical patent/CN115495303A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/302Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error 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/079Root cause analysis, i.e. error or fault diagnosis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3051Monitoring 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/14Digital output to display device ; Cooperation and interconnection of the display device with other functional units
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04MTELEPHONIC COMMUNICATION
    • H04M1/00Substation equipment, e.g. for use by subscribers
    • H04M1/72Mobile telephones; Cordless telephones, i.e. devices for establishing wireless links to base stations without route selection
    • H04M1/724User interfaces specially adapted for cordless or mobile telephones
    • H04M1/72403User interfaces specially adapted for cordless or mobile telephones with means for local support of applications that increase the functionality

Abstract

本申请公开了一种帧率处理方法、装置、存储介质以及终端,涉及设备显示技术领域。首先统计目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率;然后获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈;最后打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。由于通过纯软件的方式确定丢帧率,可以减少帧率处理的成本,另外可以实时定位分析出导致目标应用程序丢帧的目标代码执行栈,可以帮助开发人员快速、准确分析出导致丢帧的原因。

Description

帧率处理方法、装置、存储介质以及终端
技术领域
本申请涉及设备显示技术领域,尤其涉及一种帧率处理方法、装置、存储介质以及终端。
背景技术
随着科学技术的发展,越来越多的终端出现在人们的生活中,终端可以通过显示相关画面来与用户进行信息传递,因此关于终端中显示画面的帧率处理方法也成为本领域技术人员研究的重点之一。
在相关技术中,统计某一应用程序运行时的帧率的方法是需要终端连接专门的外设装备,以及连接计算机、服务器以辅助分析丢帧率。由于需要购买额外的外设装备,例如画面帧率采集器,导致帧率处理的成本较高。
发明内容
本申请提供一种帧率处理方法、装置、存储介质以及终端,可以解决相关技术中由于需要购买额外的外设装备,导致帧率检测的成本较高,且无法实时定位分析出导致丢帧的原因的技术问题。
第一方面,本申请实施例提供一种帧率处理方法,该方法包括:
统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据所述预设时间区间以及所述次数计算所述目标应用程序在所述预设时间区间内的丢帧率;
获取在所述预设时间区间内所述目标应用程对应的各代码执行栈的执行时间,以及根据所述各代码执行栈的执行时间确定导致所述目标应用程序丢帧的目标代码执行栈;
打印所述目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
第二方面,本申请实施例提供一种帧率处理装置,该装置包括:
丢帧计算模块,用于统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据所述预设时间区间以及所述次数计算所述目标应用程序在所述预设时间区间内的丢帧率;
执行栈确定模块,用于获取在所述预设时间区间内所述目标应用程对应的各代码执行栈的执行时间,以及根据所述各代码执行栈的执行时间确定导致所述目标应用程序丢帧的目标代码执行栈;
代码打印模块,用于打印所述目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
第三方面,本申请实施例提供一种计算机存储介质,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行上述的方法的步骤。
第四方面,本申请实施例提供一种终端,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序。
本申请一些实施例提供的技术方案带来的有益效果至少包括:
本申请提供一种帧率处理方法,首先统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率;然后获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈;最后打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。由于是通过统计在预设时间区间内目标应用程序执行界面绘制接口的次数来确定丢帧率,也即通过纯软件的方式确定丢帧率,可以减少帧率处理的成本,另外通过代码执行栈的执行时间,可以实时定位分析出导致目标应用程序丢帧的目标代码执行栈,打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,可以帮助开发人员快速、准确分析出导致丢帧的原因。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例提供的一种帧率处理方法的示例性系统架构图;
图2为本申请实施例提供的一种帧率处理方法的系统交互图;
图3为本申请实施例提供的一种帧率处理方法的流程示意图;
图4为本申请实施例提供的一种界面绘制原理的示意图;
图5为本申请实施例提供的一种丢帧率计算示意图;
图6为本申请实施例提供的一种应用程序界面显示示意图;
图7为本申请实施例提供的一种代码执行栈的结构示意图;
图8为本申请另一实施例提供的一种帧率处理方法的流程示意图;
图9为本申请一实施例提供的一种集合结构示意图;
图10为本申请一实施例提供的一种帧率处理装置的结构框图;
图11为本申请另一实施例提供的一种帧率处理装置的结构框图;
图12为本申请实施例提供的一种终端的结构示意图。
具体实施方式
为使得本申请的特征和优点能够更加的明显和易懂,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而非全部实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
下面的描述涉及附图时,除非另有表示,不同附图中的相同数字表示相同或相似的要素。以下示例性实施例中所描述的实施方式并不代表与本申请相一致的所有实施方式。相反,它们仅是如所附权利要求书中所详述的、本申请的一些方面相一致的装置和方法的例子。
图1为本申请实施例提供的一种帧率处理方法的示例性系统架构图。
如图1所示,系统架构可以包括终端101、网络102和服务器103。网络102用于在终端101和服务器103之间提供通信链路的介质。网络102可以包括各种类型的有线通信链路或无线通信链路,例如:有线通信链路包括光纤、双绞线或同轴电缆的,无线通信链路包括蓝牙通信链路、无线保真(Wireless-Fidelity,Wi-Fi)通信链路或微波通信链路等。
终端101可以通过网络102与服务器103交互,以接收来自服务器103的消息或向服务器103发送消息。终端101可以是硬件,也可以是软件。当终端101为硬件时,可以是各种电子设备,包括但不限于智能手表、智能手机、平板电脑、膝上型便携式计算机和台式计算机等。当终端101为软件时,可以是安装在上述所列举的电子设备中,其可以实现呈多个软件或软件模块(例如:用来提供分布式服务),也可以实现成单个软件或软件模块,在此不作具体限定。
服务器103可以是提供各种服务的业务服务器。需要说明的是,服务器103可以是硬件,也可以是软件。当服务器103为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器103为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块,在此不做具体限定。
应理解,图1中的终端、网络以及服务器的数目仅是示意性的,根据实现需要,可以是任意数量的终端、网络以及服务器。
请参阅图2,图2为本申请实施例提供的一种帧率处理方法的系统交互图,可以理解的,在本申请实施例中,执行主体可以终端或者终端中的处理器,还可以是终端中执行帧率处理方法的相关服务,为方便描述下面以执行主体为终端中的处理器为例,结合图1和图2介绍一种帧率处理方法中系统交互过程。
S201、用户运行目标应用程序。
根据需要可以将终端中任一一个应用程序确定为目标应用程序。
S202、处理器统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率。
可选地,统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:确定目标应用程序对应的系统界面绘制周期,以及将预设数量的系统界面绘制周期确定为预设时间区间。
可选地,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率,包括:获取目标差值与预设数量的比值,将比值作为目标应用程序在预设时间区间内的丢帧率;其中,目标差值为目标应用程序执行界面绘制接口的次数与预设数量之间的差值。
S203、处理器获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈。
可选地,统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:基于在目标应用程序中各代码函数的开始位置插入的第一代码,在各代码函数开始运行时分别记录各代码函数的身份标识、开始时间以及开始标志位,并按照时间先后顺序保存至预设集合中;基于在目标应用程序中各代码函数的结束位置插入的第二代码,在各代码函数结束运行时分别记录各代码函数的身份标识、结束时间以及结束标志位,并按照时间先后顺序保存至预设集合中。
可选地,获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,包括:若丢帧率大于预设丢帧率阈值,则确定在预设时间区间内目标应用程对应的各代码执行栈的初始代码函数的第一身份标识,在预设集合中查找与各初始代码函数的第一身份标识匹配的第一开始标志位,以及第一开始标志位对应的第一开始时间;确定在预设时间区间内目标应用程对应的各代码执行栈的结束代码函数的第二身份标识,在预设集合中查找与各结束代码函数的第二身份标识匹配的第二结束标志位,以及第二结束标志位对应的第二结束时间;将各代码执行栈的初始代码函数的第一开始时间与各代码执行栈的结束代码函数的第二结束时间的差值,作为各代码执行栈的执行时间。
可选地,根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈,包括:确定各代码执行栈的类型,代码执行栈的类型包括界面绘制执行栈以及非界面绘制执行栈;将代码执行栈的类型为界面绘制执行栈,且代码执行栈的执行时间大于系统界面绘制周期的代码执行栈确定为目标代码执行栈;和/或将代码执行栈的类型为非界面绘制执行栈,且代码执行栈的执行时间大于预设执行栈执行时间的代码执行栈确定为目标代码执行栈。
S204、处理器打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
可选地,打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,包括:基于预设集合确定目标代码执行栈中初始代码函数与结束代码函数之间的第三身份标识、第三开始标志位、第三结束标志位、第三开始时间以及第三结束时间;根据各第三身份标识获取对应的各目标代码函数,根据各目标代码函数第三开始标志位对应的第三开始时间,与各目标代码函数第三结束标志位对应的第三结束时间的差值确定各目标代码函数对应的运行耗时;打印各目标代码函数以及各目标代码函数对应的运行耗时。
可选地,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率之后,还包括:计算目标应用程序的当前界面帧率,以及在目标应用程序的界面中显示当前界面帧率;和/或在目标应用程序的界面中显示预设时间区间内的丢帧率。
可选地,统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:为目标应用程序中各代码函数分别分配唯一的身份标识,并将各代码函数与对应的身份标识建立映射关系;基于所有映射关系生成映射文件,以及将映射文件打包至目标应用程序中,以使得目标应用程序安装之后加载映射文件并解析出所有映射关系。
在本申请实施例中,首先统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率;然后获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈;最后打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。由于是通过统计在预设时间区间内目标应用程序执行界面绘制接口的次数来确定丢帧率,也即通过纯软件的方式确定丢帧率,可以减少帧率处理的成本,另外通过代码执行栈的执行时间,可以实时定位分析出导致目标应用程序丢帧的目标代码执行栈,打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,可以帮助开发人员快速、准确分析出导致丢帧的原因。
请参阅图3,图3为本申请实施例提供的一种帧率处理方法的流程示意图。
如图3所示,帧率处理方法包括:
S301、统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率。
可以理解的,本申请实施例中的帧率处理方法可以应用于开发人员对目标应用程序的开发、测试阶段,也可以应用于用户的实际使用过程中,为方便描述,下面以应用于开发人员对目标应用程序的开发、测试阶段为例,介绍帧率处理方法的具体实施过程。
在本申请实施例中,目标应用程序可以是任一一款需要进行帧率测试或者检测的应用程序,例如,目标应用程序可以是对界面帧率要求较高的影音类应用程序或者游戏类应用程序,其中帧率(Frame rate)是以帧称为单位的位图图像连续出现在显示器上的频率(速率)。在开发人员对目标应用程序开发完成之后,需要对目标应用程序进行帧率检测、分析等处理,那么可以首先将目标应用程序安装至终端中,其中终端具体通过预设系统对目标应用程序对应的安装包进行解压、安装,以便于目标应用程序安装完成之后可以在预设系统中运行目标应用程序。可选地,预设系统可以是安卓系统、苹果系统等终端操作系统,为方便描述本申请实施例以安卓系统为例进行介绍。
开发人员在预设系统中启动并运行目标应用程序之后,目标应用目标为了在其界面中显示画面,目标应用程序可以先通过执行预设系统中软件开发工具包(SoftwareDevelopment Kit,SDK)提供的预设接口,获取预设系统发出的界面绘制信号,界面绘制信号可以认为是一种垂直同步信号或者时间脉冲信号,然后目标应用程序可以基于该界面绘制信号执行一次完整的界面绘制程序,以形成一帧画面。在理想情况下,当目标应用程序连续获取预设系统发出的界面绘制信号之后,会基于各界面绘制信号连续执行多次完整的界面绘制程序,以形成连续的多帧画面,那么用户就可以观察到目标应用程序的界面中显示由多帧画面组成的流畅界面。
进一步地,预设系统发出的界面绘制信号是有一定的周期的,这个周期也即系统界面绘制周期,系统界面绘制周期根据预设系统对应的系统界面刷新率有关,例如,当预设系统对应的界面刷新率为60赫兹,也即系统界面需要在一秒内刷新60次,因此预设系统会在1秒(1000毫秒)内发出60次界面绘制信号,以使得目标应用程序可以基于界面绘制信号在1秒内执行60次完整的界面绘制程序,那么可以得到系统界面绘制周期大概为16.6毫秒(1000毫秒/60次)。可选地,本申请实施例中,对预设系统对应的界面刷新率不做限定,预设系统对应的界面刷新率可以是60赫兹、90赫兹或者144赫兹等。下面结合图4对界面绘制原理进行具体介绍。
请参阅图4,图4为本申请实施例提供的一种界面绘制原理的示意图。如图4所示,以预设系统对应的界面刷新率为60赫兹为例,预设系统每隔16.6毫秒通过预设接口向目标应用程序发送一次界面绘制信号,如果目标应用程序中存在绘制事件,那么目标应用程序执行预设接口以获取界面绘制信号,并执行一次界面绘制程序,以在目标应用程序的界面中绘制一帧画面。在理想情况下,目标应用程序会在获取到下一次界面绘制信号前完成绘制本次界面绘制,如图4中的第一次绘制,在界面绘制周期16.6毫秒内执行完界面绘制程序,此时目标应用程序的显示界面没有发生丢帧的情况。
但是在图4中第二次绘制时占用了大约3个界面绘制周期,如果在3个界面绘制周期的后两个界面绘制周期中本来应该计划有绘制事件,但由于第二次绘制一直没有结束就会导致目标应用程序不能执行预设接口获取界面绘制信号并执行界面绘制程序,也即导致之后的两个绘制周期的绘制事件不会被执行,此时目标应用程序的显示界面发生了丢帧的情况。一种特殊情况是,当目标应用程序中没有绘制事件,目标应用程序可以执行预设接口,也即获取界面绘制信号,但是界面绘制信号不会调用、执行界面绘制程序,此时认为目标应用程序的显示界面没有发生丢帧的情况。
由上述界面绘制原理可知,一般情况下,目标应用程序只要执行一次预设接口,就可以通过预设接口获取一次预设系统发送的界面绘制信号,并执行一次界面绘制程序,因此通过统计目标应用程序在一定时间内执行界面绘制接口的次数,可以确定目标应用程序的帧率以及丢帧率。但是在相关技术中,例如在安卓系统中,预设接口可能只允许目标应用程序的源码执行,处理器中的代码或者开发者编写的代码不能直接访问该预设接口,因此一种可行的实施方式是,开发者可以对预设接口进行编写,以使得在预设接口的基础上,预设接口提供另外一个接口,可以将该接口命名为界面绘制接口,界面绘制接口可以用于目标应用程序的源码接收预设系统发送的界面绘制信号,且目标应用程序中的界面绘制程序可以实现界面绘制接口,并将界面绘制接口作为驱动目标应用程序中的界面绘制程序运行的唯一入口。
进一步地,开发者编写的代码也可以实现界面绘制接口,以使得界面绘制接口也可以被开发者编写的代码访问,界面绘制接口也可以用于开发者编写的代码接收预设系统发送的界面绘制信号,并且开发者编写的代码实现界面绘制接口和目标应用程序中的界面绘制程序实现界面绘制接口保持一致,也即目标应用程序的源码可以在系统界面绘制周期内执行预设接口与在系统界面绘制周期内执行界面绘制接口无差别。可以理解的,如果在某些预设系统中,预设接口既可以被目标应用程序的源码执行,也可以被处理器中的代码或者开发者编写的代码执行,那么在该预设系统中,预设接口也就是界面绘制接口。
由于界面绘制接口也可以被开发者编写的代码访问,且目标应用程序的源码可以在系统界面绘制周期内执行预设接口与在系统界面绘制周期内执行界面绘制接口无差别,那么可以得到目标应用程序只要执行一次界面绘制接口,就可以通过界面绘制接口获取一次预设系统发送的界面绘制信号,并执行一次界面绘制程序。
因此为了计算出目标应用程序的显示界面发生丢帧情况时的丢帧率,可以通过开发者编写的预设代码,统计在预设时间区间内目标应用程序执行界面绘制接口的次数,由于在理想情况下,在一次系统界面绘制周期内,会执行一次界面绘制接口,那么可以将预设时间区间设置为包括预设数量的系统界面绘制周期,那么可以通过预设数量与预设时间区间内目标应用程序执行界面绘制接口的次数,计算出目标应用程序在预设时间区间内的丢帧率,另外也可以通过预设数量与预设时间区间内目标应用程序执行界面绘制接口的次数,计算出目标应用程序的当前界面帧率。
具体的,可以获取目标差值与预设数量的比值,将比值作为目标应用程序在预设时间区间内的丢帧率,其中,目标差值为目标应用程序执行界面绘制接口的次数与预设数量之间的差值。也即可以先确定预设数量与次数的差值,以及计算差值与预设数量的比值,将比值作为目标应用程序在预设时间区间内的丢帧率。还可以计算出在上一单位时间内包括的所有预设时间区间,将所有预设时间区间内目标应用程序执行界面绘制接口的次数,作为目标应用程序的当前界面帧率。
下面结合图5,介绍计算目标应用程序在预设时间区间内的丢帧率的具体过程。
请参阅图5,图5为本申请实施例提供的一种丢帧率计算示意图,如图5所示,以预设系统对应的界面刷新率为60赫兹为例,预设系统每隔16.6毫秒通过界面绘制接口向目标应用程序发送一次界面绘制信号,如果目标应用程序中存在绘制事件,那么目标应用程序执行界面绘制接口以获取界面绘制信号,并执行一次界面绘制程序,以在目标应用程序的界面中绘制一帧画面。
如图5中的第一次绘制,目标应用程序执行一次界面绘制接口,在界面绘制周期16.6毫秒内执行完界面绘制程序,此时目标应用程序的显示界面没有发生丢帧的情况。
但是在图5中第二次绘制时,目标应用程序执行一次界面绘制接口,但是却在3个界面绘制周期内执行完界面绘制程序,也即第二次绘制时占用了3个界面绘制周期,如果在3个界面绘制周期的两个界面绘制周期中本来应该计划有绘制事件,但由于第二次绘制一直没有结束就会导致目标应用程序不能执行预设接口获取界面绘制信号并执行界面绘制程序,也即导致之后的两个绘制周期的绘制事件不会被执行,此时目标应用程序的显示界面发生了丢帧的情况。而后面的第三次绘制至第八次绘制时,目标应用程序会分别执行一次界面绘制接口,并分别在一个绘制周期内执行完界面绘制程序,也即第三次绘制至第八次绘制均未发生丢帧情况。
如果将图5中的10个界面绘制周期作为预设时间区间,那么在该预设时间区间内可以统计出目标应用程序执行界面绘制接口的次数为8次,预设时间区间包含系统界面绘制周期的预设数量为10,因此预设数量与次数的差值为2,该差值与预设数量的比值为0.2,那么目标应用程序在该预设时间区间内的丢帧率20%。进一步地,还可以计算出在上一单位时间内包括的所有预设时间区间,例如,当单位时间为1秒,预设时间区间包含系统界面绘制周期的预设数量为10,那么1秒内包括6个预设时间区间,将6个预设时间区间内目标应用程序执行界面绘制接口的次数,作为目标应用程序的当前界面帧率。
可选地,在计算到目标应用程序在一个预设时间区间内的丢帧率之后,还可以依次计算出后续多个预设时间区间内的丢帧率,并且还可以在目标应用程序的界面中显示各预设时间区间内的丢帧率。具体的,可以在目标应用程序的应用界面的任意位置中添加一个窗口,通过该窗口去实时显示计算到的目标应用程序在各预设时间区间内的丢帧率。
请参阅图6,图6为本申请实施例提供的一种应用程序界面显示示意图。
如图6所示,终端600中运行有目标应用程序,在目标应用程序的显示界面610中可以设置有一个窗口620,窗口620中显示了计算到的各预设时间区间内的丢帧率。为了便于方便开发人员判断各预设时间区间内的丢帧率的大小,可以将处于不同区间的丢帧率,用不同的图形、颜色或者填充花纹来表示。例如,当使用柱状图表示各预设时间区间内的丢帧率时,可以使用绿柱表示无丢帧(丢帧0%),使用蓝柱表示丢帧30%以下,使用红柱表示丢帧30%以上;还可以通过柱子的高度对应表示丢帧率的大小,例如在图6中,柱子的高度越高则对应的时间区间内的丢帧率越大。
可选地,由于还可以获取目标应用程序的当前界面帧率,那么也可以根据需要在窗口620显示目标应用程序的当前界面帧率。
由于上述计算目标应用程序在预设时间区间内的丢帧率以及目标应用程序的当前界面帧率的方法,是通过软件的方式实现的,因此相较于相关技术中,需要购买额外的外设装备来分析丢帧率的方法,可以有效减少帧率处理的成本。
S302、获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈。
当获取到目标应用程序在预设时间区间内的丢帧率之后,可以根据需要确定是否定位导致目标应用程序丢帧的原因,一种可行的方式是,不论丢帧率的具体数值是多少,都可以在确定目标应用程序在预设时间区间内的丢帧率之后,定位导致目标应用程序丢帧的原因,这种实施方式的优点是,可以及早发现导致目标应用程序丢帧的原因,避免目标应用程序出现更严重的错误;另一种可行的方式是,可以将丢帧率与丢帧率阈值进行比较,丢帧率阈值可以根据需要进行设置,例如,丢帧率阈值可以是不影响用户正常观看目标应用程序的显示画面的最低丢帧率。那么当丢帧率大于丢帧率阈值时,会影响用户正常观看目标应用程序的显示画面,此时需要确定导致目标应用程序丢帧的原因,这种实施方式的优点是,可以减少目标应用程序中因为定位导致目标应用程序丢帧而产生的功耗。为方面描述,下面以当丢帧率大于丢帧率阈值时,定位导致目标应用程序丢帧的原因为例,具体介绍定位导致目标应用程序丢帧的原因的方法。
可以理解的,在目标应用程序的运行过程中,各运行事件的执行过程分别在对应的特定线程中执行,那么目标应用程序在执行界面绘制程序时,也会在一个特定的主线程中执行,线程中可以包括多个按照执行先后顺序排列的代码执行栈,代码执行栈可以认为是一种代码函数的集合,界面绘制程序的执行过程也就是代码执行栈中代码函数的执行过程。
请参阅图7,图7为本申请实施例提供的一种代码执行栈的结构示意图。
如图7所示,在理想的情况下,在界面绘制的过程对应的主线程代码执行时序中仅仅包括界面绘制代码执行栈,一个界面绘制代码执行栈对应一个系统界面绘制周期,那么如果目标应用程序在预设时间区间内出现丢帧的情况,可能是某一个或者多个界面绘制代码执行栈出现问题,导致在某一个或者多个系统界面绘制周期内,界面绘制代码执行栈执行超时。例如,图7中的界面绘制代码执行栈1出现问题,导致在对应的一个系统界面绘制周期内,界面绘制代码执行栈1执行超时,界面绘制代码执行栈1可能会占用后续的系统界面绘制周期,后续的系统界面绘制周期内界面绘制代码执行栈不能执行,进而导致目标应用程序的显示界面发生了丢帧的情况。
还有一种情况是,由于目标应用程序的运行过程中,除了执行界面绘制事件之外,还可能执行其他业务事件(例如,采集语音信息等),那么这些业务事件也会在线程中对应代码执行栈,由于这些代码执行栈不涉及界面绘制,这里将这些代码执行栈命名为非界面绘制代码执行栈。那么如果目标应用程序在预设时间区间内出现丢帧的情况,还可能是某一个或者多个非界面绘制代码执行栈出现问题,非界面绘制代码执行栈执行过程中占用了较多的线程执行时间,很可能占用了后续的系统界面绘制周期,进而导致界面绘制代码执行栈不能正常执行。例如,图7中的非界面绘制代码执行栈1出现问题,非界面绘制代码执行栈1执行过程中占用了较多的线程执行时间,进而导致界面绘制代码执行栈2不能在对应的系统界面绘制周期正常执行,进而导致目标应用程序的显示界面发生了丢帧的情况。
由上述代码执行栈的执行过程可知,代码执行栈的执行过程的占用时间的长短可能会导致目标应用程序丢帧,因此一种可行的确定导致目标应用程序丢帧原因的实施方式是,若确定预设时间区间内的丢帧率大于丢帧率阈值,先获取在该预设时间区间内目标应用程对应的各代码执行栈的执行时间,以便于根据执行时间确定对应的代码执行栈是否执行出现问题,其中确定预设时间区间内目标应用程对应的各代码执行栈的执行时间的方式可以不做限定。
进一步地,在获取预设时间区间内目标应用程对应的各代码执行栈的执行时间之后,还可以根据各代码执行栈的类型确定各代码执行栈在正常执行时对应的执行时间,将各代码执行栈的执行时间与其在正常执行时对应的执行时间进行比较,若代码执行栈的执行时间大于其在正常执行时对应的执行时间,可以将该代码执行栈确定为导致目标应用程序丢帧的目标代码执行栈。
当丢帧率小于或者等于丢帧率阈值时,那么不会影响用户正常观看目标应用程序的显示画面,此时也就不需要确定导致目标应用程序丢帧的原因,可以返回步骤S301。
S303、打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
可以理解的,代码执行栈可以认为是一种代码函数的集合,因此代码执行栈中可以包括至少一个代码函数,那么在确定导致目标应用程序丢帧的目标代码执行栈之后,为了便于开发人员分析出导致目标应用程序丢帧的代码函数,还可以获取目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,并将目标代码函数以及各目标代码函数对应的运行耗时进行打印,其中打印的具体方式可以是打印日志或者上传打印日志。
由于代码执行栈中各代码函数的运行耗时也是在一定的预设时间范围之内,那么如果某一或者某些目标代码函数对应的运行耗时超过预设时间范围,那么可以确定该目标代码函数是导致目标代码执行栈执行出现问题的原因,开发人员可以对该目标代码函数进行优化,以使得该目标代码函数以及对应的目标代码执行栈正常运行,进而使得目标应用程序正常进行界面绘制,解决目标应用程序丢帧得问题。
在本申请实施例中,首先统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率;然后获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈;最后打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。由于是通过统计在预设时间区间内目标应用程序执行界面绘制接口的次数来确定丢帧率,也即通过纯软件的方式确定丢帧率,可以减少帧率处理的成本,另外通过代码执行栈的执行时间,可以实时定位分析出导致目标应用程序丢帧的目标代码执行栈,打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,可以帮助开发人员快速、准确分析出导致丢帧的原因。
请参阅图8,图8为本申请另一实施例提供的一种帧率处理方法的流程示意图。
如图8所示,该方法包括:
S801、基于在目标应用程序中各代码函数的开始位置插入的第一代码,在各代码函数开始运行时分别记录各代码函数的身份标识、开始时间以及开始标志位,并按照时间先后顺序保存至预设集合中。
在本申请实施例中,为了便于后续确定预设时间区间内目标应用程对应的各代码执行栈的执行时间,可以在目标应用程序的开发阶段,为目标应用程序中各代码函数分别分配唯一的身份标识,并将各代码函数与对应的身份标识建立映射关系,以使得各代码函数与其对应的身份标识一一映射。还可以基于所有映射关系生成映射文件,例如,映射文件为mapping.txt,以及将映射文件打包至目标应用程序中,以使得目标应用程序安装之后加载映射文件并解析出所有映射关系。
进一步地,还可以在目标应用程序中各代码函数的编写过程中,在各代码函数的开始位置插入第一代码,其中第一代码用于基于上述映射关系记录对应的代码函数的身份标识、代码函数开始运行的开始时间以及代码函数是开始运行的开始标识位;以及在各代码函数的结束位置插入第二代码,其中第二代码用于基于上述映射关系记录对应的代码函数的身份标识、代码函数结束运行的结束时间以及代码函数是结束运行的结束标识位。
那么在目标应用程序在预设系统中运行之后,可以基于在目标应用程序中各代码函数的开始位置插入的第一代码,在各代码函数开始运行时分别记录各代码函数的身份标识、开始时间以及开始标志位,并按照时间先后顺序保存至预设集合中。其中为了方便对应存储每个代码函数的身份标识、开始时间以及开始标志位,可以通过long型存储方式来存储每个代码函数的身份标识、开始时间以及开始标志位,其中,一个long型数据包括64位存储字节,一个long型整数的前18位用于保存对应代码函数的身份标识,中间45用于保存对应代码函数的开始时间,最后一位用于保存对应代码函数的开始标志位。
在记录各代码函数的身份标识、开始时间以及开始标志位的过程中,还可以按照时间先后顺序将记录结果保存至预设集合中。例如,当通过long型存储方式来存储每个代码函数的身份标识、开始时间以及开始标志位时,那么在确定一个代码函数的long型数据之后,可以按照long型中纪录的开始时间的顺序,将各long型数据组成一个long型数组,该long型数组的长度可以根据目标应用程序中代码函数的总数量进行设置,例如,可以将long型数组的长度设置为8MB。
S802、基于在目标应用程序中各代码函数的结束位置插入的第二代码,在各代码函数结束运行时分别记录各代码函数的身份标识、结束时间以及结束标志位,并按照时间先后顺序保存至预设集合中。
与上述步骤类似,在目标应用程序在预设系统中运行之后,可以基于在目标应用程序中各代码函数的结束位置插入的第二代码,在各代码函数结束运行时分别记录各代码函数的身份标识、结束时间以及结束标志位,并按照时间先后顺序保存至预设集合中。其中为了方便对应存储每个代码函数的身份标识、结束时间以及结束标志位,也可以通过long型存储方式来存储每个代码函数的身份标识、结束时间以及结束标志位,其中,一个long数据型包括64位存储字节,一个long型整数的前18位用于保存对应代码函数的身份标识,中间45为用于保存对应代码函数的结束时间,最后一位用于保存对应代码函数的结束标志位。
在上一步骤的基础上,由于在记录代码函数的身份标识、开始时间以及开始标志位的过程中,还可能随时需要记录代码函数的身份标识、结束时间以及结束标志位,因此在记录各代码函数的身份标识、结束时间以及结束标志位的过程中,也可以按照时间先后顺序将记录结果保存至上述步骤中的同一预设集合中,也即代码函数的身份标识、结束时间以及结束标志位与代码函数的身份标识、结束时间以及结束标志位是存储在同一集合中。例如,当通过long型存储方式来存储每个代码函数的身份标识、结束时间以及结束标志位时,那么在确定一个代码函数的long型数据之后,可以按照long型中纪录的结束时间的顺序,将各long型数据插入到上述long型数组中,那么long型数组中包括了按照时间先后顺序排列的各long型数据。
请参阅图9,图9为本申请一实施例提供的一种集合结构示意图。
如图9所示,当通过long型存储方式来存储每个代码函数的身份标识、开始时间、结束时间、开始标志位以及结束标志位时,那么图9左边表示了一个long型数据的存储方式,也即将各long型数据组成一个集合(long型数组)。例如,图9中一个long型数据中,身份1代表身份标识为1的代码函数,时间1代表身份标识为1的代码函数的开始时间,标志1代表身份标识为1的代码函数的开始标志位;再例如,图9中另一个long型数据中,身份1代表身份标识为1的代码函数,时间14代表身份标识为1的代码函数的结束时间,标志0代表身份标识为1的代码函数的结束标志位,其余long型数据与上述类似,也即身份数值表示对应的代码函数的唯一身份标识,时间数值表示对应的代码函数的开始时间或者结束时间(根据标志位判断),标志数值(0或者1)表示对应的代码函数是开始还是结束,其中long型数组中的各long型数据按照记录的开始时间或者结束时间进行排序。进一步地,按照代码函数的编写逻辑,同一个代码函数的不同部分可以分开执行,也即一个代码函数中可以嵌套其他代码函数,因此同一个代码函数的开始时间和结束时不同,且同一个代码函数的开始标志位与结束标志位也是不同的。
那么通过这种集合可以很容易确定某一个代码函数的所在运行位置以及其对应的运行耗时,例如,对于任一身份标识的代码函数,通过上述集合可以确定两个long型数据,然后通过两个long型数据的标志位分别确定代码函数开始运行对应的long型数据,以及代码函数结束运行对应的long型数据,最后分别确定long型数据对应的开始时间以及结束时间,计算开始时间与结束时间的差值就可以确定该代码函数的运行耗时。类似的,可以计算出目标应用程序中任一一个代码函数的运行耗时。
S803、统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率。
关于步骤S803,可以参阅步骤S301中的详细记载,此处不在赘述。
S804、若丢帧率大于丢帧率阈值,则确定在预设时间区间内目标应用程对应的各代码执行栈的初始代码函数的第一身份标识,在预设集合中查找与各初始代码函数的第一身份标识匹配的第一开始标志位,以及第一开始标志位对应的第一开始时间。
由上述代码执行栈的执行过程可知,代码执行栈的执行过程的占用时间的长短可能会导致目标应用程序丢帧,因此一种可行的确定导致目标应用程序丢帧原因的实施方式是,若确定预设时间区间内的丢帧率大于丢帧率阈值,先获取在该预设时间区间内目标应用程对应的各代码执行栈的执行时间,以便于根据执行时间确定对应的代码执行栈是否执行出现问题。
由于代码执行栈可以认为是包括多个代码函数,且代码函数在执行时具有一定的执行逻辑,执行逻辑的先后决定了代码函数的执行顺序,在上述集合中各代码函数的记录结果是按照时间先后顺序进行排列的,因此可以根据上述映射关系先确定在预设时间区间内目标应用程对应的各代码执行栈,然后确定各代码执行栈的初始代码函数的第一身份标识,其中,代码执行栈的初始代码函数是指代码执行栈开始运行时第一个执行的代码函数,最后在预设集合中查找与各初始代码函数的第一身份标识对应的记录结果(例如,long型数据),在记录结果中确定与第一身份标识匹配的第一开始标志位,以及第一开始标志位对应的第一开始时间,那么各第一开始时间可以认为是各代码执行栈开始运行的时间。
S805、确定在预设时间区间内目标应用程对应的各代码执行栈的结束代码函数的第二身份标识,在预设集合中查找与各结束代码函数的第二身份标识匹配的第二结束标志位,以及第二结束标志位对应的第二结束时间。
同样的,还可以根据上述映射关系确定在预设时间区间内目标应用程对应的各代码执行栈的结束代码函数的第二身份标识,其中,代码执行栈的初始代码函数是指代码执行栈开始运行时第一个执行的代码函数。可以理解的,由于代码函数的编写逻辑,一个代码执行栈的开始代码函数与结束代码函数为同一个代码函数的不同部分,因此一个代码执行栈的开始代码函数的身份标识与结束代码函数的身份标识可以是相同的(也即第一身份标识与第二身份标识是相同的);当然一个代码执行栈的开始代码函数与结束代码函数可以不是同一个代码函数的不同部分,因此一个代码执行栈的开始代码函数的身份标识与结束代码函数的身份标识也可以是不同的(也即第一身份标识与第二身份标识是不同的)。还可以在预设集合中查找与各结束代码函数的第二身份标识对应的记录结果(例如,long型数据),并在记录结果中确定与第二身份标识匹配的第二结束标志位,以及第二结束标志位对应的第二结束时间,那么各第二结束时间可以认为是各代码执行栈结束运行的时间。
S806、将各代码执行栈的初始代码函数的第一开始时间与各代码执行栈的结束代码函数的第二结束时间的差值,作为各代码执行栈的执行时间。
上述记载了,各第一开始时间可以认为是各代码执行栈开始运行的时间,且各第二结束时间可以认为是各代码执行栈结束运行的时间,那么可以将各代码执行栈的初始代码函数的第一开始时间与各代码执行栈的结束代码函数的第二结束时间的差值,作为各代码执行栈的执行时间。
S807、确定各代码执行栈的类型,代码执行栈的类型包括界面绘制执行栈以及非界面绘制执行栈。
在上述实施例中介绍了,代码执行栈的类型包括界面绘制执行栈以及非界面绘制执行栈,且不同类型的代码执行栈的执行时间是不一样,因此在确定导致目标应用程序丢帧的目标代码执行栈时,可以先确定各代码执行栈的类型。
S808、将代码执行栈的类型为界面绘制执行栈,且代码执行栈的执行时间大于系统界面绘制周期的代码执行栈确定为目标代码执行栈。
由于在目标应用程序的显示界面不发生丢帧的情况下,一个界面绘制代码执行栈对应一个系统界面,因此当代码执行栈的类型为界面绘制执行栈时,可以将该界面绘制执行栈的执行时间与系统界面绘制周期进行比较,若界面绘制执行栈的执行时间大于系统界面绘制周期,则可以将该代码执行栈确定为目标代码执行栈,也即导致目标应用程序丢帧的目标代码执行栈。
S809、将代码执行栈的类型为非界面绘制执行栈,且代码执行栈的执行时间大于预设执行栈执行时间的代码执行栈确定为目标代码执行栈。
进一步地,由于在目标应用程序的显示界面不发生丢帧的情况下,非界面绘制执行栈应该在线程中占用较小的时间,以避免占用了后续的系统界面绘制周期,避免后续的界面绘制代码执行栈不能正常执行,非界面绘制执行栈在线程中占用较小的时间可以设置为预设执行栈执行时间,预设执行栈执行时间的具体数值可以根据需要进行设定,预设执行栈执行时间可以认为是非界面绘制执行栈执行时不影响后续的界面绘制代码执行栈能正常执行最小时间。
因此当代码执行栈的类型为非界面绘制执行栈时,可以将非界面绘制执行栈的执行时间与预设执行栈执行时间进行比较,当非界面绘制执行栈的执行时间大于预设执行栈执行时间时,则可以将该代码执行栈确定为目标代码执行栈,也即导致目标应用程序丢帧的目标代码执行栈。
S810、基于预设集合确定目标代码执行栈中初始代码函数与结束代码函数之间的第三身份标识、第三开始标志位、第三结束标志位、第三开始时间以及第三结束时间。
可以理解的,代码执行栈可以认为是一种代码函数的集合,因此代码执行栈中可以包括至少一个代码函数,那么在确定导致目标应用程序丢帧的目标代码执行栈之后,为了便于开发人员分析出导致目标应用程序丢帧的代码函数,还可以获取目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
具体的,可以先根据上述映射关系确定目标代码执行栈中初始代码函数的身份标识与结束代码函数的身份标识,由于预设集合中各记录数据是按照时间先后顺序排列的,因此初始代码函数与结束代码函数之间的代码函数即为目标代码执行栈中的目标代码函数,那么可以基于预设集合确定初始代码函数的身份标识与结束代码函数的身份标识之间的所有的身份标识,将这些身份标识确定为第三身份标识,这些第三身份标识即为目标代码函数的身份标识。进一步地,还可以根据第三身份标识确定目标代码函数的第三开始标志位、第三结束标志位、第三开始时间以及第三结束时间。
S811、根据各第三身份标识获取对应的各目标代码函数,根据各目标代码函数第三开始标志位对应的第三开始时间,与各目标代码函数第三结束标志位对应的第三结束时间的差值确定各目标代码函数对应的运行耗时。
由于第三身份标识即为目标代码函数的身份标识,因此可以基于上述映射关系根据各第三身份标识确定对应的各目标代码函数,并从目标应用程序的代码存储位置获取到各目标代码函数的具体代码。进一步地,还可以计算根据各目标代码函数第三开始标志位对应的第三开始时间,与各目标代码函数第三结束标志位对应的第三结束时间的差值,并将各差值确定为各目标代码函数对应的运行耗时。
S812、打印各目标代码函数以及各目标代码函数对应的运行耗时。
为了便于开发人员分析出导致目标应用程序丢帧的代码函数,还可以获取目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,并将目标代码函数以及各目标代码函数对应的运行耗时进行打印,其中打印的具体方式可以是打印日志或者上传打印日志。
由于代码执行栈中各代码函数的运行耗时也是在一定的预设时间范围之内,那么如果某一或者某些目标代码函数对应的运行耗时超过预设时间范围,那么可以确定该目标代码函数是导致目标代码执行栈执行出现问题的原因,开发人员可以对该目标代码函数进行优化,以使得该目标代码函数以及对应的目标代码执行栈正常运行,进而使得目标应用程序正常进行界面绘制,解决目标应用程序丢帧得问题。
在本申请实施例中,通过预先在目标应用程序的代码函数中插入代码,通过插入的代码可以准确计算出目标应用程对应的各代码执行栈的执行时间,以使得可以根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈,并且通过插入的代码也可以准确定位出目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,可以帮助开发人员快速、准确分析出导致丢帧的原因。
请参阅图10,图10为本申请一实施例提供的一种帧率处理装置的结构框图。
如图10所示,帧率处理装置1000包括:
丢帧计算模块1010,用于统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率。
可选地,丢帧计算模块1010还用于确定目标应用程序对应的系统界面绘制周期,以及将预设数量的系统界面绘制周期确定为预设时间区间。
可选地,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率,包括:获取目标差值与预设数量的比值,将比值作为目标应用程序在预设时间区间内的丢帧率;其中,目标差值为目标应用程序执行界面绘制接口的次数与预设数量之间的差值。
可选地,丢帧计算模块1010还用于计算目标应用程序的当前界面帧率,以及在目标应用程序的界面中显示当前界面帧率;和/或在目标应用程序的界面中显示预设时间区间内的丢帧率。
执行栈确定模块1020,用于获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈。
代码打印模块1030,用于打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
请参阅图11,图11为本申请另一实施例提供的一种帧率处理装置的结构框图。
如图11所示,帧率处理装置1000包括:
第一代码插入模块1110,用于基于在目标应用程序中各代码函数的开始位置插入的第一代码,在各代码函数开始运行时分别记录各代码函数的身份标识、开始时间以及开始标志位,并按照时间先后顺序保存至预设集合中。
第二代码插入模块1120,用于基于在目标应用程序中各代码函数的结束位置插入的第二代码,在各代码函数结束运行时分别记录各代码函数的身份标识、结束时间以及结束标志位,并按照时间先后顺序保存至预设集合中。
丢帧计算模块1130,用于统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率。
第一信息确定模块1140,用于若丢帧率大于丢帧率阈值,则确定在预设时间区间内目标应用程对应的各代码执行栈的初始代码函数的第一身份标识,在预设集合中查找与各初始代码函数的第一身份标识匹配的第一开始标志位,以及第一开始标志位对应的第一开始时间。
第二信息确定模块1150,用于确定在预设时间区间内目标应用程对应的各代码执行栈的结束代码函数的第二身份标识,在预设集合中查找与各结束代码函数的第二身份标识匹配的第二结束标志位,以及第二结束标志位对应的第二结束时间。
执行栈时间确定模块1160,用于将各代码执行栈的初始代码函数的第一开始时间与各代码执行栈的结束代码函数的第二结束时间的差值,作为各代码执行栈的执行时间。
执行栈类型确定模块1170,用于确定各代码执行栈的类型,代码执行栈的类型包括界面绘制执行栈以及非界面绘制执行栈。
第一判断模块1180,用于将代码执行栈的类型为界面绘制执行栈,且代码执行栈的执行时间大于系统界面绘制周期的代码执行栈确定为目标代码执行栈。
第二判断模块1190,用于将代码执行栈的类型为非界面绘制执行栈,且代码执行栈的执行时间大于预设执行栈执行时间的代码执行栈确定为目标代码执行栈。
第三信息确定模块11100,用于基于预设集合确定目标代码执行栈中初始代码函数与结束代码函数之间的第三身份标识、第三开始标志位、第三结束标志位、第三开始时间以及第三结束时间。
代码耗时确定模块11110,用于根据各第三身份标识获取对应的各目标代码函数,根据各目标代码函数第三开始标志位对应的第三开始时间,与各目标代码函数第三结束标志位对应的第三结束时间的差值确定各目标代码函数对应的运行耗时。
打印模块11120,用于打印各目标代码函数以及各目标代码函数对应的运行耗时。
在本申请实施例中,一种帧率处理装置包括:丢帧计算模块,用于统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率;执行栈确定模块,用于获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈;代码打印模块,用于打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。由于是通过统计在预设时间区间内目标应用程序执行界面绘制接口的次数来确定丢帧率,也即通过纯软件的方式确定丢帧率,可以减少帧率处理的成本,另外通过代码执行栈的执行时间,可以实时定位分析出导致目标应用程序丢帧的目标代码执行栈,打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,可以帮助开发人员快速、准确分析出导致丢帧的原因。
本申请实施例还提供了一种计算机存储介质,计算机存储介质存储有多条指令,指令适于由处理器加载并执行如上述实施例中的任一项的方法的步骤。
进一步地,请参见图12,图12为本申请实施例提供了一种终端的结构示意图。如图12所示,终端1200可以包括:至少一个中央处理器1201,至少一个网络接口1204,用户接口1203,存储器1205,至少一个通信总线1202。
其中,通信总线1202用于实现这些组件之间的连接通信。
其中,用户接口1203可以包括显示屏(Display)、摄像头(Camera),可选用户接口1203还可以包括标准的有线接口、无线接口。
其中,网络接口1204可选的可以包括标准的有线接口、无线接口(如WI-FI接口)。
其中,中央处理器1201可以包括一个或者多个处理核心。中央处理器1201利用各种接口和线路连接整个终端1200内的各个部分,通过运行或执行存储在存储器1205内的指令、程序、代码集或指令集,以及调用存储在存储器1205内的数据,执行终端1200的各种功能和处理数据。可选的,中央处理器1201可以采用数字信号处理(Digital SignalProcessing,DSP)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)、可编程逻辑阵列(Programmable Logic Array,PLA)中的至少一种硬件形式来实现。中央处理器1201可集成中央中央处理器(Central Processing Unit,CPU)、图像中央处理器(GraphicsProcessing Unit,GPU)和调制解调器等中的一种或几种的组合。其中,CPU主要处理操作系统、用户界面和应用程序等;GPU用于负责显示屏所需要显示的内容的渲染和绘制;调制解调器用于处理无线通信。可以理解的是,上述调制解调器也可以不集成到中央处理器1201中,单独通过一块芯片进行实现。
其中,存储器1205可以包括随机存储器(Random Access Memory,RAM),也可以包括只读存储器(Read-Only Memory)。可选的,该存储器1205包括非瞬时性计算机可读介质(non-transitory computer-readable storage medium)。存储器1205可用于存储指令、程序、代码、代码集或指令集。存储器1205可包括存储程序区和存储数据区,其中,存储程序区可存储用于实现操作系统的指令、用于至少一个功能的指令(比如触控功能、声音播放功能、图像播放功能等)、用于实现上述各个方法实施例的指令等;存储数据区可存储上面各个方法实施例中涉及到的数据等。存储器1205可选的还可以是至少一个位于远离前述中央处理器1201的存储装置。如图12所示,作为一种计算机存储介质的存储器1205中可以包括操作系统、网络通信模块、用户接口模块以及帧率处理程序。
在图12所示的终端1200中,用户接口1203主要用于为用户提供输入的接口,获取用户输入的数据;而中央处理器1201可以用于调用存储器1205中存储的帧率处理程序,并具体执行以下操作:
统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率;若获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,以及根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈;打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
可选地,统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:确定目标应用程序对应的系统界面绘制周期,以及将预设数量的系统界面绘制周期确定为预设时间区间。
可选地,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率,包括:获取目标差值与预设数量的比值,将比值作为目标应用程序在预设时间区间内的丢帧率;其中,目标差值为目标应用程序执行界面绘制接口的次数与预设数量之间的差值。
可选地,统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:基于在目标应用程序中各代码函数的开始位置插入的第一代码,在各代码函数开始运行时分别记录各代码函数的身份标识、开始时间以及开始标志位,并按照时间先后顺序保存至预设集合中;基于在目标应用程序中各代码函数的结束位置插入的第二代码,在各代码函数结束运行时分别记录各代码函数的身份标识、结束时间以及结束标志位,并按照时间先后顺序保存至预设集合中。
可选地,获取在预设时间区间内目标应用程对应的各代码执行栈的执行时间,包括:若丢帧率大于预设丢帧率阈值,则确定在预设时间区间内目标应用程对应的各代码执行栈的初始代码函数的第一身份标识,在预设集合中查找与各初始代码函数的第一身份标识匹配的第一开始标志位,以及第一开始标志位对应的第一开始时间;确定在预设时间区间内目标应用程对应的各代码执行栈的结束代码函数的第二身份标识,在预设集合中查找与各结束代码函数的第二身份标识匹配的第二结束标志位,以及第二结束标志位对应的第二结束时间;将各代码执行栈的初始代码函数的第一开始时间与各代码执行栈的结束代码函数的第二结束时间的差值,作为各代码执行栈的执行时间。
可选地,根据各代码执行栈的执行时间确定导致目标应用程序丢帧的目标代码执行栈,包括:确定各代码执行栈的类型,代码执行栈的类型包括界面绘制执行栈以及非界面绘制执行栈;将代码执行栈的类型为界面绘制执行栈,且代码执行栈的执行时间大于系统界面绘制周期的代码执行栈确定为目标代码执行栈;和/或将代码执行栈的类型为非界面绘制执行栈,且代码执行栈的执行时间大于预设执行栈执行时间的代码执行栈确定为目标代码执行栈。
可选地,打印目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,包括:基于预设集合确定目标代码执行栈中初始代码函数与结束代码函数之间的第三身份标识、第三开始标志位、第三结束标志位、第三开始时间以及第三结束时间;根据各第三身份标识获取对应的各目标代码函数,根据各目标代码函数第三开始标志位对应的第三开始时间,与各目标代码函数第三结束标志位对应的第三结束时间的差值确定各目标代码函数对应的运行耗时;打印各目标代码函数以及各目标代码函数对应的运行耗时。
可选地,根据预设时间区间以及次数计算目标应用程序在预设时间区间内的丢帧率之后,还包括:计算目标应用程序的当前界面帧率,以及在目标应用程序的界面中显示当前界面帧率;和/或在目标应用程序的界面中显示预设时间区间内的丢帧率。
可选地,统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:为目标应用程序中各代码函数分别分配唯一的身份标识,并将各代码函数与对应的身份标识建立映射关系;基于所有映射关系生成映射文件,以及将映射文件打包至目标应用程序中,以使得目标应用程序安装之后加载映射文件并解析出所有映射关系。
在本申请所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个模块或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或模块的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理模块,即可以位于一个地方,或者也可以分布到多个网络模块上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能模块可以集成在一个处理模块中,也可以是各个模块单独物理存在,也可以两个或两个以上模块集成在一个模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。
集成的模块如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
需要说明的是,对于前述的各方法实施例,为了简便描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其它顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定都是本申请所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。
以上为对本申请所提供的一种帧率处理方法、装置、存储介质以及终端的描述,对于本领域的技术人员,依据本申请实施例的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

Claims (12)

1.一种帧率处理方法,其特征在于,所述方法包括:
统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据所述预设时间区间以及所述次数计算所述目标应用程序在所述预设时间区间内的丢帧率;
获取在所述预设时间区间内所述目标应用程对应的各代码执行栈的执行时间,以及根据所述各代码执行栈的执行时间确定导致所述目标应用程序丢帧的目标代码执行栈;
打印所述目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
2.根据权利要求1所述的方法,其特征在于,所述统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:
确定目标应用程序对应的系统界面绘制周期,以及将预设数量的系统界面绘制周期确定为预设时间区间。
3.根据权利要求2所述的方法,其特征在于,所述根据所述预设时间区间以及所述次数计算所述目标应用程序在所述预设时间区间内的丢帧率,包括:
获取目标差值与所述预设数量的比值,将所述比值作为所述目标应用程序在所述预设时间区间内的丢帧率;
其中,所述目标差值为所述目标应用程序执行界面绘制接口的次数与预设数量之间的差值。
4.根据权利要求1所述的方法,其特征在于,所述统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:
基于在所述目标应用程序中各代码函数的开始位置插入的第一代码,在各代码函数开始运行时分别记录各代码函数的身份标识、开始时间以及开始标志位,并按照时间先后顺序保存至预设集合中;
基于在所述目标应用程序中各代码函数的结束位置插入的第二代码,在各代码函数结束运行时分别记录各代码函数的身份标识、结束时间以及结束标志位,并按照时间先后顺序保存至所述预设集合中。
5.根据权利要求4所述的方法,其特征在于,所述获取在所述预设时间区间内所述目标应用程对应的各代码执行栈的执行时间,包括:
若所述丢帧率大于预设丢帧率阈值,则确定在所述预设时间区间内所述目标应用程对应的各代码执行栈的初始代码函数的第一身份标识,在所述预设集合中查找与各初始代码函数的第一身份标识匹配的第一开始标志位,以及所述第一开始标志位对应的第一开始时间;
确定在所述预设时间区间内所述目标应用程对应的各代码执行栈的结束代码函数的第二身份标识,在所述预设集合中查找与各结束代码函数的第二身份标识匹配的第二结束标志位,以及所述第二结束标志位对应的第二结束时间;
将各代码执行栈的初始代码函数的第一开始时间与各代码执行栈的结束代码函数的第二结束时间的差值,作为各代码执行栈的执行时间。
6.根据权利要求5所述的方法,其特征在于,所述根据所述各代码执行栈的执行时间确定导致所述目标应用程序丢帧的目标代码执行栈,包括:
确定各代码执行栈的类型,所述代码执行栈的类型包括界面绘制执行栈以及非界面绘制执行栈;
将所述代码执行栈的类型为界面绘制执行栈,且所述代码执行栈的执行时间大于系统界面绘制周期的所述代码执行栈确定为目标代码执行栈;和/或
将所述代码执行栈的类型为非界面绘制执行栈,且所述代码执行栈的执行时间大于预设执行栈执行时间的所述代码执行栈确定为目标代码执行栈。
7.根据权利要求5至6任一项所述的方法,其特征在于,所述打印所述目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时,包括:
基于所述预设集合确定所述目标代码执行栈中初始代码函数与结束代码函数之间的第三身份标识、第三开始标志位、第三结束标志位、第三开始时间以及第三结束时间;
根据各第三身份标识获取对应的各目标代码函数,根据各目标代码函数第三开始标志位对应的第三开始时间,与各目标代码函数第三结束标志位对应的第三结束时间的差值确定各目标代码函数对应的运行耗时;
打印各目标代码函数以及各目标代码函数对应的运行耗时。
8.根据权利要求1所述的方法,其特征在于,所述根据所述预设时间区间以及所述次数计算所述目标应用程序在所述预设时间区间内的丢帧率之后,还包括:
计算所述目标应用程序的当前界面帧率,以及在所述目标应用程序的界面中显示所述当前界面帧率;和/或
在所述目标应用程序的界面中显示所述预设时间区间内的丢帧率。
9.根据权利要求4所述的方法,其特征在于,所述统计在预设时间区间内目标应用程序执行界面绘制接口的次数之前,还包括:
为所述目标应用程序中各代码函数分别分配唯一的身份标识,并将各代码函数与对应的身份标识建立映射关系;
基于所有所述映射关系生成映射文件,以及将所述映射文件打包至所述目标应用程序中,以使得所述目标应用程序安装之后加载所述映射文件并解析出所有所述映射关系。
10.一种帧率处理装置,其特征在于,所述装置包括:
丢帧计算模块,用于统计在预设时间区间内目标应用程序执行界面绘制接口的次数,根据所述预设时间区间以及所述次数计算所述目标应用程序在所述预设时间区间内的丢帧率;
执行栈确定模块,用于获取在所述预设时间区间内所述目标应用程对应的各代码执行栈的执行时间,以及根据所述各代码执行栈的执行时间确定导致所述目标应用程序丢帧的目标代码执行栈;
代码打印模块,用于打印所述目标代码执行栈包括的目标代码函数以及各目标代码函数对应的运行耗时。
11.一种计算机存储介质,其特征在于,所述计算机存储介质存储有多条指令,所述指令适于由处理器加载并执行如权利要求1~9任意一项的所述方法的步骤。
12.一种终端,其特征在于,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如权利要求1~9任一项所述方法的步骤。
CN202110683368.2A 2021-06-18 2021-06-18 帧率处理方法、装置、存储介质以及终端 Pending CN115495303A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110683368.2A CN115495303A (zh) 2021-06-18 2021-06-18 帧率处理方法、装置、存储介质以及终端
PCT/CN2022/091673 WO2022262472A1 (zh) 2021-06-18 2022-05-09 帧率处理方法、装置、存储介质以及终端

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110683368.2A CN115495303A (zh) 2021-06-18 2021-06-18 帧率处理方法、装置、存储介质以及终端

Publications (1)

Publication Number Publication Date
CN115495303A true CN115495303A (zh) 2022-12-20

Family

ID=84464422

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110683368.2A Pending CN115495303A (zh) 2021-06-18 2021-06-18 帧率处理方法、装置、存储介质以及终端

Country Status (2)

Country Link
CN (1) CN115495303A (zh)
WO (1) WO2022262472A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117312117A (zh) * 2023-11-30 2023-12-29 沐曦集成电路(杭州)有限公司 一种打点数据的处理方法、装置、设备及介质

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108681436B (zh) * 2018-03-13 2020-09-22 Oppo广东移动通信有限公司 画质参数调节方法、装置、终端及存储介质
US10613969B2 (en) * 2018-05-17 2020-04-07 Red Hat Israel, Ltd. Code coverage module with testing function identifier
CN109376053B (zh) * 2018-09-20 2022-11-08 Oppo广东移动通信有限公司 数据处理方法、装置以及移动终端
CN110737463A (zh) * 2019-10-24 2020-01-31 北京智游网安科技有限公司 一种关键函数源头信息的分析方法、智能终端及存储介质
CN112099798B (zh) * 2020-09-16 2024-04-19 广州虎牙科技有限公司 公有函数执行耗时的统计方法、装置、存储介质及终端

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117312117A (zh) * 2023-11-30 2023-12-29 沐曦集成电路(杭州)有限公司 一种打点数据的处理方法、装置、设备及介质
CN117312117B (zh) * 2023-11-30 2024-03-01 沐曦集成电路(杭州)有限公司 一种打点数据的处理方法、装置、设备及介质

Also Published As

Publication number Publication date
WO2022262472A1 (zh) 2022-12-22

Similar Documents

Publication Publication Date Title
CN113194349B (zh) 视频播放方法、评论方法、装置、设备及存储介质
CN109426603B (zh) 一种分析应用程序卡顿的方法和装置
CN111124567B (zh) 目标应用的操作录制方法和装置
WO2021169236A1 (zh) 渲染的方法、装置
CN111124668B (zh) 内存释放方法、装置、存储介质及终端
CN111831542B (zh) Api应用调测方法及装置、存储介质
CN113868126A (zh) 应用调试方法、装置、设备的存储介质
CN108156509A (zh) 视频播放方法、装置及用户终端
CN115495303A (zh) 帧率处理方法、装置、存储介质以及终端
CN110248235B (zh) 软件教学方法、装置、终端设备及介质
WO2017206893A1 (zh) 界面刷新同步方法、装置、终端及存储介质
CN113434173B (zh) 数据处理方法、装置、存储介质和电子设备
CN114021016A (zh) 数据推荐方法、装置、设备和存储介质
CN111054070B (zh) 基于游戏的商品展示方法、装置、终端及存储介质
WO2023193633A1 (zh) 图像分析方法、装置、计算机设备以及存储介质
CN110702346B (zh) 一种振动测试方法、装置、存储介质及终端
CN110806909A (zh) 一种应用程序页面掉帧信息确定方法、装置及电子设备
CN113825022B (zh) 一种播放控制状态检测方法、装置、存储介质及电子设备
CN112379967B (zh) 模拟器检测方法、装置、设备及介质
CN113268221A (zh) 文件匹配方法、装置、存储介质及计算机设备
CN114281807A (zh) 数据质量稽核方法、装置、设备及存储介质
CN109600571B (zh) 多媒体资源传输测试系统和多媒体资源传输测试方法
CN114116418A (zh) 信息处理方法及装置、计算机存储介质、电子设备
CN115756996B (zh) 一种芯片测试方法、装置、设备及可读存储介质
CN113849757A (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