用户界面卡顿检测方法与装置、电子设备转让专利

申请号 : CN202010134386.0

文献号 : CN111367741B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 李军

申请人 : OPPO广东移动通信有限公司

摘要 :

本申请实施例公开了一种用户界面卡顿检测方法与装置、电子设备,该方法包括:获取目标应用程序的当前用户界面的绘制请求;根据绘制请求创建目标图层和目标图层对应的缓存区队列,目标图层用于绘制当前用户界面,缓存区队列用于管理缓存区队列中的图形缓存区;获取缓存区队列中的第一图形缓存区的数量,第一图形缓存区用于存储所述目标图层绘制所述当前用户界面的图形数据;根据第一图形缓存区的数量和预设阈值确定当前用户界面的卡顿情况。可见,本申请实施例在系统绘制任务中对缓存区队列中的图形缓存区的数量进行检测和比较,从而实现用户界面卡顿检测操作,有利于保证应用程序的运行和显示界面的流畅性。

权利要求 :

1.一种用户界面卡顿检测方法,其特征在于,应用于电子设备,所述电子设备上运行有目标应用程序;所述方法包括:获取所述目标应用程序的当前用户界面的绘制请求;

根据所述绘制请求创建目标图层和所述目标图层对应的缓存区队列,所述目标图层用于绘制所述当前用户界面,所述缓存区队列用于管理所述缓存区队列中的图形缓存区;

获取所述缓存区队列中的第一图形缓存区的数量,所述第一图形缓存区用于存储所述目标图层绘制所述当前用户界面的图形数据;

根据所述第一图形缓存区的数量和预设阈值确定所述当前用户界面的卡顿情况。

2.根据权利要求1所述的方法,其特征在于,在所述获取所述缓存区队列中的第一图形缓存区的数量之前,所述方法还包括:从所述缓存区队列中确定所述第一图形缓存区;

将绘制所述当前用户界面的图形数据写入到所述第一图形缓存区。

3.根据权利要求2所述的方法,其特征在于,所述从所述缓存区队列中确定所述第一图形缓存区,包括:依次轮询所述缓存区队列中的每个图形缓存区的状态信息;

将所述每个图形缓存区的状态信息为空闲状态的图形缓存区确定为所述第一图形缓存区。

4.根据权利要求3所述的方法,其特征在于,在所述将绘制所述当前用户界面的图形数据写入到所述第一图形缓存区之后,所述方法还包括:将第二图形缓存区添加到所述缓存区队列,所述第二图形缓存区为写入完成后的所述第一图形缓存区;

在所述目标图层上,根据所述第二图形缓存区中的图形数据绘制所述当前用户界面。

5.根据权利要求1‑4任一项所述的方法,其特征在于,所述根据所述第一图形缓存区的数量和预设阈值确定所述当前用户界面的卡顿情况,包括:在所述第一图形缓存区的数量小于所述预设阈值的情况下,根据所述目标图层的存在情况确定所述当前用户界面的卡顿情况;或者,在所述第一图形缓存区的数量大于所述预设阈值的情况下,确定所述当前用户界面没有发生卡顿。

6.根据权利要求5所述的方法,其特征在于,所述根据所述目标图层的存在情况确定所述当前用户界面的卡顿情况,包括:通知界面投递者SurfaceFlinger查询所述目标图层是否存在;

在所述目标图层存在的情况下,确定所述当前用户界面发生卡顿。

7.根据权利要求6所述的方法,其特征在于,在确定所述当前用户界面发生卡顿之后,所述方法还包括:调用所述电子设备的系统提频接口;

通过所述系统提频接口执行中央处理器和/或图形处理器的提频操作。

8.一种用户界面卡顿检测装置,其特征在于,应用于电子设备,所述电子设备上运行有目标应用程序;所述装置包括处理单元,所述处理单元用于:获取所述目标应用程序的当前用户界面的绘制请求;

根据所述绘制请求创建目标图层和所述目标图层对应的缓存区队列,所述目标图层用于绘制所述当前用户界面,所述缓存区队列用于管理所述缓存区队列中的图形缓存区;

获取所述缓存区队列中的第一图形缓存区的数量,所述第一图形缓存区用于存储所述目标图层绘制所述当前用户界面的图形数据;

根据所述第一图形缓存区的数量和预设阈值确定所述当前用户界面的卡顿情况。

9.一种电子设备,其特征在于,包括处理器、存储器和通信接口,所述存储器存储有一个或多个程序,并且所述一个或多个程序由所述处理器执行,所述一个或多个程序包括用于执行如权利要求1‑7任一项所述的方法中的步骤的指令。

10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储用于电子数据交换的计算机程序,其中,所述计算机程序可操作来使得计算机执行如权利要求1‑7任一项所述的方法。

说明书 :

用户界面卡顿检测方法与装置、电子设备

技术领域

[0001] 本申请涉及计算机技术领域,具体涉及一种用户界面卡顿检测方法与装置、电子设备。

背景技术

