一种用户界面过度绘制的检测方法和装置与流程

文档序号:22083304发布日期:2020-09-01 19:43阅读:140来源:国知局
一种用户界面过度绘制的检测方法和装置与流程

本发明涉及应用程序检测技术领域,特别涉及一种用户界面过度绘制的检测方法和装置。



背景技术:

操作系统,例如安卓系统的应用程序(application,app)中常常会存在用户界面(userinterface,ui)的过度绘制。过度绘制是指屏幕上的某个像素区域在同一帧内被绘制了多次。手机为了保持视觉的流畅度,其屏幕刷新频率通常设为60hz,即在1000/60=16.67ms内更新一帧,过度绘制因为浪费了大量的cpu以及gpu资源,使得有时ui无法在设定频率内更新到下一帧而发生掉帧,造成ui卡顿。

现有技术中,安卓系统提供了用户界面过度绘制的检测工具,在手机的开发者模式中,打开“调试gpu过度绘制”,选择其中的“显示gpu过度绘制区域”,开启后系统会在不同渲染复杂度的元素上渲染上不同的颜色,具体是:一层过度绘制的显示为蓝色,二层过度绘制的显示为绿色,三层过度绘制的显示为淡红色,四层过度绘制的显示为深红色。然后开发者可以对手机屏幕做截图,并对截图做分析,肉眼查看截图中渲染为红色的区域的面积大小及红色的渲染程度,判断过度绘制的程度,决定是否需要调整原代码。

上述技术方案通过人工肉眼观察的方法来判断费时费力,且人工主观判断容易出现错误,尤其是在检测人员视觉疲惫的情况下。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种用户界面过度绘制的检测方法和装置。

第一方面,本发明实施例提供一种用户界面过度绘制的检测方法,包括:

获取在用户界面刷新过程中渲染出的顶层视图的图片数据,所述图片数据是根据所述顶层视图的绘制层级渲染得到的;

根据所述图片数据中像素点的颜色判断像素点是否被过度绘制;

确定所述图片数据中过度绘制的像素点的个数与总像素点个数的比例,判断所述比例是否大于预设的比例阈值;

若是,确定所述用户界面过度绘制。

在一些可选的实施例中,根据所述图片数据中像素点的颜色判断像素点是否被过度绘制,包括:

将像素点颜色的rgb值转换成hsi值;

判断所述hsi值的h分量值是否大于等于预设的h分量最小阈值,且小于等于预设的h分量最大阈值;

若是,确定所述像素点被过度绘制。

在一些可选的实施例中,获取在用户界面刷新过程中渲染出的顶层视图的图片数据,包括:

通过预先插入的探针获取在用户界面刷新过程中渲染出的用户界面顶层视图的图片数据,所述探针为用于获取所述图片数据的执行代码。

在一些可选的实施例中,所述探针通过下述方式预先插入:

在对应用程序的源码编译过程中,遍历所述源码搜索出所有的activity的子类,每个所述子类对应一个用户界面;

在所述子类的顶层视图源码的刷新方法部分插入探针。

在一些可选的实施例中,在所述子类的顶层视图源码的刷新方法部分插入探针前,还包括:

获取所述子类的顶层视图的标识;

若获取失败,按照设定的规则在所述源码中设置所述顶层视图的标识,再执行所述在所述子类的顶层视图源码的刷新方法部分插入探针;

若获取成功,查找预先建立的免检视图列表中是否有所述顶层视图的标识;若否,再执行所述在所述子类的顶层视图源码的刷新方法部分插入探针。

在一些可选的实施例中,获取所述子类的顶层视图的标识,包括:

在所述子类的onstart方法源码中获取所述子类的顶层视图的标识。

在一些可选的实施例中,在对应用程序的源码编译过程中,还包括:

根据所述顶层视图的像素点的rgb值确定像素点的hsi值;

判断所述hsi值的h分量值是否大于等于所述预设的h分量最小阈值,且小于等于所述预设的h分量最大阈值;

若是,修改所述像素点的rgb值,使得修改后的rgb值对应的h分量值大于所述预设的h分量最大阈值或小于所述预设的h分量最小阈值。

在一些可选的实施例中,确定所述用户界面过度绘制后,还包括:

记录所述用户界面的顶层视图的下述信息:

所述顶层视图的标识,所述顶层视图中被过度绘制的像素点的h分量,所述顶层视图中过度绘制的像素点的个数,和所述顶层视图中过度绘制的像素点的个数与总像素点个数的比例。

第二方面,本发明实施例提供一种用户界面过度绘制的检测装置,包括:

获取模块,用于获取在用户界面刷新过程中渲染出的顶层视图的图片数据,所述图片数据是根据所述顶层视图的绘制层级渲染得到的;

第一判断模块,用于根据所述获取模块获取的所述图片数据中像素点的颜色判断像素点是否被过度绘制;

第一确定模块,用于确定所述第一判断模块判断的图片数据中过度绘制的像素点的个数与总像素点个数的比例;

第二判断模块,用于判断所述第一确定模块确定的比例是否大于预设的比例阈值;

第二确定模块,用于当所述第二判断模块判断为是时,确定所述用户界面过度绘制。

第三方面,本发明实施例提供一种计算机可读存储介质,其上存储有计算机指令,当该指令被处理器执行时实现上述用户界面过度绘制的检测方法。

第四方面,本发明实施例提供一种服务器,包括:存储器、处理器及存储于存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现上述用户界面过度绘制的检测方法。

本发明实施例提供的上述技术方案的有益效果至少包括:

获取在用户界面刷新过程中渲染出的顶层视图的图片数据,图片数据是根据顶层视图的绘制层级渲染得到的;根据图片数据中像素点的颜色判断像素点是否被过度绘制;确定图片数据中过度绘制的像素点的个数与总像素点个数的比例,判断所述比例是否大于预设的比例阈值;若是,确定用户界面过度绘制。能够自动检测过度绘制,节省了人力成本,提高了检测效率和准确度;可以更好的帮助研发人员发现问题,最终提高应用的用户体验度。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

附图用来提供对本发明的进一步理解,并且构成说明书的一部分,与本发明的实施例一起用于解释本发明,并不构成对本发明的限制。在附图中:

图1为本发明实施例中所述用户界面过度绘制的检测方法的流程图;

图2为本发明实施例中所述探针预先插入方法的流程图;

图3为本发明实施例中所述用户界面过度绘制的检测装置的结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

为了解决现有技术中存在的通过系统渲染的截图人工检测过度绘制费时费力且易出错的问题,本发明实施例提供一种用户界面过度绘制的检测方法,能够自动检测过度绘制,节省了人力成本,提高了检测效率和准确度。

本发明实施例提供一种用户界面过度绘制的检测方法,其流程如图1所示,包括如下步骤:

步骤s11:获取在用户界面刷新过程中渲染出的顶层视图的图片数据。

其中,图片数据是根据顶层视图的绘制层级渲染得到的。

例如安卓系统,检测到安装完的应用程序后,根据相应的命令打开“开发者模式”中的“调试gpu过度绘制开关”(有的叫“显示gpu过度绘制)后,开始执行应用程序中每个用户界面打开和遍历的过程中,以一个用户界面为例,系统会在用户界面的刷新过程中,按照其顶层视图的渲染复杂度将顶层视图渲染上了不同的颜色,具体可以是:绘制层级为一级渲染成蓝色,绘制层级为二层渲染成绿色,绘制层级为三层渲染成淡红色,绘制层级为四层渲染成深红色。可选的,也可以选用其他的渲染方法。

其中,上述命令可以是通过获取用户输入或者点击的指令得到,也可以是从上位机计算脚本命令中获取。即打开“开发者模式”中的“调试gpu过度绘制开关”的操作可以是人工干预操作,也可以是系统自动执行,无需人工干预。

步骤s12:根据图片数据中像素点的颜色判断像素点是否被过度绘制。

在一个实施例中,可以是,获取到图片数据之后,保存图片数据到外地存储空间,例如可以是保存到手机的sd卡或者是外接u盘中。

不是在缓存中直接对图片数据进行判断,而是将图片数据保存到外地存储空间后再异步判断,这样节省了系统的内存和计算资源,保证了检测的顺利进行。