[0002] 目前,应用程序的界面显示内容依赖于从网络中的服务器获取。当网络传输质量较差而导致数据需要等待时,许多应用程序在设计中通过进度条的方式提示用户当前界面出现卡顿情况。
[0003] 然而,当应用程序存在刷新用户界面的显示内容或者旋转用户界面等操作时,应用程序将产生绘制当前用户界面的申请和图形数据。如果系统无法及时进行绘制任务的调度,也会导致应用程序的界面显示或界面旋转等操作在运行过程中出现不流畅等卡顿情况。

发明内容

[0004] 本申请实施例提供了一种用户界面卡顿检测方法与装置、电子设备,以期望实现用户界面卡顿检测操作,有利于保证应用程序的运行和显示界面的流畅性。
[0005] 第一方面,本申请实施例提供一种用户界面卡顿检测方法,应用于电子设备,电子设备上运行有目标应用程序;所述方法包括:
[0006] 获取所述目标应用程序的当前用户界面的绘制请求;
[0007] 根据所述绘制请求创建目标图层和所述目标图层对应的缓存区队列,所述目标图层用于绘制所述当前用户界面,所述缓存区队列用于管理所述缓存区队列中的图形缓存区;
[0008] 获取所述缓存区队列中的第一图形缓存区的数量,所述第一图形缓存区用于存储所述目标图层绘制所述当前用户界面的图形数据;
[0009] 根据所述第一图形缓存区的数量和预设阈值确定所述当前用户界面的卡顿情况。
[0010] 第二方面,本本申请实施例提供一种用户界面卡顿检测装置,应用于电子设备,电子设备上运行有目标应用程序;所述装置包括处理单元,所述处理单元用于:
[0011] 获取所述目标应用程序的当前用户界面的绘制请求;
[0012] 根据所述绘制请求创建目标图层和所述目标图层对应的缓存区队列,所述目标图层用于绘制所述当前用户界面,所述缓存区队列用于管理所述缓存区队列中的图形缓存区;
[0013] 获取所述缓存区队列中的第一图形缓存区的数量,所述第一图形缓存区用于存储所述目标图层绘制所述当前用户界面的图形数据;
[0014] 根据所述第一图形缓存区的数量和预设阈值确定所述当前用户界面的卡顿情况。
[0015] 第三方面,本申请实施例提供一种电子设备,所述电子设备包括处理器、存储器和通信接口,所述存储器存储有一个或多个程序,并且所述一个或多个程序由所述处理器执行,所述一个或多个程序用于执行本申请实施例第一方面中的步骤的指令。
[0016] 第四方面,本申请实施例提供一种计算机可读存储介质,其中,所述计算机可读存储介质存储用于电子数据交换的计算机程序,所述计算机程序可操作来使得计算机执行本申请实施例第一方面中所描述的部分或全部步骤。
[0017] 第五方面,本申请实施例提供一种计算机程序产品,其中,所述计算机程序产品包括计算机程序,所述计算机程序可操作来使得计算机执行本申请实施例第一方面中所描述的部分或全部步骤。所述计算机程序产品可以为一个软件安装包。
[0018] 可以看出,本申请实施例所描绘的一种用户界面卡顿检测方法与装置,通过获取目标应用程序的当前用户界面的绘制请求,并根据绘制请求来创建绘制当前用户界面所需的目标图层和缓存区队列,最后通过缓存区队列中可用于存储目标图层绘制当前用户界面的图形数据的图形缓存区的数量来判断当前用户界面是否发生或即将发生卡顿情况。由于在系统绘制任务中对缓存区队列中的图形缓存区的数量进行检测,通过与预设阈值的比较情况来及时调度绘制任务,从而实现用户界面卡顿检测操作,有利于保证应用程序的运行和显示界面的流畅性。

附图说明

[0019] 为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。显而易见地,下面描述的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0020] 图1是本申请实施例提供的一种电子设备的结构示意图;
[0021] 图2是本申请实施例提供的一种用户界面卡顿检测方法的流程示意图;
[0022] 图3是本申请实施例提供的一种缓存区队列中的图形缓存区的状态迁移的示意图;
[0023] 图4是本申请实施例提供的又一种用户界面卡顿检测方法的流程示意图;
[0024] 图5是本申请实施例提供的一种用户界面卡顿检测装置的功能单元组成框图;
[0025] 图6是本申请实施例提供的又一种电子设备的结构示意图。

具体实施方式