也可以是,将缓存中的图片数据进行处理得到缩略图数据,或是,将缓存中的图片数据进行处理得到缩略图数据后,再将缩略图数据保存到外地存储空间。对缩略图数据进行本步骤的判断。

将图片数据进行处理得到缩略图数据,根据缩略图进行用户界面是否过度绘制的判断,可以减少干扰因素,提高判断的准确度和速度。

因为图片数据中像素点的颜色代表了其被渲染的复杂度,即被过度绘制的程度,故像素点是否被过度绘制的判断,在一个实施例中,可以是,将像素点颜色的rgb值转换成hsi值;判断其hsi值的h分量值是否大于等于预设的h分量最小阈值,且小于等于预设的h分量最大阈值。当判断为否时,确定像素点没有被过度绘制;当判断为是时,确定像素点被过度绘制。

其中,rgb值,即red、green、blue值,代表红、绿、蓝三个通道的颜色;hsi值,h即hue,表示颜色的色调,s即saturation,表示颜色的饱和度,i即intensity,表示颜色的强度或亮度。

步骤s13:确定图片数据中过度绘制的像素点的个数与总像素点个数的比例。

步骤s14:判断图片数据中过度绘制的像素点的个数与总像素点个数的比例是否大于预设的比例阈值。

判断为是时,执行步骤s15;判断为否时,确定用户界面没有被过度绘制。

步骤s15:确定用户界面过度绘制。

本实施例上述用户界面过度绘制的检测方法,能够自动检测过度绘制,节省了人力成本,提高了检测效率和准确度;同时,可以更好的帮助研发人员发现问题,最终提高应用的用户体验度。

步骤s11中获取在用户界面刷新过程中渲染出的顶层视图的图片数据,可以是,通过预先插入的探针获取在用户界面刷新过程中渲染出的用户界面顶层视图的图片数据,探针为用于获取图片数据的执行代码。

参照图2所示,可以通过下述方式预先插入探针:

步骤s21:在对应用程序的源码编译过程中,遍历源码搜索出所有的activity的子类。

其中每个activity的子类对应一个用户界面。

搜索的方法可以是,根据每个子类的统一的后缀或者前缀名搜索;也可以是根据每个子类的共同的属性来搜索。

步骤s22:获取子类的顶层视图的标识。

在一个实施例中,可以是,在子类的onstart方法源码中获取子类的顶层视图的标识。

在一个activity的生命周期中,onstart方法只会被调用一次,onresume方法可能会被调用多次,故,在子类的onstart方法中获取子类的顶层视图的标识,而不是在onresume方法中获得,可以避免顶层视图标识的多次重复获取,减少了系统的计算量,同时提高了检测速度。

若获取子类的顶层视图的标识失败,即所述子类的顶层视图没有标识,执行步骤s23;若获取子类的顶层视图的标识成功,执行步骤s25。

步骤s23:按照设定的规则在源码中设置顶层视图的标识。

对于没有标识的顶层视图,按照设定的规则填加顶层视图的标识。保证了最终可以获知检测绘制层级的每一个顶层视图具体是哪一个顶层视图,保证研发人员想要修改源码时可以快速方便地找到具体的顶层视图在源码中的位置并进行修改。

步骤s24:在顶层视图源码的刷新方法部分插入探针。

在顶层视图的刷新方法中,具体是在顶层视图源码的刷新方法部分插入探针,安卓系统中即是在源码的onresume方法源码中插入探针。

在对应用程序编译的过程中,动态修改应用程序的源码,插入探针,在应用程序中的的用户界面运行过程中,具体在每个用户界面的顶层视图的onresume过程中,探针可以获取渲染后的图片数据。

步骤s25:查找预先建立的免检视图列表中是否有顶层视图的标识。

若否,执行步骤s24。

若是,说明顶层视图,即顶层视图对应的用户界面免检,忽略该用户界面的检测,不用在其onresume方法源码中插入探针,也不用进行绘制层级的检测,节省了监测的计算量,提高了监测的速度。

通过预先插入的探针获取在用户界面刷新过程中渲染出的用户界面顶层视图的图片数据,其每个像素点的颜色可能是系统根据其绘制程度渲染的颜色,也可能是其原有的颜色,故,根据其颜色判断是否过度绘制会受到其原有颜色的干扰。在一个实施例中,可以通过下述方式避免其原有颜色的干扰:

在对应用的源码编译打包过程中,还可以执行下述操作:

根据顶层视图的像素点的rgb值确定像素点的hsi值;判断所述hsi值的h分量值是否大于等于预设的h分量最小阈值,且小于等于预设的h分量最大阈值;若是,修改像素点的rgb值,使得修改后的rgb值对应的h分量值大于预设的h分量最大阈值或小于预设的h分量最小阈值。例如可以将像素点的rgb值修改成对应的h值分量为蓝色。

按照设定的规则修改像素点的rgb值,可以保证获取的图片数据中被判断为过度绘制的像素点的颜色为系统渲染的,而不是其原有的颜色。这样可以排除过度绘制的判断干扰,提高判断的准确度和可信度。

在一个实施例中,可以是,在确定一个用户界面过度绘制后,还可以,记录用户界面的顶层视图的下述信息:

顶层视图的标识,顶层视图中被过度绘制的像素点的h分量,顶层视图中过度绘制的像素点的个数,和顶层视图中过度绘制的像素点的个数与总像素点个数的比例。

应用程序的每个用户界面是否过度绘制都判断完后,还可以,根据记录的每个过度绘制的用户界面的上述信息生成应用程序的过度绘制报告。方便开发者了解过度绘制的具体情况,并能根据相关信息判断是否需要调整源码,并在源码中快速定位到需要修改的位置。

基于同一发明构思,本发明实施例还提供一种用户界面过度绘制的检测装置,其结构如图3所示,包括:

获取模块31,用于获取在用户界面刷新过程中渲染出的顶层视图的图片数据,所述图片数据是根据所述顶层视图的绘制层级渲染得到的;

第一判断模块32,用于根据所述获取模块31获取的所述图片数据中像素点的颜色判断像素点是否被过度绘制;

第一确定模块33,用于确定所述第一判断模32块判断的图片数据中过度绘制的像素点的个数与总像素点个数的比例;

第二判断模块34,用于判断所述第一确定模块33确定的比例是否大于预设的比例阈值;

第二确定模块35,用于当所述第二判断模块34判断为是时,确定所述用户界面过度绘制。

在一个实施例中,第一判断模块32,具体用于:

将像素点颜色的rgb值转换成hsi值;判断所述hsi值的h分量值是否大于等于预设的h分量最小阈值,且小于等于预设的h分量最大阈值;若是,确定所述像素点被过度绘制。

在一个实施例中,获取模块31,具体用于:

通过预先插入的探针获取在用户界面刷新过程中渲染出的用户界面顶层视图的图片数据,所述探针为用于获取所述图片数据的执行代码。

在一个实施例中,上述装置,还包括:

插入模块36,用于在对应用程序的源码编译过程中,遍历所述源码搜索出所有的activity的子类,每个所述子类对应一个用户界面;在所述子类的顶层视图源码的刷新方法部分插入探针。

在一个实施例中,插入模块36,还用于:

在所述子类的顶层视图源码的刷新方法部分插入探针前,获取所述子类的顶层视图的标识;若获取失败,按照设定的规则在所述源码中设置所述顶层视图的标识,再执行所述在所述子类的顶层视图源码的刷新方法部分插入探针;若获取成功,查找预先建立的免检视图列表中是否有所述顶层视图的标识;若否,再执行所述在所述子类的顶层视图源码的刷新方法部分插入探针。

在一个实施例中,插入模块36,具体用于:

在所述子类的onstart方法源码中获取所述子类的顶层视图的标识。

在一个实施例中,获取模块31,还用于:

根据所述顶层视图的像素点的rgb值确定像素点的hsi值;判断所述hsi值的h分量值是否大于等于所述预设的h分量最小阈值,且小于等于所述预设的h分量最大阈值;若是,修改所述像素点的rgb值,使得修改后的rgb值对应的h分量值大于所述预设的h分量最大阈值或小于所述预设的h分量最小阈值。

在一个实施例中,上述装置,还包括:

记录模块37,用于确定所述用户界面过度绘制后,记录所述用户界面的顶层视图的下述信息:所述顶层视图的标识,所述顶层视图中被过度绘制的像素点的h分量,所述顶层视图中过度绘制的像素点的个数,和所述顶层视图中过度绘制的像素点的个数与总像素点个数的比例。