[0026] 为了使本技术领域的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0027] 本申请的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、软件、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其他步骤或单元。
[0028] 在本文中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域技术人员显式地和隐式地理解的是,本文所描述的实施例可以与其它实施例相结合。下面结合附图,对本申请实施例进行详细介绍。
[0029] 在对本申请实施例提供的用户界面卡顿检测方法详细介绍之前,先对本申请实施例涉及的电子设备进行介绍。
[0030] 具体的,本申请的电子设备可以是具有用户界面卡顿检测功能的电子设备,也可以包括各种具有用户界面卡顿检测功能的手持设备、车载设备、可穿戴设备、计算设备或其他处理设备,以及各种形式的智能终端设备、物联网终端设备、掌上电脑(Personal Digital Assistant, PDA)、个人计算机(Personal Computer, PC)等。
[0031] 下面对电子设备可能的结构示例进行介绍,请参阅图1。图1是本申请实施例提供的一种电子设备的结构示意图。电子设备100可以包括处理器110、通信模块120、电源模块130、存储器140。处理器110以对应的总线形式连接和控制通信模块120、电源模块130、存储器140。其中,处理器110是电子设备100的控制中心,并通过各种接口和线路连接电子设备
100的各个部分。此外,处理器110通过运行或执行存储器140内的软体程序和/或模块,调用存储器内的存储数据,以执行电子设备100的各种功能和处理数据,并监控电子设备100的整体运行。可选的,处理器110可以包括中央处理器(Central Processing Unit, CPU)、数字信号处理器(Digital Signal Processor, DSP)、专用集成电路(Application‑Specific Integrated Circuit, ASIC)和现场可编程门阵列(Field Programmable Gate Array, FPGA)等。通信模块120可以实现第二代2G移动通信技术网络、第三代3G移动通信技术网络、第四代4G移动通信技术网络和第五代5G移动通信技术网络等功能以执行无线移动网络数据的接收与发送,以及可以提供2.4GHz和5GHz的信道频谱资源以执行网络数据的接收与发送。电源模块130可以包括电源管理芯片,并可以为电子设备100提供电能变换、分配、检测等管理功能。存储器140可以用于存储软体程序和/或模块,并且可以包括存储程序区和存储数据区。其中,存储程序区可存储操作系统或者至少一个功能所需的软体程序等,并且该至少一个功能所需的软件程序可以用于执行用户界面卡顿检测功能。
[0032] 电子设备100上往往运行有各种应用程序,例如游戏类应用程序、社交媒体类应用程序、流媒体类应用程序和系统开发类应用程序等。当应用程序存在刷新用户界面的显示内容或者旋转用户界面等操作时,应用程序将产生绘制当前用户界面的申请和图形数据。如果系统无法及时进行绘制任务的调度,也会导致应用程序的界面显示或界面旋转等操作在运行过程中出现不流畅等卡顿情况。
[0033] 针对上述存在的问题,下面将从方法示例的角度介绍用户界面卡顿检测方法的执行步骤,请参阅图2。图2是本申请实施例提供的一种用户界面卡顿检测方法的流程示意图,该方法包括:
[0034] 步骤210、获取目标应用程序的当前用户界面的绘制请求。
[0035] 需要说明的是,当目标应用程序需要在前台刷新用户界面的显示内容时,也就是说目标应用程序的当前用户界面为需要刷新后显示的用户界面,此时后台产生绘制当前用户界面的绘制请求。或者,当目标应用程序需要在前台旋转用户界面时,也就是说目标应用程序的当前用户界面为需要旋转后显示的用户界面,并且当前用户界面的大小和位置等信息与前个用户界面的大小和位置等信息不同,此时后台会产生绘制当前用户界面的绘制请求。
[0036] 具体的,目标应用程序发送当前用户界面的绘制请求给系统端,而系统端接收到绘制请求后通知界面投递者(SurfaceFlinger)。其中,系统端可以为安卓(Android)系统、iOS系统、Windows系统、塞班(Symbian)系统、DOS系统、UNIX系统和LINUX系统等。
[0037] 具体的,绘制请求可以包括当前用户界面的窗口信息和绘制内容。其中,窗口信息可以包括当前用户界面的大小、位置、格式、透明度等信息,而绘制内容可以包括当前用户界面需要显示的文字等内容信息。
[0038] 具体的,在绘制目标应用程序的当前用户界面时,目标应用程序需要向SurfaceFlinger申请界面(Surface)。首先,目标应用程序需要通过界面绘制客户(ISurfaceComposerClient)接口来访问创建界面(createSurface)函数,并通过该接口将目标应用程序的请求传送到SurfaceFlinger的消息队列中,而不是直接调用SurfaceFlinger来处理。这是因为,一个系统中需要SurfaceFlinger处理来自各个应用程序的多个消息,除非一些紧急情况,否则需要排队等待响应。此外,由于目标应用程序和SurfaceFlinger工作中不同的进程中,因此SurfaceFlinger为目标应用程序创建一个客户(Client)对象来处理应用程序的绑定(binder)请求,同时返回Client的binder代理对象给目标应用程序,这样目标应用程序就可以通过该binder代理对象来请求SurfaceFlinger创建Surface。
[0039] 步骤220、根据绘制请求创建目标图层和目标图层对应的缓存区队列,[0040] 其中,目标图层用于绘制当前用户界面,缓存区队列用于管理缓存区队列中的图形缓存区。
[0041] 具体的,当目标应用程序的当前用户界面向SurfaceFlinger请求创建Surface时,会在SurfaceFlinger的进程中创建一个目标图层(Layer)对象,同时也会为目标Layer创建一个对应的缓存区队列(BufferQueue)。其中,目标Layer提供绘制当前用户界面的控制信息操作,以及当前用户界面的内容处理操作。例如,目标Layer可以调用开放式图形库(Open Graphics Library, OpenGL)或者2D向量图形处理函数库(Skia)来进行绘制操作。也就是说,SurfaceFlinger只是控制何时应该进行绘制操作,而所有实际的绘制都是在目标Layer中进行的。可以理解的是,创建一个Surface就是创建一个Layer。
[0042] 具体的,缓存区队列中的每个缓存区包括以下四种状态:空闲(FREE)状态、出列(DEQUEUE)状态、入队(QUEUE)状态和获取(ACQUIRED)状态。请参阅图3,图3表示缓存区队列中的一个图形缓存区的各个状态、引起状态迁移的条件以及各状态下对参与图形缓存区的对象。其中,参与对图形缓存区进行管理的对象有:
[0043] 缓存区队列:可以认为缓存区队列是一个服务中心,并且管理缓存区队列中的图形缓存区。也就是说,当应用程序需要获取一个图形缓存区时,应用程序需要向缓存区队列进行申请。
[0044] 应用程序:由于应用程序需要不断地刷新用户界面或者旋转用户界面,从而将产生的图形数据写入到图形缓存区中。当应用程序需要使用一个图形缓存区时,应用程序需要向缓存区队列发起出列操作,才能对指定的图形缓存区进行操作。然后,应用程序向该图形缓存区写入完成后,需要调用缓存区队列的入列操作,将该图形缓存区添加到缓存区队列中。可以理解的是,应用程序在刷新、旋转用户界面时,需要向图形缓存区写入绘制内容,而对图形缓存区的操作是一个“主动”的过程。
[0045] SurfaceFlinger:SurfaceFlinger对图形缓存区的操作同样受到缓存区队列的管控。当缓存区队列中存在已经写入完成的图形缓存区时,缓存区队列会通知SurfaceFlinger来获取该已经写入完成的图形缓存区。然后,SurfaceFlinger会根据该已经写入完成的图形缓存区中的图形数据来执行相应的绘制操作。可以理解的是,SurfaceFlinger对图形缓存区的处理是“被动”和“等待式”的,需要等到一个图形缓存区写入完成后才能进行相应操作。
[0046] 步骤230、获取缓存区队列中的第一图形缓存区的数量,第一图形缓存区用于存储目标图层绘制当前用户界面的图形数据。
[0047] 在一个可能的示例中,在获取缓存区队列中的第一图形缓存区的数量之前,该方法还可以包括以下操作:从缓存区队列中确定第一图形缓存区;将绘制当前用户界面的图形数据写入到第一图形缓存区。可以理解的是,从缓存区队列中的每个图形缓存区中选出能够用于存储目标Layer绘制当前用户界面的图形数据的一个或多个图形缓存区。
[0048] 由于队列缓存区中的每个图形缓存区具有四种不同的状态,因此考虑通过图形缓存区的当前状态来选择第一图形缓存区。
[0049] 在一个可能的示例中,从缓存区队列中确定第一图形缓存区可以包括以下操作:依次轮询缓存区队列中的每个图形缓存区的状态信息;将每个图形缓存区的状态信息为空闲状态的图形缓存区确定为第一图形缓存区。可以理解的是,从缓存区队列中查找状态信息为空闲状态的图形缓存区。需要说明的是,第一图形缓存区可以为一个或多个空闲状态的图形缓存区。
[0050] 具体的,每个图形缓存区的状态信息为上述四种状态(空闲状态、出列状态、入队状态和获取状态)中的一种。其中,当图形缓存区的状态信息为空闲状态时,该图形缓存区为当前可用,也就是说应用程序可以出列操作该图形缓存区以用于存储图形数据。此时,该图形缓存区的持有对象可以认为是缓存区队列。当图形缓存区的状态信息为出列状态时,应用程序已经出列操作该图形缓存区以用于存储图形数据。此时,该图形缓存区的持有对象可以认为是应用程序,也就是说缓存区队列不可以对该图形缓存区进行操作。当图形缓存区的状态信息为入队状态时,应用程序已经向该图形缓存区写入完成图形数据,可以对该图形缓存区进行获取操作,而无法再对该图形缓存区进行出列操作。此时,该图形缓存区的持有对象可以认为是缓存区队列。当图形缓存区的状态信息为获取状态时,SurfaceFlinger已经获取该图形缓存区以用于后续的绘制、渲染和显示等操作。在对该图形缓存区进行绘制、渲染和显示等操作之后可以释放该图形缓存区。在释放该图形缓存区之后,该图形缓存区的状态信息为空闲状态。可见,通过图形缓存区的当前状态为空闲状态来选择第一图形缓存区,以进一步实现用户界面卡顿检测操作。
[0051] 在一个可能的示例中,在绘制当前用户界面的图形数据写入到第一图形缓存区之后,该方法还包括:将第二图形缓存区添加到缓存区队列,第二图形缓存区为写入完成后的第一图形缓存区;在目标图层上,根据第二图形缓存区中的图形数据绘制当前用户界面。
[0052] 具体的,当目标应用程序需要绘制当前用户界面时,Surface会从缓存区队列中出列操作空闲状态的图形缓存区出来进行绘制,而最多可以处理操作两个空闲状态的图形缓存区。然后,该图形缓存区绘制完成后入列操作到缓存区队列中。最后,SurfaceFlinger可以从缓存区队列中通过获取操作来获取该图形缓存区进行Layer的合成渲染以显示到屏幕上。此外,缓存区队列还同时提供了一个消费者监听者(ConsumerListener)的类,该ConsumerListener的函数接口包括帧数据可用(onFrameAvailable)函数接口和缓存区释放(onBuffersReleased)函数接口。当缓存区队列中存在已经写入完成的图形缓存区时,缓存区队列就会调用onFrameAvailable来通知SurfaceFlinger来绘制该图形缓存区。当SurfaceFlinger已经绘制完成图形缓存区中的图形数据,并释放该图形缓存区时,缓存区队列就会调用onBuffersReleased来通知SurfaceFlinger已经成功释放该图形缓存区。
[0053] 步骤240、根据第一图形缓存区的数量和预设阈值确定当前用户界面的卡顿情况。
[0054] 需要说明的是,当目标应用程序需要在前台刷新用户界面的显示内容时,如果缓存区队列中没有相应数量的第一图形缓存区来存储绘制当前用户界面的图形数据,那么SurfaceFlinger将无法获取需要绘制的当前用户界面的图形数据,导致无法在屏幕中显示。此时,屏幕中仍然显示上一次用户界面的内容,出现屏幕卡顿的现象。同样,当目标应用程序需要在前台旋转用户界面时,如果缓存区队列中没有相应数量的第一图形缓存区来存储绘制当前用户界面的图形数据,那么SurfaceFlinger将无法获取需要绘制的图形数据,导致无法在屏幕中显示,出现屏幕卡顿的现象。
[0055] 在一个可能的示例中,根据第一图形缓存区的数量和预设阈值确定当前用户界面的卡顿情况可以包括以下操作:在第一图形缓存区的数量小于预设阈值的情况下,根据目标图层的存在情况确定当前用户界面的卡顿情况;或者,在第一图形缓存区的数量大于预设阈值的情况下,确定当前用户界面没有发生卡顿。
[0056] 可以理解的是,如果缓存区队列中处于空闲状态的图形缓存区的数量大于预设阈值,那么就可以从缓存区队列中出列操作空闲状态的图形缓存区用于存储绘制当前用户界面的图形数据,SurfaceFlinger也能获取需要绘制的当前用户界面的图形数据,以便在屏幕中显示。由于Layer提供绘制当前用户界面的控制信息操作,以及当前用户界面的内容处理操作,如果缓存区队列中处于空闲状态的图形缓存区的数量小于预设阈值,还需要判断绘制当前用户界面创建的目标Layer是否存在来检查用户界面的卡顿情况。例如,如果空闲状态的图形缓存区的数量为0时,那么判断Layer是否存在来检查卡顿情况。
[0057] 在一个可能的示例中,根据目标图层的存在情况确定当前用户界面的卡顿情况可以包括以下操作:通知SurfaceFlinger查询目标图层是否存在;在目标图层存在的情况下,确定当前用户界面发生卡顿。
[0058] 可以理解的是,当缓存区队列中没有足够的空闲状态的图形缓存区时,缓存区队列需要通知SurfaceFlinger,然后SurfaceFlinger查询目标图层是否仍然存在。如果目标Layer存在,就可以检测到用户界面即将产生卡顿或者已经产生卡顿,有利于实现在绘制用户界面时的卡顿检测操作。
[0059] 在一个可能的示例中,在确定当前用户界面发生卡顿之后,该方法还包括以下操作:调用电子设备的系统提频接口;通过系统提频接口执行中央处理器和/或图形处理器的提频操作。
[0060] 可以理解的是,在检测到用户界面即将产生卡顿或者已经产生卡顿的情况下,SurfaceFlinger会通知系统端需要加快用户界面的绘制。此时,系统端调用系统提频接口,通过系统提频接口提高CPU/GPU的工作频率,将处于获取状态的图形缓存区尽快释放以保证有足够的空闲状态的图形缓存区用于后续的图形数据的存储。可见,通过对检测到有可能出现卡顿或者即将卡顿时,采取调整CPU/GPU的工作频率来预防和缓解卡顿情况,有利于提升用户的操作体验。
[0061] 可以看出,本申请实施例所描绘的一种用户界面卡顿检测方法,通过获取目标应用程序的当前用户界面的绘制请求,并根据绘制请求来创建绘制当前用户界面所需的目标图层和缓存区队列,最后通过缓存区队列中可用于存储目标图层绘制当前用户界面的图形数据的图形缓存区的数量来判断当前用户界面是否发生或即将发生卡顿情况。由于在系统绘制任务中对缓存区队列中的图形缓存区的数量进行检测,通过与预设阈值的比较情况来及时调度绘制任务,从而实现用户界面卡顿检测操作,有利于保证应用程序的运行和显示界面的流畅性。
[0062] 与上述图2所述的实施例一致,请参阅图4,图4是本申请实施例提供的另一种用户界面卡顿检测方法的流程示意图。该方法包括:
[0063] 步骤410、获取目标应用程序的当前用户界面的绘制请求。
[0064] 具体的,绘制请求可以包括当前用户界面的窗口信息和绘制内容。其中,窗口信息可以包括当前用户界面的大小、位置、格式、透明度等信息,而绘制内容可以包括当前用户界面需要显示的文字等内容信息。
[0065] 步骤420、根据绘制请求创建目标图层和目标图层对应的缓存区队列。
[0066] 其中,目标图层用于绘制当前用户界面,缓存区队列用于管理缓存区队列中的图形缓存区。
[0067] 步骤430、获取缓存区队列中的第一图形缓存区的数量,第一图形缓存区用于存储目标图层绘制当前用户界面的图形数据。
[0068] 在一个可能的示例中,在获取缓存区队列中的第一图形缓存区的数量之前,该方法还可以包括以下操作:从缓存区队列中确定第一图形缓存区;将绘制当前用户界面的图形数据写入到第一图形缓存区。可以理解的是,从缓存区队列中的每个图形缓存区中选出能够用于存储目标Layer绘制当前用户界面的图形数据的一个或多个图形缓存区。
[0069] 由于队列缓存区中的每个图形缓存区具有四种不同的状态,因此考虑通过图形缓存区的当前状态来选择第一图形缓存区。
[0070] 在一个可能的示例中,从缓存区队列中确定第一图形缓存区可以包括以下操作:依次轮询缓存区队列中的每个图形缓存区的状态信息;将每个图形缓存区的状态信息为空闲状态的图形缓存区确定为第一图形缓存区。可以理解的是,从缓存区队列中查找状态信息为空闲状态的图形缓存区。需要说明的是,第一图形缓存区可以为一个或多个空闲状态的图形缓存区。
[0071] 在一个可能的示例中,在绘制当前用户界面的图形数据写入到第一图形缓存区之后,该方法还包括:将第二图形缓存区添加到缓存区队列,第二图形缓存区为写入完成后的第一图形缓存区;在目标图层上,根据第二图形缓存区中的图形数据绘制当前用户界面。
[0072] 步骤440、在所述第一图形缓存区的数量小于预设阈值的情况下,通知界面投递者查询所述目标图层是否存在。
[0073] 可以理解的是,由于Layer提供绘制当前用户界面的控制信息操作,以及当前用户界面的内容处理操作,如果缓存区队列中处于空闲状态的图形缓存区的数量小于预设阈值,还需要判断绘制当前用户界面创建的目标Layer是否存在来检查用户界面的卡顿情况。
[0074] 步骤450、在目标图层存在的情况下,确定当前用户界面发生卡顿。
[0075] 可以理解的是,当缓存区队列中没有足够的空闲状态的图形缓存区时,缓存区队列需要通知SurfaceFlinger,然后SurfaceFlinger查询目标图层是否仍然存在。如果目标Layer存在,就可以检测到用户界面即将产生卡顿或者已经产生卡顿,有利于实现在绘制用户界面时的卡顿检测操作。
[0076] 步骤460、通过系统提频接口执行中央处理器和/或图形处理器的提频操作。
[0077] 可以理解的是,在检测到用户界面即将产生卡顿或者已经产生卡顿的情况下,SurfaceFlinger会通知系统端需要加快用户界面的绘制。此时,系统端调用系统提频接口,通过系统提频接口提高CPU/GPU的工作频率,将处于获取状态的图形缓存区尽快释放以保证有足够的空闲状态的图形缓存区用于后续的图形数据的存储。可见,通过对检测到有可能出现卡顿或者即将卡顿时,采取调整CPU/GPU的工作频率来预防和缓解卡顿情况,有利于提升用户的操作体验。
[0078] 可以看出,在本申请实施例所描绘的一种用户界面卡顿检测方法中,首先,通过获取目标应用程序的当前用户界面的绘制请求,并根据绘制请求来创建绘制当前用户界面所需的目标图层和缓存区队列。然后,通过缓存区队列中可用于存储目标图层绘制当前用户界面的图形数据的图形缓存区的数量是否小于预设阈值来判断当前用户界面是否发生或即将发生卡顿情况。最后,在数量小于预设阈值和目标图层仍然存在的情况下,采取调整CPU/GPU的工作频率来预防和缓解应用程序的运行和显示界面的卡顿。由于通过对图形缓存区的数量的动态检测,可以检测到即将产生卡顿或者已经产生卡顿的场景,并采用一些调整CPU/GPU的方式预防或缓解这类情况,从而实现用户界面卡顿检测操作,有利于保证应用程序的运行和显示界面的流畅性,以及提升用户的操作体验。
[0079] 上述主要从方法侧执行过程的角度对本申请实施例的方案进行了介绍。可以理解的是,电子设备为了实现上述功能,其包含了执行各个功能相应的硬件结构和/或软件模块。本领域技术人员应该很容易意识到,结合本文中所提供的实施例描述的各示例的单元及算法步骤,本申请能够以硬件或硬件和计算机软件的结合形式来实现。某个功能究竟以硬件还是计算机软件驱动硬件的方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
[0080] 本申请实施例可以根据上述方法示例对电子设备进行功能单元的划分,例如,可以对应各个功能划分各个功能单元,也可以将两个或两个以上的功能集成在一个处理单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。需要说明的是,本申请实施例中对单元的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0081] 在采用集成的单元的情况下,图5示出了一种用户界面卡顿检测装置的功能单元组成框图。用户界面卡顿检测装置500应用于电子设备,具体包括:处理单元520和通信单元530。处理单元520用于对电子设备的动作进行控制管理,例如,处理单元520用于支持电子设备执行图2中的部分或全部步骤,以及用于本文所描述的技术的其它过程。通信单元530用于支持电子设备与其他设备的通信。电子设备还可以包括存储单元510,用于存储终端的程序代码和数据。
[0082] 其中,处理单元520可以是处理器或控制器,例如可以是CPU、通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、晶体管逻辑器件、硬件部件或者其任意组合。其可以实现或执行结合本申请公开内容所描述的各种示例性的逻辑方框、模块和电路。处理单元520也可以是实现计算功能的组合,例如包含一个或多个微处理器组合、DSP和微处理器的组合等。通信单元530可以是通信接口、收发器、收发电路等,存储单元510可以是存储器。当处理单元520为处理器,通信单元530为通信接口,存储单元510为存储器时,本申请实施例所涉及的用户界面卡顿检测装置500可以为图6所示的电子设备。
[0083] 具体实现时,处理单元520用于执行如上述方法实施例中由电子设备执行的任一步骤,且在执行诸如发送等数据传输时,可选择的调用通信单元530来完成相应操作。下面进行详细说明。
[0084] 处理单元520用于:获取目标应用程序的当前用户界面的绘制请求;根据绘制请求创建目标图层和所述目标图层对应的缓存区队列,目标图层用于绘制当前用户界面,缓存区队列用于管理缓存区队列中的图形缓存区;获取缓存区队列中的第一图形缓存区的数量,第一图形缓存区用于存储目标图层绘制当前用户界面的图形数据;根据第一图形缓存区的数量和预设阈值确定当前用户界面的卡顿情况。
[0085] 可以看出,本申请实施例所描绘的一种用户界面卡顿检测装置,通过获取目标应用程序的当前用户界面的绘制请求,并根据绘制请求来创建绘制当前用户界面所需的目标图层和缓存区队列,最后通过缓存区队列中可用于存储目标图层绘制当前用户界面的图形数据的图形缓存区的数量来判断当前用户界面是否发生或即将发生卡顿情况。由于在系统绘制任务中对缓存区队列中的图形缓存区的数量进行检测,通过与预设阈值的比较情况来及时调度绘制任务,从而实现用户界面卡顿检测操作,有利于保证应用程序的运行和显示界面的流畅性。
[0086] 在一个可能的示例中,在获取所述缓存区队列中的第一图形缓存区的数量之前,处理单元520还用于:从缓存区队列中确定第一图形缓存区;将绘制当前用户界面的图形数据写入到第一图形缓存区。
[0087] 在一个可能的示例中,在从缓存区队列中确定所述第一图形缓存区方面,处理单元520用于:依次轮询缓存区队列中的每个图形缓存区的状态信息;将每个图形缓存区的状态信息为空闲状态的图形缓存区确定为第一图形缓存区。
[0088] 在一个可能的示例中,在将绘制所述当前用户界面的图形数据填充到第一图形缓存区之后,处理单元520还用于:将第二图形缓存区添加到缓存区队列,第二图形缓存区为写入完成后的第一图形缓存区;在目标图层上,根据第二图形缓存区中的图形数据绘制当前用户界面。
[0089] 在一个可能的示例中,在根据第一图形缓存区的数量和预设阈值确定当前用户界面的卡顿情况方面,处理单元520用于:在第一图形缓存区的数量小于预设阈值的情况下,根据目标图层的存在情况确定当前用户界面的卡顿情况;或者,在第一图形缓存区的数量大于预设阈值的情况下,确定当前用户界面没有发生卡顿。
[0090] 在一个可能的示例中,在根据目标图层的存在情况确定当前用户界面的卡顿情况方面,处理单元520用于:通知界面投递者SurfaceFlinger查询目标图层是否存在;在目标图层存在的情况下,确定当前用户界面发生卡顿。
[0091] 在一个可能的示例中,在确定当前用户界面发生卡顿之后,处理单元520还用于:调用电子设备的系统提频接口;通过系统提频接口执行中央处理器和/或图形处理器的提频操作。
[0092] 下面介绍本申请实施例提供的又一种电子设备600的结构示意图,如图6所示。其中,电子设备600包括处理器610、存储器620、通信接口630和至少一个用于连接处理器610、存储器620、通信接口630的通信总线。
[0093] 处理器610可以是一个或多个中央处理器CPU。在处理器610是一个CPU的情况下,该CPU可以是单核CPU,也可以是多核CPU。存储器620包括但不限于是随机存储记忆体(Random Access Memory, RAM)、只读存储器(Read‑Only Memory, ROM)、可擦除可编程只读存储器(Erasable Programmable Read Only Memory, EPROM)或便携式只读存储器(Compact Disc Read‑Only Memory, CD‑ROM),并且存储器620用于相关指令及数据。通信接口630用于接收和发送数据。
[0094] 电子设备600中的处理器610用于读取存储器620中存储的一个或多个程序代码621用于执行以下操作:获取目标应用程序的当前用户界面的绘制请求;根据绘制请求创建目标图层和所述目标图层对应的缓存区队列,目标图层用于绘制当前用户界面,缓存区队列用于管理缓存区队列中的图形缓存区;获取缓存区队列中的第一图形缓存区的数量,第一图形缓存区用于存储目标图层绘制当前用户界面的图形数据;根据第一图形缓存区的数量和预设阈值确定当前用户界面的卡顿情况。
[0095] 可以看出,通过获取目标应用程序的当前用户界面的绘制请求,并根据绘制请求来创建绘制当前用户界面所需的目标图层和缓存区队列,最后通过缓存区队列中可用于存储目标图层绘制当前用户界面的图形数据的图形缓存区的数量来判断当前用户界面是否发生或即将发生卡顿情况。由于在系统绘制任务中对缓存区队列中的图形缓存区的数量进行检测,通过与预设阈值的比较情况来及时调度绘制任务,从而实现用户界面卡顿检测操作,有利于保证应用程序的运行和显示界面的流畅性。
[0096] 在一个可能的示例中,在获取所述缓存区队列中的第一图形缓存区的数量之前,一个或多个程序代码621还用于执行以下操作:从缓存区队列中确定第一图形缓存区;将绘制当前用户界面的图形数据写入到第一图形缓存区。
[0097] 在一个可能的示例中,在从缓存区队列中确定所述第一图形缓存区方面,一个或多个程序代码621用于执行以下操作:依次轮询缓存区队列中的每个图形缓存区的状态信息;将每个图形缓存区的状态信息为空闲状态的图形缓存区确定为第一图形缓存区。
[0098] 在一个可能的示例中,在将绘制所述当前用户界面的图形数据填充到第一图形缓存区之后,一个或多个程序代码621还用于执行以下操作:将第二图形缓存区添加到缓存区队列,第二图形缓存区为写入完成后的第一图形缓存区;在目标图层上,根据第二图形缓存区中的图形数据绘制当前用户界面。
[0099] 在一个可能的示例中,在根据第一图形缓存区的数量和预设阈值确定当前用户界面的卡顿情况方面,一个或多个程序代码621用于执行以下操作:在第一图形缓存区的数量小于预设阈值的情况下,根据目标图层的存在情况确定当前用户界面的卡顿情况;或者,在第一图形缓存区的数量大于预设阈值的情况下,确定当前用户界面没有发生卡顿。
[0100] 在一个可能的示例中,在根据目标图层的存在情况确定当前用户界面的卡顿情况方面,一个或多个程序代码621用于执行以下操作:通知界面投递者SurfaceFlinger查询目标图层是否存在;在目标图层存在的情况下,确定当前用户界面发生卡顿。
[0101] 在一个可能的示例中,在确定当前用户界面发生卡顿之后,一个或多个程序代码621还用于执行以下操作:调用电子设备的系统提频接口;通过系统提频接口执行中央处理器和/或图形处理器的提频操作。
[0102] 本申请实施例还提供一种计算机可读存储介质,其中,该计算机可读存储介质存储用于电子数据交换的计算机程序,该计算机程序可操作来使得计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。
[0103] 本申请实施例还提供一种计算机程序产品,其中,该计算机程序产品包括计算机程序,该计算机程序可操作来使计算机执行如上述方法实施例中记载的任一方法的部分或全部步骤。该计算机程序产品可以为一个软件安装包。
[0104] 需要说明的是,对于上述的各方法实施例,为了简单描述,将其都表述为一系列的动作组合。本领域技术人员应该知悉,本申请不受所描述的动作顺序的限制,因为本申请实施例中的某些步骤可以采用其他顺序或者同时进行。此外,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请实施例所必须的。
[0105] 在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
[0106] 在本申请所提供的几个实施例中,本领域技术人员应该知悉,所描述的装置可以通过其它的方式实现。可以理解的是,上述描述的装置实施例仅仅是示意性的。例如,上述单元的划分只是一种逻辑功能划分,实际中可以有另外的划分方式。也就是说,多个单元或组件可以结合或集成到另一个软件,以及一些特征可以忽略或不执行。此外,所显示或讨论的相互之间的耦合、直接耦合或通信连接等方式可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电性或其它的形式。
[0107] 上述作为分离部件说明的单元可以是物理上分开的,也可以不是。此外,上述作为单元显示的部件可以是物理单元,也可以不是,即可以位于一个网络单元上,也可以分布到多个网络单元上。因此,上述各个实施例可以根据实际的需要选择其中的部分或者全部单元来实现。
[0108] 另外,上述各个实施例中的各个功能单元可以集成在一个处理单元中,也可以存在不同的物理单元中,也可以两个或两个以上的功能单元集成在一个物理单元中。上述单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0109] 上述单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储器中。可以理解的是,本申请的技术方案(该技术方案对现有技术做出贡献的部分或者该技术方案的全部或部分)可以通过计算机软件产品的形式体现。该计算机软件产品存储在一个存储器中,包括若干指令用以使得计算机设备(个人计算机、服务器或者网络设备等)执行本申请实施例的全部或部分步骤。此外,上述存储器包括U盘、ROM、RAM、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
[0110] 本领域技术人员应该知悉,本申请实施例的全部或部分步骤可以通过程序来指令相关的硬件来完成,该程序可以存储于存储器中,该存储器可以包括闪存盘、ROM、RAM、磁盘或光盘等。
[0111] 以上对本申请实施例进行了详细介绍,本申请实施例中的说明只是用于帮助理解本申请的方法及其核心思想。本领域技术人员应该知悉,本申请实施例在具体实施方式和应用范围上均会有改变之处,至此,本说明书内容不应理解为对本申请的限制。