关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。

基于同一发明构思,本发明实施例还提供一种计算机可读存储介质,其上存储有计算机指令,当该指令被处理器执行时实现上述用户界面过度绘制的检测方法。

基于同一发明构思,本发明实施例还提供一种服务器,包括:存储器、处理器及存储于存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述用户界面过度绘制的检测方法。

除非另外具体陈述,术语比如处理、计算、运算、确定、显示等等可以指一个或更多个处理或者计算系统、或类似设备的动作和/或过程,所述动作和/或过程将表示为处理系统的寄存器或存储器内的物理(如电子)量的数据操作和转换成为类似地表示为处理系统的存储器、寄存器或者其他此类信息存储、发射或者显示设备内的物理量的其他数据。信息和信号可以使用多种不同的技术和方法中的任何一种来表示。例如,在贯穿上面的描述中提及的数据、指令、命令、信息、信号、比特、符号和码片可以用电压、电流、电磁波、磁场或粒子、光场或粒子或者其任意组合来表示。

应该明白,公开的过程中的步骤的特定顺序或层次是示例性方法的实例。基于设计偏好,应该理解,过程中的步骤的特定顺序或层次可以在不脱离本公开的保护范围的情况下得到重新安排。所附的方法权利要求以示例性的顺序给出了各种步骤的要素,并且不是要限于所述的特定顺序或层次。

在上述的详细描述中,各种特征一起组合在单个的实施方案中,以简化本公开。不应该将这种公开方法解释为反映了这样的意图,即,所要求保护的主题的实施方案需要清楚地在每个权利要求中所陈述的特征更多的特征。相反,如所附的权利要求书所反映的那样,本发明处于比所公开的单个实施方案的全部特征少的状态。因此,所附的权利要求书特此清楚地被并入详细描述中,其中每项权利要求独自作为本发明单独的优选实施方案。

本领域技术人员还应当理解,结合本文的实施例描述的各种说明性的逻辑框、模块、电路和算法步骤均可以实现成电子硬件、计算机软件或其组合。为了清楚地说明硬件和软件之间的可交换性,上面对各种说明性的部件、框、模块、电路和步骤均围绕其功能进行了一般地描述。至于这种功能是实现成硬件还是实现成软件,取决于特定的应用和对整个系统所施加的设计约束条件。熟练的技术人员可以针对每个特定应用,以变通的方式实现所描述的功能,但是,这种实现决策不应解释为背离本公开的保护范围。

结合本文的实施例所描述的方法或者算法的步骤可直接体现为硬件、由处理器执行的软件模块或其组合。软件模块可以位于ram存储器、闪存、rom存储器、eprom存储器、eeprom存储器、寄存器、硬盘、移动磁盘、cd-rom或者本领域熟知的任何其它形式的存储介质中。一种示例性的存储介质连接至处理器,从而使处理器能够从该存储介质读取信息,且可向该存储介质写入信息。当然,存储介质也可以是处理器的组成部分。处理器和存储介质可以位于asic中。该asic可以位于用户终端中。当然,处理器和存储介质也可以作为分立组件存在于用户终端中。

对于软件实现,本申请中描述的技术可用执行本申请所述功能的模块(例如,过程、函数等)来实现。这些软件代码可以存储在存储器单元并由处理器执行。存储器单元可以实现在处理器内,也可以实现在处理器外,在后一种情况下,它经由各种手段以通信方式耦合到处理器,这些都是本领域中所公知的。

上文的描述包括一个或多个实施例的举例。当然,为了描述上述实施例而描述部件或方法的所有可能的结合是不可能的,但是本领域普通技术人员应该认识到,各个实施例可以做进一步的组合和排列。因此,本文中描述的实施例旨在涵盖落入所附权利要求书的保护范围内的所有这样的改变、修改和变型。此外,就说明书或权利要求书中使用的术语“包含”,该词的涵盖方式类似于术语“包括”,就如同“包括,”在权利要求中用作衔接词所解释的那样。此外,使用在权利要求书的说明书中的任何一个术语“或者”是要表示“非排它性的或者”。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1