CN114745570B - 图像的渲染方法、电子设备及存储介质 - Google Patents

图像的渲染方法、电子设备及存储介质 Download PDF

Info

Publication number
CN114745570B
CN114745570B CN202210646792.4A CN202210646792A CN114745570B CN 114745570 B CN114745570 B CN 114745570B CN 202210646792 A CN202210646792 A CN 202210646792A CN 114745570 B CN114745570 B CN 114745570B
Authority
CN
China
Prior art keywords
texture
layout
data
threshold
texture data
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.)
Active
Application number
CN202210646792.4A
Other languages
English (en)
Other versions
CN114745570A (zh
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.)
Honor Device Co Ltd
Original Assignee
Honor Device Co 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 Honor Device Co Ltd filed Critical Honor Device Co Ltd
Priority to CN202210646792.4A priority Critical patent/CN114745570B/zh
Publication of CN114745570A publication Critical patent/CN114745570A/zh
Application granted granted Critical
Publication of CN114745570B publication Critical patent/CN114745570B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/234Processing of video elementary streams, e.g. splicing of video streams, manipulating MPEG-4 scene graphs
    • H04N21/23412Processing of video elementary streams, e.g. splicing of video streams, manipulating MPEG-4 scene graphs for generating or manipulating the scene composition of objects, e.g. MPEG-4 objects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/005General purpose rendering architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T15/003D [Three Dimensional] image rendering
    • G06T15/04Texture mapping
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs
    • H04N21/44012Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream, rendering scenes according to MPEG-4 scene graphs involving rendering scenes according to scene graphs, e.g. MPEG-4 scene graphs

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Image Generation (AREA)

Abstract

本申请提供了一种图像的渲染方法、电子设备及存储介质,该方法应用于电子设备,该方法包括:基于布局信息确定每个待渲染图像的参考分辨率,在检测到需要对每个待渲染图像的纹理数据进行预处理时,将每个待渲染图像的纹理数据传输至预处理组件,由预处理组件将每个纹理数据的原始分辨率调整至参考分辨率;将预处理后的纹理数据传输至GPU,以供GPU进行图像渲染。采用本申请中的方法,可以减小每个待渲染图像的纹理数据所占内存的容量,避免出现缓存击穿的问题,进而避免部分纹理数据被频繁加载和卸载的问题。

Description

图像的渲染方法、电子设备及存储介质
技术领域
本申请涉及终端领域,尤其涉及一种图像的渲染方法、电子设备及存储介质。
背景技术
图像渲染是图像处理中的一项重要技术,电子设备(或终端)在对图像进行渲染过程中,通常需要处理大量的纹理数据,纹理数据属于一种存储数据,且占用内存比较大。
目前电子设备中显示屏的刷新率高,在高刷新率的情况下,分辨率高的纹理数据会导致电子设备在绘制图像时出现绘制卡顿,导致显示的图像卡顿。
发明内容
为了解决上述技术问题,本申请提供一种图像的渲染方法、电子设备及存储介质,使得电子设备绘制图像时不会出现卡顿的问题。
第一方面,本申请提供一种图像的渲染方法,该方法应用于电子设备,该电子设备的应用程序框架层设置有布局分析管理器,应用程序框架层产生了渲染线程,该方法包括:布局分析管理器获取当前帧中待显示页面的布局信息以及待显示页面中每个待渲染图像的纹理数据;布局分析管理器根据布局信息确定每个待渲染图像的尺寸信息,并将每个待渲染图像的尺寸信息作为各自的参考分辨率;布局分析管理器根据布局信息、每个纹理数据的原始纹理分辨率以及每个纹理数据对应的参考分辨率,判断是否需要对每个纹理数据进行预处理;布局分析管理器若确定需要对每个纹理数据进行预处理,则将每个纹理数据传输至预处理组件;预处理组件将每个纹理数据的原始分辨率调整至对应的参考分辨率,其中,在确定需要对每个纹理数据进行预处理的情况下,每个纹理数据的原始分辨率大于对应的参考分辨率;预处理组件将调整后的每个纹理数据通过渲染线程传输至图形处理器单元GPU,以供GPU进行图像渲染。
这样,待显示页面中的各待渲染图像的尺寸与该待显示页面的布局相关,该布局分析管理器通过待显示页面的布局信息可以准确地确定出该待显示页面中每个待渲染图像的尺寸信息,将每个待渲染图像的尺寸信息作为各待渲染图像的参考分辨率,使得该每个待渲染图像的参考分辨率都适用于当前电子设备的待显示页面,避免因为电子设备的屏幕的分辨率不同导致参考分辨率不适用的情况。该布局分析管理器基于布局信息、各纹理数据的原始分辨率和参考分辨率,判断是否需要对每个纹理数据进行预处理,判断时基于多个条件,而不是基于单一的分辨率判断,可以提高判断是否对每个纹理数据进行预处理的准确性,避免因单一条件满足而对每个纹理数据进行预处理而导致功耗大的问题。本申请中当确定需要对每个纹理数据进行预处理后,调整每个纹理数据的原始分辨率至参考分辨率,由于参考分辨率小于原始分辨率,使得预处理后的每个纹理数据所占用的内存容量变小,减小了当前帧需要加载数据的容量,即使得缓存的数据容量变小,进而避免了纹理缓存被击穿的问题,也就可以避免部分纹理数据被频繁加载和卸载的问题。由于避免了部分纹理数据被频繁加载和卸载的问题,提高了GPU绘制图像的效率。例如,在一些场景中,预处理后的纹理数据缓存至纹理缓存后,当GPU绘制图像时,由于纹理数据已经经过预处理,仅需该GPU进行贴图即可,减少了GPU运算量,提高GPU绘制的效率。
根据第一方面,布局分析管理器根据布局信息、每个纹理数据的原始纹理分辨率以及每个纹理数据对应的参考分辨率,判断是否需要对每个纹理数据进行预处理,包括:
布局分析管理器获取每个纹理数据的原始分辨率与对应的参考分辨率之间的差值作为纹理差异数据;布局分析管理器根据纹理差异数据以及布局信息,确定当前帧的分析结果,分析结果至少包含两个不同的种类,其中一个种类为纹理差异数据,其他种类包括:待渲染图像的数量和/或预处理组件;布局分析管理器将分析结果与预存的多个阈值组进行比较,若检测到存在与分析结果匹配的阈值组,则确定需要对每个纹理数据进行预处理,每个阈值组中包含的种类与分析结果中包含的种类相同。
这样,布局分析管理器确定的分析结果中包含至少两个种类的内容,增加比较的维度,提高判断的准确性,避免出现预处理后的功耗反而恶劣的问题。
根据第一方面,在布局分析管理器判断是否需要对每个纹理数据进行预处理之前,该方法还包括:每次训练获得阈值组的过程如下:布局分析管理器获取本次训练的样本页面的样本布局信息以及样本页面中各样本图像的纹理数据;布局分析管理器根据样本布局信息以及样本图像的纹理数据,将各样本图像的纹理数据传输至预处理组件;预处理组件对各样本图像的纹理数据进行预处理,并将预处理后的各纹理数据传输至渲染线程;渲染线程根据样本布局信息生成绘制指令;渲染线程将绘制指令以及预处理后的各纹理数据传输至GPU,由电子设备中的功耗分析模块获得GPU渲染各样本图像的第一功耗;渲染线程将绘制指令以及各样本图像的纹理数据传输至GPU,由功耗分析模块获得GPU渲染各样本图像的第二功耗;功耗分析模块若检测到第一功耗小于第二功耗,且第二功耗与第一功耗之间的差值超出预设的功耗阈值,则功耗分析模块指示布局分析管理器根据本次训练的样本页面的样本布局信息以及样本页面中各样本图像的纹理数据确定本次训练的阈值组。
这样,训练每个阈值组的过程中,将样本布局信息和样本图像的纹理数据传输至预处理组件进行预处理,基于绘制指令和预处理后的纹理数据获得第一功耗;渲染线程直接将绘制指令以及未预处理的纹理数据传输至GPU,GPU绘制图像获得第二功耗;第一功耗是基于预处理后的纹理数据确定,而第二功耗是基于未预处理的纹理数据确定,通过对两种情况下的功耗比较,可以确定出满足功耗需求的阈值组,使得GPU基于预处理后的纹理数据进行绘制,可以减小功耗,避免出现功耗恶化的问题。
根据第一方面,功耗分析模块指示布局分析管理器根据本次训练的样本页面的样本布局信息以及样本页面中各样本图像的纹理数据确定本次训练的阈值组,包括:布局分析管理器获取样本页面的样本布局信息,确定样本页面中待显示图像的数量;布局分析管理器根据样本布局信息,确定各样本图像的参考分辨率;布局分析管理器根据各样本图像的原始分辨率与对应的参考分辨率之间的差值,确定本次训练中的纹理差异阈值;布局分析管理器将本次训练中的预处理组件作为被选定组件;将纹理差异阈值、样本页面中样本图像的数量以及被选定组件作为阈值组。
这样,待渲染的图像的数量、被选定的预处理组件以及各样本图像的原始分辨率与参考分辨率之间的差值均与功耗相关,当第一功耗小于第二功耗,且第二功耗与第一功耗之间的差值大于预设的功耗阈值,在该情况下,获取待渲染的图像的数量、被选定的预处理组件以及纹理差异阈值作为阈值组,使得该阈值组可以客观反映出功耗的情况,避免出现功耗恶化的问题。
根据第一方面,布局分析管理器根据各样本图像的原始分辨率与对应的参考分辨率之间的差值,确定本次训练中的纹理差异阈值,包括:布局分析管理器从各样本图像的原始分辨率与对应的参考分辨率之间的差值中选取最大值作为纹理差异阈值;或者,所述布局分析管理器获取各样本图像的原始分辨率与对应的参考分辨率之间的差值的均值作为所述纹理差异阈值;或者,布局分析管理器获取每个样本图像的原始分辨率与对应的参考分辨率之间的差值,并获取所有差值所占内存的容量作为纹理差异阈值。
这样,本示例中提供了多种确定纹理差异阈值的方式。纹理差异阈值选取各差值中的最大值,可以避免该纹理差异阈值选取过小的问题;而选取各差值的均值,使得该纹理差异阈值可以客观反映本次训练中的分辨率之间的差值;获取各差值所占内存的容量作为纹理差异阈值,更加准确反映本次训练中纹理数据在预处理前后内存的变化量。
根据第一方面,布局分析管理器根据纹理差异数据以及布局信息,确定当前帧的分析结果,包括:布局分析管理器根据布局信息,确定待渲染图像的数量;布局分析管理器将纹理差异数据以及待渲染图像的数量作为分析结果,或者,将纹理差异数据、待渲染图像的数量以及预设的预处理组件作为分析结果。
这样,分析结果可以包含多个种类,可以根据需要设置分析结果中的种类。通常包含的种类越多,使得分析结果与阈值组比较的维度越多,比较结果越客观,准确。
根据第一方面,布局分析管理器将分析结果与预存的多个阈值组进行比较,包括:
针对分析结果与任一阈值组进行比较的过程,包括:布局分析管理器检测分析结果中是否每个种类的内容均与阈值组中对应种类的内容匹配,若检测到分析结果中每个种类的内容与阈值中对应种类的内容均匹配,则布局分析管理器确定检测到存在与分析结果匹配的阈值组。
这样,每个阈值组中包括多项内容,将分析结果中每项与阈值组中对应项内容进行比较,多项内容可以平衡比较的内容,使得判断过程更加准确,分析结果中每一个种类的内容均与阈值组中对应种类匹配,使得预处理的后的数据缓存时既可以避免缓存击穿的问题,又可以优化性能和功耗。
根据第一方面,分析结果中包括纹理差异数据,阈值组中包括与纹理差异数据对应的纹理差异阈值,纹理差异阈值为每个样本图像的原始分辨率与对应的参考分辨率之间的差值中的最大值;布局分析管理器检测纹理差异数据是否与阈值组中对应的纹理差异阈值匹配,包括:布局分析管理器检测纹理差异数据中各差值是否均超出纹理差异阈值,若确定纹理差异数据中各差值均超过纹理差异阈值,则确定纹理差异数据与阈值组中对应的纹理差异阈值匹配。
这样,仅当纹理差异数据中各个差值均超过该纹理差异阈值时,确定纹理差异数据与阈值组中对应的纹理差异阈值匹配,每个差值均超过纹理差异阈值,表明每个待渲染图像的原始分辨率与参考分辨率之间的差值大,该情况下进行预处理可以明显减小所需缓存的容量,在分辨率的维度上符合预处理的需求。
根据第一方面,分析结果中包括纹理差异数据,阈值组中包括与所述纹理差异数据对应的纹理差异阈值,纹理差异阈值为纹理差异数据所占内存容量的临界值;布局分析管理器检测纹理差异数据是否与阈值组中对应的纹理差异阈值匹配,包括:布局分析管理器检测纹理差异数据所占内存容量是否超出纹理差异阈值,若确定纹理差异数据所占内存容量之和超过纹理差异阈值,则确定纹理差异数据与阈值组中对应的纹理差异阈值匹配。
这样,当纹理差异阈值纹理差异数据所占内存容量的临界值时,直接通过检测该纹理差异数据所占的内存容量是否超过该纹理差异阈值来判断该纹理差异数据与阈值组中对应的纹理差异阈值匹配,判断方式简单快捷。
根据第一方面,若分析结果中包括待渲染图像的数量,阈值组中包括与待渲染图像的数量对应的数量阈值;布局分析管理器检测待渲染图像的数据是否与阈值组中对应的数量阈值匹配,包括:布局分析管理器检测待渲染图像的数量是否大于或等于数量阈值,若确定待渲染图像的数量大于或等于数量阈值,则布局分析管理器确定待渲染图像的数量与阈值组中对应的数量阈值匹配。
这样,当待渲染图像的数量小于该数量阈值时,即使纹理差异数据与纹理差异阈值匹配也不满足预处理条件,通过数量阈值,可以排除只有一个待渲染图像时进行预处理的情况,避免预处理而导致功耗恶化的问题。
根据第一方面,若分析结果中包括预处理组件,阈值组中包括与用于预处理组件对应的被选定组件;布局分析管理器检测预处理组件是否与阈值组中对应的被选定组件匹配,包括:布局分析管理器检测预处理组件与阈值组中对应的被选定组件是否相同,若确定相同,则布局分析管理器确定检测预处理组件与阈值组中对应的被选定组件匹配。这样,该比较方式简单、快捷。
根据第一方面,预处理组件包括GPU或CPU。这样,多个预处理组件,使得可以根据当前运算量来选取本次预处理的预处理组件,避免预处理组件进行预处理时出现阻塞的问题。
根据第一方面,应用程序框架层还产生了用户界面UI线程;布局分析管理器获取当前帧中待显示页面的布局信息以及待显示页面中每个待渲染图像的纹理数据,包括:UI线程获取当前帧中待显示页面的布局信息以及待显示页面中待渲染图像的图片信息;UI线程将当前帧中待显示页面的布局信息以及各待渲染图像的图片信息传输至布局分析管理器;布局分析管理器对每个图片信息进行转换,生成每个待渲染图像的纹理数据。这样,由UI线程将布局信息以及待渲染图像的图片信息传输至布局分析管理器,即由UI线程调用该布局分析管理器,获取布局信息和各待渲染图像的纹理数据,使得后续渲染线程无需转换各图片信息为纹理数据。
根据第一方面,应用程序框架层还产生了用户界面UI线程;布局分析管理器获取当前帧中待显示页面的布局信息以及待显示页面中每个待渲染图像的纹理数据,包括:
UI线程获取当前帧中待显示页面的布局信息以及待显示页面中各待渲染图像的图片信息;
UI线程将当前帧中待显示页面的布局信息以及待显示页面中各待渲染图像的图片信息传输至渲染线程;渲染线程将各待渲染图像的图片信息转化为纹理数据;渲染线程将当前帧中待显示页面的布局信息和各纹理数据传输至所述布局分析管理器。这样,由渲染线程将布局信息和各图像的纹理数据传输至布局分析管理器,使得布局分析管理器无需转换图片信息为纹理数据。
根据第一方面,预处理组件将调整后的每个纹理数据通过所述渲染线程传输至图形处理器单元GPU,包括:预处理组件将每个纹理数据传输至渲染线程;渲染线程按照每个纹理数据对应的业务需求,将调整后的纹理数据缓存至纹理缓存中,以供GPU从纹理缓存中读取调整后的纹理数据,并基于调整后的纹理数据进行图像渲染。这样,将预处理后的每个纹理数据按照业务需求存储至纹理缓存中。
第二方面,本申请提供了一种电子设备,包括:一个或多个处理器;存储器;以及一个或多个计算机程序,其中一个或多个计算机程序存储在存储器上,当计算机程序被一个或多个处理器执行时,使得电子设备执行第一方面以及第一方面的任意一种实现方式的图像的渲染方法。
第二方面的实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第二方面的实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
第三方面,本申请提供了一种计算机可读存储介质,包括计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行第一方面以及第一方面的任意一种实现方式的图像的渲染方法。
第三方面的实现方式分别与第一方面以及第一方面的任意一种实现方式相对应。第三方面的实现方式所对应的技术效果可参见上述第一方面以及第一方面的任意一种实现方式所对应的技术效果,此处不再赘述。
附图说明
为了更清楚地说明本申请实施例的技术方案,下面将对本申请实施例的描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1 是示例性示出的一种电子设备渲染图像的场景示意图;
图2 是示例性示出的三种贴图方式的示意图;
图3 是示例性示出的一种图像渲染的流程的示意图;
图4是示例性示出的渲染过程中的缓存机制的示意图;
图5是示例性示出的纹理缓存的原理示意图;
图6是示例性示出的缓存击穿的示意图;
图7是示例性示出的电子设备的结构示意图;
图8是示例性示出的电子设备的软件结构示意图;
图9是示例性示出的一种图像渲染的应用场景的示意图;
图10是示例性示出的本申请中图像渲染的流程的示意图;
图11是示例性示出的布局分析管理器判断是否需要对各纹理数据进行预处理的示意图;
图12是示例性示出的布局分析管理器获取布局样式的过程;
图13是示例性示出的页面、控件的示意图;
图14是示例性示出的一张待显示图片与其对应的参考图片之间的差异的示意图;
图15是示例性示出的分析结果分别对比阈值组的集合的示意图;
图16是示例性示出的训练阈值组的集合的示意图;
图17是示例性示出的GPU贴图的示意图;
图18是示例性示出的GPU渲染各待渲染图像的示意图;
图19是示例性示出的本申请中另一种图像渲染的流程的示意图;
图20是示例性示出的本申请与现有技术中输入GPU的纹理数据的示意图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
在对本申请实施例的技术方案说明之前,首先结合附图对本申请实施例的应用场景进行说明。图1为示例性示出的一种电子设备渲染图像的场景示意图。如图1所示,用户打开手机的视频应用,该视频应用将下载待显示的图片;或者从手机本地存储中获取待显示的图片。该手机的应用程序框架层可以获取到待显示页面的布局信息,布局信息可以用于反映构成该待显示页面中多个视图控件的位置的信息,可选地,该布局信息中可以包括每个待显示图片的位置、尺寸等信息。例如,如图1中所示,该布局信息包括: 4行待显示的图片,每行待显示的图片之间的间隔相同(如1cm),每行有三张图片,每张图片的分辨率(也可称为图片的尺寸)均为480*960(像素)。可选地,布局信息还可以包括该页面中其他显示控件(如显示时间的控件)的位置信息以及尺寸信息等。
该应用程序框架层将下载的图片解压转换为位图,并将该位图转换为纹理数据。同时,该应用程序框架层可以将布局信息解析后生成渲染命令。应用程序框架层将纹理数据以及渲染命令一同传输至GPU,由GPU基于纹理数据进行贴图处理,以合成每帧待显示的图像。需要说明的是,图1中显示界面显示了某一帧显示的图像。
由GPU基于纹理数据进行贴图处理的过程可以理解为进行图片渲染的过程。GPU基于纹理数据进行贴图的具体原理:GPU对图片的纹理数据进行采样(如下采样或上采样),并将采样得到的数据填充至填充区域内,进而完成对图片的贴图。贴图有三种方式,分别为:原图填充、全填充以及等比填充。图2为三种贴图方式的示意图;可选地,原图填充是按照原图的大小直接在填充区域进行填充。填充的位置和填充的方式会导致对原图进行不同的裁剪,可选地,填充位置可以是图片在填充区域中所处的位置,例如,如图2所示,Res_1在2a中(1)的填充位置用四个坐标点标识,坐标1为(0,0)、坐标2为(a1,0)、坐标3为(0,b1),坐标4为(a1,b1),其中,坐标单位为像素。按照该填充贴图,从而使得原图(待贴的图片)的左上角位置与填充区域的左上角对齐,且该原图的长边与该填充区域的长边重合,原图的短边与该填充区域的短边重合。若原图的尺寸大于填充区域时,裁剪掉原图中超出填充区域的部分。
全填充是将图片的长边(记为x)和短边(记为y)进行缩放来满足填充区域进行填充,填充后的图片可能会失真。例如,原图的长边通过插值进行拉长处理。
等比填充是将图片的长边(记为x)和短边(记为y)进行等比例的缩放以满足完全填充该填充区域中的长边的长度或该填充区域中短边的长度;根据图片与布局相对大小的关系可以对图片进行不同的操作。
图2的2a为示例性示出的原图的尺寸小于填充区域的尺寸时,三种贴图的示意图。
如图2的2a所示,原图标记为“Res_1”,本示例中,该图片Res_1的尺寸为a1*b1(单位为像素),该填充区域的尺寸为c1*d1,其中,该a1< c1且b1< d1。本示例中,可以设定填充位置和填充方式,该GPU 按照设定的填充位置和填充方式进行原图填充,例如,如2a中(1)所示,填充位置的坐标为分别为坐标1(0,0)、坐标2(a1,0)、坐标3(0,b1),坐标4(a1,b1),GPU 按照设定的填充位置填充图片,使得该图片的左上角与页面的左上角对齐,原图的长边与该填充区域的长边重合,原图的短边与该填充区域的短边重合。由于该原图的尺寸小于该填充区域的尺寸,且按照设定的填充位置进行填充,该原图在填充区域完全显示。
示例性地,还可以采用全填充方式,采用全填充方式,GPU将该图片Res_1的短边(x)拉伸至该填充区域的第一短边的长度;将该Res_1的长边(y)拉伸至该填充区域的第一长边的长度。如2a中(2)所示,该图片Res_1的长边和短边均被拉伸,以使该图片可以完全填充该填充区域。
示例性地,还可以采用等比填充的方式,GPU获取该图片Res_1中短边与长边之比(即x/y);保持该图片Res_1的长宽比不变,调整该图片的大小,以填充该填充区域。如2a中(3)所示,按照图片Res_1的长宽比放大该图片,以使该图片的短边与该填充区域的第一短边的长度相等,该图片的填充后的中心点位于该手机页面的中心点。
图2的2b为示例性示出的原图的尺寸大于填充区域的尺寸时,三种贴图的示意图。
如2b所示,原图标记为“Res_2”,本示例中,该图片Res_2的尺寸为a2*b2,该填充区域的尺寸为c1*d1,其中,该a2> c1且b2> d1。如2b所示,该Res_2的尺寸大于填充区域的尺寸。本示例中,可以设定填充的位置和填充方式,该GPU 按照设定的填充位置和填充方式进行原图填充,例如,如2b中(1)所示,填充坐标为(0,0)、(c1,0)、(d1,0)以(c1,d1),由于该原图的尺寸大于该填充区域的尺寸,超出该填充区域的部分被裁剪,导致该图片在该填充区域不能被完全显示,如2b中(1)所示,仅能显示出人物头像的左脸区域。
示例性地,还可以采用全填充方式,采用全填充方式,GPU 将该图片Res_2的短边(x)压缩至该填充区域的第一短边的长度;将该Res_2长边(y)压缩至该填充区域的第一长边的长度。如2b中(2)所示,该图片Res_2长边和短边均被压缩,以使该图片可以完全填充该填充区域。如b中(2)所示,该图像被压缩,由于并非按照等比压缩,图片出现失真的情况。
示例性地,还可以采用等比填充的方式,GPU获取该图片Res_2短边与长边之比;保持该图片Res_2长宽比不变,调整该图片的大小,以填充该填充区域。如2b中(3)所示,按照图片Res_2长宽比缩小该图片以使该图片的短边与该填充区域的第一短边的长度相等,该图片的填充后的中心点位于该手机页面的中心点。
需要说明的是,等比填充由于保持了图片原有的长宽比,可以避免出现图片失真的问题。
图3为示例性示出的图像渲染的流程的示意图。手机渲染图像的具体步骤如下:
步骤301:UI线程向渲染线程传输布局信息、资源信息。
示例性地,如图1所示,用户打开视频应用程序,该视频应用程序欲按照如图1所示的布局方式显示9张图像。该视频应用程序可以从网上下载9张图片或者从手机的存储空间中获取该9张图片,并将该9张图片进行持久化处理,以使该视频应用程序可以使用该9张图片的信息。
示例性地,应用程序框架层会产生用户界面/接口(User Interface “UI”)线程(Thread),即图形绘制的流程起始于UI Thread,该UI线程可以获取经过持久化处理的9张图片的图片信息(也即资源信息)以及应用程序中待显示界面的布局信息。该布局信息的形式可以是该布局文件,也可以是用于指示布局的代码信息。每张图片的资源信息包括:该图片的矢量图、压缩后的图等信息。可选地,本示例中资源信息还可以包括该图片的格式信息等。该UI线程获取到图片信息后,可以对图片进行解压,得到该图片的位图(Bitmap),本示例中不限制图片的格式,例如,图片的格式可以是PNG或JPG。可选地,该UI线程获取的资源信息包括图片的位图。
示例性地,该UI线程还可以获取应用程序中待显示页面的布局信息,该布局信息可以包括用于填充图片的填充区域的尺寸信息、填充区域在显示页面中的坐标位置等信息。
步骤302:渲染线程传输绘制指令以及纹理数据至GPU。
示例性地,应用程序框架层产生渲染线程(即Render Thread)。该渲染线程接收到页面的布局信息后,可以解析该布局信息生成绘制指令,该绘制指令为GPU可识别的指令。该绘制指令可以用于指示GPU绘制图片(或进行图片的渲染),例如,绘制指令可以指示GPU在目标位置进行贴图。
当渲染线程接收到图片的位图后,将Bitmap包装成纹理数据。该渲染线程可以向GPU传输绘制指令以及纹理数据。
步骤303:GPU向缓冲器队列传输渲染后的数据。
示例性地,该GPU按照绘制指令的指示,对纹理数据进行渲染(贴图)处理,得到渲染后的数据。
该GPU将渲染后的数据输出至缓冲器队列(Buffer Queue)。Buffer Queue是Android显示系统的核心。GPU可以将渲染后的数据存储在该Buffer Queue中,当合成器需要合成图像时,合成器可以从该Buffer Queue中获取渲染后的数据。
步骤304:合成器从缓冲器队列中获取渲染后的数据,合成每帧显示的图像。
示例性地,当合成器在合成每帧显示图像时,可以从该BufferQueue中取用渲染后的数据。合成器(即Surface Flinger)将合成的图像传输至显示组件,以供显示组件显示。显示组件包括显示屏。
以上步骤301~步骤304即为手机渲染一帧图像的过程。在一个示例中,页面在第i-1帧显示列表sheet1,若用户滑动该列表sheet1时,按照列表sheet1移动的距离该应用程序将重新生成当前帧(即第i帧)的纹理数据,即重新绘制渲染第i帧待显示图片,i为大于1的整数。当列表sheet1仅移动了几个(如2~10个)像素时,下一帧(即第i帧)的显示数据中80%以上的数据并未发生改变,如果渲染第i帧的图像的过程依然按照步骤301~步骤304执行,那将会有很多的绘制任务被反复执行,造成不必要的性能和功耗损耗,故渲染绘制框架采用缓存机制来避免过多的重复工作。缓存纹理数据就是一种重要的存储机制。例如,渲染线程可以将当前帧的纹理数据存储在纹理缓存中,若下一帧纹理数据与当前帧的纹理数据相同,该GPU绘制下一帧纹理数据时,该GPU仅需从纹理缓存中获取下一帧的纹理数据即可,而无需经过步骤301~步骤304。该纹理缓存机制可以有效提高绘制的效率。
图4为示例性示出的渲染过程中的缓存机制的示意图。
示例性地,每个待显示的图片具有不同的业务需求,应用程序预先设置有每个待显示图片各自对应的业务需求。渲染线程获取到纹理数据的同时可以获取该纹理数据对应的业务需求。对于不同业务需求,渲染线程可以对纹理数据采用不同的缓存过程。例如,渲染线程可以直接将纹理数据传输至GPU,或者将纹理数据存储在纹理缓存,由纹理缓存将纹理数据下发至GPU。
下面结合图4具体说明增加缓存机制的情况下,该渲染线程将纹理数据传输至GPU的过程。
步骤3021:渲染线程传输纹理数据指GPU。
在一个示例中,渲染线程获取当前纹理数据对应的业务需求,按照该业务需求的指示,该渲染线程可以将纹理数据直接传输至GPU的片段着色器(Fragment Shader)。GPU中的片段着色器对纹理数据进行渲染后,可以将渲染后的数据传输至缓冲器队列中;在合成器合成当前帧的图像时从该缓冲器队列获取渲染后的数据,合成每帧显示的图像,并上传至显示组件显示,如步骤304。
步骤3022:渲染线程查询该纹理缓存管理器中是否有纹理数据,若确定没有,则传输纹理数据指纹理缓存管理器。
在一个示例中,渲染线程获取当前纹理数据对应的业务需求,该业务需求指示渲染线程将纹理数据通过纹理缓存传输至GPU,则该渲染线程可以向该纹理缓存管理器查询纹理缓存中是否存储有当前所需的纹理数据。可选地,每个纹理数据可以有唯一的编号(如Key)进行标识。渲染线程可以获取到待渲染的纹理数据对应的编号,该渲染线程可以在缓存管理器中查询是否存在待渲染的纹理数据对应的编号,若确定存在待渲染的纹理数据对应的编号,则该渲染线程确定该纹理缓存中存储有待渲染的纹理数据,则该渲染线程可以向纹理缓存管理器下发传输指令,该传输指令用于指示该纹理缓存管理控制该纹理缓存将该编号对应的纹理数据下发至GPU。若该渲染线程未查询到该编号,则渲染线程确定该纹理缓存中未存储有待渲染的纹理数据,则可以根据待渲染的纹理数据的编号存储在该纹理缓存管理器,并将该纹理数据传输至纹理缓存管理器中,由纹理缓存管理器将新的纹理数据缓存至纹理缓存中,即执行步骤3023。
步骤3023:渲染线程或纹理缓存管理器将新的纹理数据缓存至纹理缓存中。
在一个示例中,渲染线程获取当前纹理数据的业务需求,若该业务需求指示渲染线程将该纹理数据存储至纹理缓存中,则该渲染线程将该新的纹理数据直接缓存至纹理缓存中。可选地,纹理缓存存储新的纹理数据时,可以将该纹理数据的编号作为该纹理数据的Key,以便纹理缓存管理器可以查询该纹理缓存中是否存储有当前的纹理数据。
在另一个示例中,执行步骤3022过程中渲染线程查询到该纹理缓存管理器未存储有待渲染的纹理数据的编号时,该渲染线程下发缓存指令,指示缓存管理器控制缓存该待渲染的纹理数据的编号以及指示该纹理缓存管理器将新的纹理数据缓存至该纹理缓存。该纹理缓存管理器将渲染线程传输的新的纹理数据缓存至该纹理缓存中。
步骤3024:从纹理缓存中下发纹理数据至GPU中。
示例性地,渲染线程可以向纹理缓存管理器下发传输指令,该传输指令指示该纹理缓存管理器控制纹理缓存将指定的编号对应的纹理数据下发至GPU。例如,渲染线程通过纹理缓存管理器查询到编号为XXX1的纹理数据存储于该纹理缓存中,该渲染线程可以向纹理缓存管理器下发传输指令,该传输指令指示纹理缓存管理器控制纹理缓存将编号为XXX1的纹理数据下发至GPU。
本示例中,纹理缓存中若存储有当前帧的纹理数据,则GPU可以直接从纹理缓存中获取当前帧的纹理数据,而无需渲染线程占用传输资源重复将纹理数据传输至GPU中,提高了渲染的效率。
图5为示例性示出的纹理缓存的原理示意图。
示例性地,假设图片1的分辨率为720P,该图片1若转换成RGBA8888的编码,图片大小为3.7M(1280x720x4像素)。也即存储一张完整的图片1需要占用3.7M的内存空间,而内存空间的大小(容量)并不是无限大,编码后的图片占用内存空间多,会影响其他应用程序对内存的使用。纹理缓存的缓存空间通常被设置为固定大小,以使该缓存空间既可以满足缓存需求也能降低对内存的影响。本示例中,电子设备(如手机)可以根据屏幕分辨率设置该纹理缓存的缓存空间(后文也称为“总缓存”)的大小,例如,可以设置该纹理缓存的缓存空间为100M,在其他实施例中,纹理缓存的缓存空间的大小还可以是其他,例如,200M,本示例中不对纹理缓存的缓存空间的大小进行限制。纹理缓存的缓存空间通常可以被划分为过时缓存(fPurgeableQueue)和固定缓存(fNonPurgeableResources)两部分。过时缓存用于存储当前帧中不需要显示的纹理数据,并在总缓存不能满足加载新的纹理数据的需求时,渲染线程释放该过时缓存中的数据。固定缓存用于缓存当前帧需要显示的纹理数据。过时缓存和固定缓存的空间大小等于该总缓存的空间大小。且过时缓存的空间容量可以等于当前帧中不需要显示的纹理数据的数据大小(容量)。
如图5所示,缓存空间加载第一帧的(即图中的Frame1)纹理数据,该纹理缓存不断加载第一帧的纹理数据,直至加载完该第一帧的纹理数据。图5中Frame1中总缓存为该纹理缓存的缓存空间的大小。填充有斜线的区域用于指示该缓存空间已加载的纹理数据的占比空间,缓存中空白位置指示该缓存空间中未被占用的空间。如图5中Frame1中三个纹理缓存的示意图可知,加载第一帧数据后,该总缓存无剩余空间。
当第二帧时,渲染线程可以将该第二帧中不需要显示的纹理数据缓存至过时缓存中,过时缓存的容量等于该第二帧中不需要显示的纹理数据的数据大小。例如,第一帧的待显示数据为表格1,该表格1的数据占满该总缓存(如Frame1中的第三个图以及第二帧的第一个图)。在第二帧时,用户向上滑动屏幕,使得表格1中的部分未被显示,即有部分纹理数据不需要显示,如Frame2中箭头的右方所示,将缓存限额内(即总缓存的空间容量)不再显示的纹理数据缓存至过时缓存(如图5中黑色填充区域)中。第三帧有新的纹理数据需要加载,如图5中Frame3所示,渲染线程将存储在过时缓存中的数据释放,如图5中标号(1)所示,当释放出空间后,该总缓存继续加载新的纹理数据,如图5中的标号(2)所示。
在另一个示例中,若第三帧时用户滑动屏幕,以查看完整的表格1,则此时可以将过时缓存变更为固定缓存,进而使得GPU可以直接从固定缓存中读取纹理数据。由于不显示的数据先存储在过时缓存中,而不是立即释放,当下一帧需要使用时,GPU可以立即读取纹理缓存中的纹理数据而不是由渲染线程重新加载纹理至纹理缓存,GPU再从纹理缓存中获取纹理数据,减少了总缓存释放纹理数据和加载纹理数据的次数,从而提高渲染的效率。
在一些实施例中,若加载的纹理数据过大,会导致出现缓存击穿的问题。
每帧数据在绘制之前,渲染线程会判断纹理缓存中存储的数据是否超过该缓存空间的限额(即超过该总缓存的空间大小),若渲染线程确定该缓存空间超过预设的限额(即出现缓存击穿的问题),则会释放该缓存中间中超出限额部分的数据,以使缓存空间保持总缓存的空间大小,这导致上传至GPU中的部分纹理数据被卸载,即页面不能显示出被卸载部分的纹理数据,因而该渲染线程需要重新加载被卸载的纹理数据,由于重新加载被卸载的纹理数据之前,该总缓存已经无剩余空间,重新加载被卸载的纹理数据导致超过该总缓存的空间大小,由于每帧绘制时会先卸载部分纹理数据然后重新加载被卸载的纹理数据,导致渲染的帧率下降。
图6为示例性示出的缓存击穿的示意图。
举例来说,纹理缓存的缓存空间(即总缓存)的限额被设置为100M,即该总缓存的大小为100M。在第一帧(即Frame1)加载纹理数据至总缓存时,由于纹理数据大(如纹理数据大小为120M),导致总缓存加载完第一帧的纹理数据时,该总缓存的空间容量超过100M。如图6中Frame1所示,纹理数据不断加载至缓存中(Frame1中第1个~第3个图),在Frame1的第3个图可知,该缓存空间100M的空间均被占用,而此时该Frame1的数据还未加载完整,如Frame1中第4个图所示,在100M空间均被占满的情况下,继续加载剩余数据(如竖线填充的20M数据)。此时该缓存空间的大小为120M,超出限额20M。
当渲染线程绘制第二帧数据时,检测到总缓存的纹理数据的大小(如图6中Frame2中第1个图所示的当前缓存120M)超出当前缓存空间的限额。该渲染线程从该总缓存中释放掉20M的纹理数据,以使缓存空间保持100M的大小。本示例中,缓存中的数据采用先进先出的处理顺序,那么最先加载至存储中的纹理数据最先GPU处理。基于此,渲染线程优先释放被最先加载至缓存中的20M数据,如图6中Frame2所示的纹理数据S1,该S1为最先加载至缓存中的20M纹理数据。如图6中虚线箭头所示该S1被释放,该总缓存重新变为100M,如Frame2中第二个图所示。而当前帧在显示时还需要被释放的纹理数据,该S1数据将被重新加载至该总缓存中。这就导致该S1部分将被不断释放和重新加载,对于渲染来说时极大的挑战,针对60hz的显示很可能会导致帧率下降到10hz左右。
在实施例中,当缓存击穿的情况下,会出现缓存失效的问题,即部分缓存不断被释放和重新加载,缓存中频繁加载纹理数据和释放纹理数据,会导致GPU绘制的卡顿。且内存在拷贝高分辨率的纹理数据、以及CPU向GPU传输纹理数据、GPU处理纹理数据时,均会消耗大量的带宽,加剧GPU的绘制效率的恶化,带宽可以是指单位时间能通过链路的数据量。
通常解决该问题的方式是扩大缓存,然而扩大缓存依然不能避免出现缓存击穿的现象,也就无法避免部分纹理数据被频繁加载和释放的问题。同时,缓存扩大,也会导致增加内存,然而内存是不能无限制增长。另一种方式是由开发者缩小缓存的分辨率,然而不同的设备的分辨率不同,这导致即使缩小了分辨率,但是不同设备由于分辨率不同,依然存在缓存击穿的现象。
本申请实施例提供一种纹理渲染的方法,在渲染线程将纹理数据发送至GPU之前,调整纹理数据的分辨率,从而降低纹理数据在存储时发生缓存击穿的概率,避免部分纹理数据被频繁加载和释放,从而避免出现GPU绘制卡顿的问题。
本申请实施例中电子设备可以是带有显示屏的设备,例如,手机、平板电脑、智能手表等。
图7示出了本申请实施例中的电子设备100的结构示意图。应该理解的是,图7所示电子设备100仅是电子设备的一个范例,并且电子设备100可以具有比图中所示的更多的或者更少的部件,可以组合两个或多个的部件,或者可以具有不同的部件配置。图1中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。
电子设备100可以包括:处理器110,外部存储器接口120,内部存储器121,通用串行总线(universal serial bus,USB)接口130,充电管理模块140,电源管理模块141,电池142,天线1,天线2,移动通信模块150,无线通信模块160,音频模块170,扬声器170A,受话器170B,麦克风170C,耳机接口170D,传感器模块180,按键190,马达191,指示器192,摄像头193,显示屏194,以及用户标识模块(subscriber identification module,SIM)卡接口195等。其中传感器模块180可以包括压力传感器180A,陀螺仪传感器180B,气压传感器180C,磁传感器180D,加速度传感器180E,距离传感器180F,接近光传感器180G,指纹传感器180H,温度传感器180J,触摸传感器180K,环境光传感器180L,骨传导传感器180M等。
可以理解的是,本申请实施例示意的结构并不构成对电子设备100的具体限定。在本申请另一些实施例中,电子设备100可以包括比图示更多或更少的部件,或者组合某些部件,或者拆分某些部件,或者不同的部件布置。图示的部件可以以硬件,软件或软件和硬件的组合实现。
图8是本申请实施例的电子设备100的软件结构框图。
电子设备100的分层架构将软件分成若干个层,每一层都有清晰的角色和分工。层与层之间通过软件接口通信。在一些实施例中,将Android系统分为四层,从上至下分别为应用程序层,应用程序框架层,安卓运行时(Android runtime)和系统库,以及内核层。
应用程序层可以包括一系列应用程序包。
如图8所示,应用程序包可以包括视频应用、游戏、图库、导航、蓝牙等应用程序。
应用程序框架层为应用程序层的应用程序提供应用编程接口(applicationprogramming interface,API)和编程框架。应用程序框架层包括一些预先定义的函数。
如图8所示,应用程序框架层可以包括窗口管理器,内容提供器,视图系统,电话管理器,资源管理器,通知管理器、编解码器(库)等。
窗口管理器用于管理窗口程序。窗口管理器可以获取显示屏大小,判断是否有状态栏,锁定屏幕,截取屏幕等。
内容提供器用来存放和获取数据,并使这些数据可以被应用程序访问。所述数据可以包括视频,图像,音频,拨打和接听的电话,浏览历史和书签,电话簿等。
视图系统包括可视控件,例如显示文字的控件,显示图片的控件等。视图系统可用于构建应用程序。显示界面可以由一个或多个视图组成的。例如,包括短信通知图标的显示界面,可以包括显示文字的视图以及显示图片的视图。
资源管理器为应用程序提供各种资源,比如本地化字符串,图标,图片,布局文件,视频文件等等。
通知管理器使应用程序可以在状态栏中显示通知信息,可以用于传达告知类型的消息。
本申请实施例中,应用程序框架层可以生成UI线程、渲染线程。UI线程用于获取应用程序中的页面的布局信息以及图片的图片信息。渲染线程可以根据图片信息生成纹理数据,以及对纹理数据进行缓存。本示例中,UI线程或渲染线程还可以根据布局信息,调整纹理数据的分辨率,降低纹理数据的大小,避免纹理数据在缓存时发生缓存击穿的问题,避免部分纹理数据频繁被加载和释放,提高GPU绘制的效率,避免出现绘制卡顿的问题。
Android Runtime包括核心库和虚拟机。Android runtime负责安卓系统的调度和管理。
核心库包含两部分:一部分是java语言需要调用的功能函数,另一部分是安卓的核心库。
应用程序层和应用程序框架层运行在虚拟机中。虚拟机将应用程序层和应用程序框架层的java文件执行为二进制文件。虚拟机用于执行对象生命周期的管理,堆栈管理,线程管理,安全和异常的管理,以及垃圾回收等功能。
系统库可以包括多个功能模块。例如:表面管理器(surface manager),媒体库(Media Libraries),三维图形处理库(例如:OpenGL ES),2D图形引擎(例如:SGL)等。2D图形引擎是2D绘图的绘图引擎。
图9为示例性示出的一种图像渲染的应用场景的示意图。
如图9的9a所示,用户在界面901中点击应用程序“视频”的图标,手机响应于该用户的点击操作,从视频应用对应的服务器中下载图片,并在视频应用的界面中显示图片。该视频应用显示6张图片的效果如9a中所示的界面902。该界面902中采用线性布局,包括两列三行6张图片。
手机显示图片的过程包括纹理渲染的过程。如9b所示,该手机响应于用户的点击操作,启动该视频应用。该视频应用(程序)从对应的服务器下载图片,如9b所示,下载的6张图片的分别为:IMG1~IMG6;IMG1的分辨率为1095*1920、IMG2的分辨率为3797*6601、IMG3的分辨率为1095*1920、IMG4的分辨率为3767*6601、IMG5的分辨率为1095*1920、IMG6的分辨率为1095*1920,其中,分辨率的单位为像素。本示例中下载的图片的格式为PNG/JPG。应用程序框架层产生UI线程,获取被下载的图片(即资源信息)以及该视频应用待显示界面的布局信息。
图10为示例性示出的本申请中图像渲染的流程的示意图。该手机进行图像渲染的过程包括:
步骤1001:UI线程向布局分析管理器传输布局信息、资源信息。
示例性地,该步骤中UI获取布局信息以及资源信息的过程与步骤301中获取布局信息以及资源信息的过程类似,相关描述可以参考步骤301,此处不再进行赘述。
本示例中,在应用程序框架层可以设置布局分析管理器,UI线程可以将获取到的布局信息以及资源信息传输至该布局分析管理器。
举例来说,该UI线程可以获取该视频程序中待显示页面的布局信息,布局信息可以是该视频应用中页面的布局代码,布局代码如下:
<androidx.constraintlayout.widget.ConstrainLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff808A87"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="Vertical">
该布局代码指示该页面水平方向采用线性布局。UI线程获取的资源信息为该压缩后的6张图片。该UI线程向布局分析管理器传输布局信息以及资源信息。由布局分析管理器根据布局信息以及当前每张图片的资源信息,判断GPU/CPU对待显示的图片(即资源信息)是否进行预处理;若确定GPU/CPU对资源信息进行预处理,则由该布局分析管理器执行步骤1002,即向GPU/CPU发送资源信息。
步骤1002:该布局分析管理器向GPU/CPU发送资源信息,由GPU/CPU对资源信息进行预处理。
示例性地,布局分析管理器选择将纹理数据传输至GPU处理或CPU处理。例如,布局分析管理器选择将纹理数据传输至GPU处理,该GPU接收到纹理数据后,对纹理数据进行采样,以使处理后的纹理数据的分辨率与参考纹理数据的分辨率一致。可选地,参考纹理数据是由布局分析管理器基于布局信息确定。
同理,若布局分析管理器选择将纹理数据传输至CPU处理,则由CPU对接收到的纹理数据进行采样处理,以使处理后的纹理数据的分辨率与参考纹理数据的分辨率一致。
可选地,采样可以是上采样或下采样。
步骤1003:该GPU/CPU向渲染线程传输处理后的资源信息。
示例性地,若由GPU对纹理数据进行预处理,则GPU将纹理数据传输中渲染线程。若由CPU对纹理数据进行预处理,则由CPU将预处理后的纹理数据算出至渲染线程。
步骤1004:该布局分析管理器向渲染线程传输布局信息。
该步骤1004也可以在步骤1002和1003之前执行。
步骤1005:该渲染线程向GPU传输绘制指令以及纹理数据。
该步骤与步骤302的相关描述类似,此处将不再进行赘述。
步骤1006:该GPU向缓冲器队列传输渲染后的数据。
该步骤与步骤303的相关描述类似,此处将不再进行赘述。
步骤1007:合成器从缓冲器队列获取渲染后的数据,合成每帧显示的图像。
该步骤与步骤304的相关描述类似,此处将不再进行赘述。
在一些实施例中,步骤1101中布局分析管理器判断GPU/CPU对待显示的图片(即资源信息)是否进行预处理的过程如图11所示。
图11为示例性示出的该布局分析管理器判断GPU/CPU对待显示的图片(即资源信息)是否进行预处理的示意图。
步骤1101:布局分析管理器对布局信息进行布局分析。
示例性地,如图11所示,UI线程将布局信息发送至布局分析管理器中,该布局分析管理器可以进行布局分析,布局分析可以包括该布局分析管理器根据布局信息分析获得布局样式、控件的大小等信息。布局样式如页面中各控件(如视图、按键等)的排列方式,例如,排列方式可以包括线性排列、相对布局、网格布局、表格布局、帧布局等方式。控件的大小包括控件的长、宽信息,布局分析管理器还可以获取到各控件的可视性信息,例如,页面中按键是否隐藏或者显示。
举例来说,UI线程获取到布局信息为布局代码,该UI线程将布局代码传输至布局分析管理器中,由该布局分析管理器进行布局分析。该布局代码可以为如下内容:
<androidx.constraintlayout.widget.ConstrainLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ff808A87"
tools:context=".MainActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="Vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:orientation="horizontal">
<ImagView
……>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:orientation="horizontal">
<ImagView
……>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="5dp"
android:orientation="horizontal">
<ImagView
……>
该布局分析管理器读取该布局代码,解析该代码获得所有实例化节点,例如以上代码中包括一个线性布局中的垂直布局,三个水平布局,每个水平布局的实例中包括视图控件。可选地,实例化是指在面向对象的编程中,用类创建对象的过程。图12为示例性示出的布局分析管理器获取布局样式的过程。该图12中12a为上述代码的结构树的示意图。12a的布局代码结构中,LinearLayout(Vertical)中包括三个LinearLayout(horizontal),每个LinearLayout(horizontal)中包括3个图片视图控件(ImageView)。为了便于理解,将12a的图转化为如12b所示的树形图,该树形结构中父节点为LinearLayout(Vertical),该父节点下包括3个子节点LinearLayout(horizontal),每个LinearLayout(horizontal)下包括2个ImageView。该布局分析管理器获取到如12中的树形结构,即确定出待显示页面布局样式。
每个页面以及控件都有自身的尺寸,布局分析管理器根据布局代码还可以确定出每个页面以及该页面中的控件的尺寸大小和位置信息。
图13为示例性示出的一种页面、控件的示意图。
如图13的13a所示,手机在显示过程中包括多个页面,UI线程可以获取各页面之间的关系,例如,Window页面(如13a中粗体的虚线框所示的“窗口”页面)为DoctorView(如13a中位于细线虚线框)中父视图,即该Window包括DoctorView,DoctorView为XXXLayout(如13a中最上层的虚线框的“XXX布局”)页面的父视图,即该DoctorView中包括XXXLayout(即13a中所示的“XXX布局”)。其中,该Window页面的宽度(Width)与DoctorView的宽度相等,DoctorView的宽度与XXXLayout的宽度相等。该Window页面的高度(Hight)与DoctorView的高度相等,DoctorView的高度与XXXLayout的高度相等。在13a中XXXLayout中包括多个视图控件(即View),其中,图片视图(ImageView)控件属于视图控件,该图片视图控件1301用于显示图片名为ResID的图片。
布局分析管理器根据页面的属性信息、各控件的属性信息,可以确定出XXXLayout中的各控件的位置。每个控件的属性信息包括:控件的高度(height)、宽度(width)、外边距(margin)、内边距(padding)、边框(border)、权重(weight)等;margin属性是用于表示当前子控件与外部控件的距离。内边距是指当前子控件中填充内容与外部控件之间的距离。边框属性包括边框样式(border-style)、边框宽度(border-width)、边框颜色(border-color)三个属性。权重是线性布局中特有的属性,用于设置当前子控件占据宽度/高度的优先级别。父控件(如子控件所在的页面)的属性信息包括:页面宽度、页面高度、页面中各控件的布局样式。父控件的属性信息可以约束各子控件,例如,子控件的宽度不超过父控件的宽度。再如:若代码中指示ImageView1301的宽度为150px,该ImageView1301的高度为265px。该ImageView1301的内边距是3dp,该ImageView1301距离父视图的左边距32dp;该内边距和外边距可以约束该ImageView1301在页面中的位置。该布局分析管理器可以根据该ImageView1301的尺寸信息、内边距和外边距,确定出ImageView1301在父控件中的位置。同时,父控件的显示效果也会被子控件所影响。
步骤1102:布局分析管理器对资源信息进行纹理分析。
示例性地,布局分析管理器对资源信息进行纹理分析,该资源信息可以是待显示图片的图片信息。UI线程可以解压该图片信息得到待显示图片的位图。UI线程将位图作为资源信息传输至布局分析管理器中,由布局分析管理器将位图转换为纹理数据,获得待显示图片的纹理属性,即待显示图片的纹理数据作为该图片的纹理属性。可选地,待显示图片的纹理数据作为纹理分析的分析结果。
步骤1103:布局分析管理器根据布局分析结果以及纹理分析结果,进行混合分析,获得混合分析的分析结果。
示例性地,该布局分析管理获取布局分析结果以及纹理分析结果,可选地,该布局分析结果包括:各控件的尺寸信息、位置信息、可视性信息等。该纹理分析结果包括:待显示图片的纹理数据。
该布局分析管理器根据布局分析结果确定待显示图片的参考纹理数据。示例性地,该布局分析管理器获取的布局分析结果包括各控件的尺寸信息以及位置信息。GPU进行贴图的过程:将原始图片经过上采样或下采样复制到填充区域内,填充区域(图片视图控件)如13a中的1301所示,填充区域的尺寸信息通常采用像素单位,故本示例中可以以该填充区域的尺寸信息作为待显示图片的参考纹理数据。例如,如13a中1301的尺寸信息为480*841(像素),可以确定待显示图片的参考纹理数据为480*841。
该布局分析管理器将待显示图片的纹理数据(后文可以称为原始纹理数据)与参考纹理数据进行比较,获得纹理差异数据。图14为示例性示出的一张待显示图片与其对应的参考图片之间的差异的示意图。可选地,本示例中将待显示的图记为ResID,14a中的参考图可以为在填充区域填充与待显示图片相同内容后形成的图,该参考图也可以理解为用于填充该待显示图片的填充区域。如图14所示,该ResID的高度与参考图的高度之间的差异记为H-diff;如14b所示,ResID的宽度与参考图的宽度之间的差异记为W-diff。如图14所示,该ResID的分辨率大于参考图的分辨率,可以将该H-diff和W-diff作为该纹理差异数据。可选地,该纹理差异数据的值可以为正数,即纹理差异数据为高分辨率与低分辨率之间的差值,例如,若ResID的分辨率大于参考图的分辨率,该纹理差异数据包括:ResID的高-参考图的高;ResID的宽-参考图的宽。若若ResID的分辨率小于参考图的分辨率,该纹理差异数据包括:每个参考图的高与对应的ResID的高之间的差;每个参考图的宽与对应的ResID的宽之间的差,即纹理差异数据包括每个待渲染图像的纹理数据的原始分辨率与对应的参考分辨率之间的差值。
该布局分析管理器根据纹理差异数据,获得混合分析的分析结果。该混合分析的分析结果可以包括:纹理差异数据、布局的规模以及用于预处理组件(GPU或CPU)。可选地,布局的规模可以包括:控件的数量等。可选地,布局分析管理器可以根据布局分析结果获取控件的数量,例如,布局分析结果中包括各控件的尺寸信息、位置信息,即可统计出控件的数量。
可选地,混合分析的分析结果还可以包括其他信息,本示例中不再进行一一列举,例如,混合分析的分析结果中还可以包括:布局样式。
步骤1104:布局分析管理器判断该混合分析的分析结果是否满足预处理的条件。若确定混合分析的分析结果满足预处理的条件,则布局分析管理器执行步骤1105。若确定混合分析的分析结果不满足预处理的条件,则该布局分析管理器将直接将纹理数据传输至渲染线程,由渲染线程将纹理数据传输至GPU。
示例性地,布局分析管理器获取到混合分析的分析结果之后,判断当前的分析结果是否满足预处理的条件。本示例中,预处理的条件包括:分析结果与阈值组的集合中任一组阈值匹配。阈值组的集合包括N组阈值,每组阈值包含的种类与分析结果中的种类相对应。例如,混合分析的分析结果中包含:纹理差异数据、布局信息以及预处理组件;第N组阈值如图15的15a所示,包括第n个分辨率阈值(或称为纹理差异阈值)、第n个布局阈值(也称为数量阈值)以及第n次选择的处理方(也称为被选定组件):GPU,n为大于1的整数。即该纹理差异数据与分辨率阈值对应,布局信息与布局阈值对应,预处理组件与第n次选择的处理方对应。可选地,该分辨率阈值可以是预设的分辨率的临界值,形如W*H。该分辨率阈值还可以是指示纹理差异数据中各纹理数据的原始分辨率与参考分辨率之间差值所占的内存容量的临界值,例如,分辨率阈值可以是30M。
布局分析管理器将分析结果分别与阈值组的集合中每组阈值进行比较,如图15的15b所示。例如,分析结果与第一组阈值比较的过程为:该分析结果中的纹理差异数据与第1组分辨率阈值比较,若纹理差异数据所占内存容量超出第1组分辨率阈值(如该分辨率阈值为30M),则确定纹理差异数据与第1组阈值的分辨率阈值匹配。可选地,若该分辨率阈值为W*H(如30*50像素),该纹理差异数据中各差值与该分辨率阈值进行比较,若均超过该分辨率阈值,则确定纹理差异数据与第1组阈值的分辨率阈值匹配。
该分析结果中的第二项内容与第1组阈值中对应种类进行比较,即分析结果中的布局的规模与第1组阈值的第1个布局阈值(如待渲染图像的数量为5个)进行比较,若该布局的规模(如当前待渲染图像的数量为10个)超过第1个布局阈值(如待渲染图像的数量为5个),则确定布局的规模与第1组阈值的布局阈值匹配。该分析结果中第三项内容与第1组阈值中对应的种类进行比较,该分析结果中预处理组件为GPU,该1次选择的处理方为GPU(即被选定组件为GPU),若分析结果中的预处理组件与第1次选择的处理方相同,则确定分析结果中预处理组件与第1组阈值中选择的处理方匹配。
当布局分析管理器确定分析结果中每项内容均与第1组阈值中对应项匹配,则确定该分析结果与第1组阈值匹配。若布局分析管理器确定分析结果中存与第1组阈值中不匹配的项,则确定该分析结果与第1组阈值不匹配。该布局分析管理器将分析结果与其他组阈值比较的过程类似,可以参考将分析结果与第1组阈值比较的过程,此处不再进行赘述。
当布局分析管理器确定分析结果与阈值组的集合中任一组阈值匹配时,则该布局分析管理器确定混合分析的分析结果满足预处理的条件,布局分析管理器执行步骤1105。当布局分析管理器确定分析结果与阈值组的集合中每一组阈值均不匹配时,则该布局分析管理器确定混合分析的分析结果不满足预处理的条件,布局分析管理器直接将纹理数据传输至渲染线程,由渲染线程将纹理数据传输至GPU。
对纹理数据进行预处理是需要相当的开销的,如果是极少量纹理数据,并且是相近的显示结果,进行预处理会导致CPU/GPU增多了处理任务,没有优化纹理缓存,因而,需要当进行纹理数据预处理时需要有一个比较合理的阈值。例如,参考纹理数据与原始纹理数据之间仅有一个像素,该参考纹理数据和原始纹理数据相近,此时进行预处理并不会优化性能,反而会导致功耗的恶化。若当分析结果中某一项内容满足阈值就对纹理数据进行预处理,也会出现性能恶化的问题,例如,若纹理差异数据超过了阈值,而待显示的图片的数量只有一个,此时进行纹理数据的预处理,可能会导致功耗恶化的问题。本示例中,每个阈值组中包括多项内容,将分析结果中每项与阈值组中对应项内容进行比较,多项内容可以平衡比较的内容,使得判断过程更加准确,从而使得预处理的后的数据缓存时既可以避免缓存击穿的问题,又可以优化性能和功耗。
步骤1105:布局分析管理器将纹理数据传输至GPU或CPU处理。由GPU或CPU执行步骤1106。
步骤1106:将纹理数据传输至渲染线程。
步骤1105和步骤1106与图10中的1002和步骤1003相同,此处不再进行赘述。
在一些实施例中,电子设备可以通过训练方式获得该阈值组的集合,并由该布局分析管理器预先存储该阈值组的集合。
图16为示例性示出的训练阈值组的集合的示意图,示例性地,训练阈值组集合的过程分为两部分,第一训练部分采用布设有布局分析管理的结构,如图16中的步骤1601~1606;第二采用无布局分析管理的结构,即如图16中做左部分(即步骤1607)。
下面具体介绍各训练的各步骤:
步骤1601:布局分析管理器对布局信息进行布局分析。
该步骤与步骤1101类似,可以参照考步骤1101中的相关描述,此处不再进行赘述。本示例在训练过程中可以基于分辨率、控件的规模、功耗等方面进行训练,例如,布局信息、布局的规模、纹理数据以及预处理组件可以作为训练的样本输入数据。
举例来说,布局的样式、控件的尺寸信息、控件的数量、纹理数据以及预处理组件为CPU,作为样本输入数据。
步骤1602:布局分析管理器对资源信息进行纹理分析。
示例性地,该步骤中资源信息包括纹理数据,该步骤与步骤1102类似,可以参照考步骤1102中的相关描述,此处不再进行赘述。
步骤1603:布局分析管理器根据布局分析结果以及纹理分析结果,进行混合分析,获得混合分析的分析结果。
该步骤与步骤1103类似,可以参照考步骤1103中的相关描述,此处不再进行赘述。
步骤1604:布局分析管理器判断该混合分析的分析结果是否满足预处理的条件。若确定混合分析的分析结果满足预处理的条件,则布局分析管理器执行步骤1605。若确定混合分析的分析结果不满足预处理的条件,则停止流程。
本示例中,本示例中在训练过程中的可以预先设置用于训练阈值组,该训练阈值组中包含的种类与阈值组中包含的种类相同,可以设置训练阈值组中除被选定组件之外的各个训练阈值为最小值。例如,训练阈值组中的分辨率阈值为0,布局数量为0。将训练阈值组中除被选定组件之外的各个训练阈值为最小值,可以确保每次都对各样本图像的纹理数据进行预处理。
步骤1605:布局分析管理器将纹理数据传输至GPU或CPU处理。由GPU或CPU执行步骤1606。
步骤1606:将纹理数据传输至渲染线程,由渲染线程将纹理数据传输至GPU。
在本示例中,步骤1601~步骤1606中设置有布局分析管理器,对UI线程传输的纹理数据进行预处理。
步骤1607:渲染线程获取UI线程传输的布局信息、资源信息,并传输绘制指令以及纹理数据至GPU。
本示例中,在训练过程中第二训练部分中未设置布局分析管理器,采用与图3中相同的过程获取纹理数据。该渲染线程获取UI线程输出的布局信息和资源信息,其中,布局信息和资源信息与步骤1601中的布局信息和资源信息相同,以保持两种获取纹理数据的方式的输入数据相同。该渲染线程将根据布局信息生成绘制指令,将资源信息转换为纹理数据,该渲染线程将纹理数据传输至GPU中。
步骤1608:电子设备的功耗分析模块基于不同上传纹理数据的方式进行功耗分析,获得满足功耗的阈值组的集合。
示例性地,功耗分析模块分别计算第一训练部分的功耗以及第二训练部分的功耗,比较第一训练部分的功耗与第二训练部分的功耗,若第一训练部分的功耗小于第二训练部分的功耗,且第一训练部分的功耗与第二训练部分的功耗的差值超出预设的阈值,则功耗分析模块指示布局分析管理器根据第一训练部分的输入数据确定一组阈值组。可选地,布局分析管理根据样本页面的布局信息,确定各样本图像的参考分辨率。布局分析管理根据各样本图像的参考分辨率与原始分辨率之间的差值,确定分辨率阈值(即纹理差异阈值)。例如,布局分析管理器从各样本图像的原始分辨率与对应的参考分辨率之间的差值中选取最大值作为纹理差异阈值;或者,获取各样本图像的原始分辨率与对应的参考分辨率之间的差值的均值作为纹理差异阈值;或者,所述布局分析管理器获取每个样本图像的原始分辨率与对应的参考分辨率之间的差值,并获取所有差值所占内存的容量作为纹理差异阈值。
布局分析管理器可以根据样本的布局信息,确定布局规模的数量阈值。例如,根据布局信息,确定当前页面中的样本图像的数量为5个,则可以确定当前阈值组中的数量阈值为5。
在本次训练结束后,可以调整输入数据,以进行第二次训练,获得下一次训练的阈值组。例如,增大布局的规模后重新执行步骤1601~1608的步骤。通过调整输入数据,获得满足功耗的阈值组的集合。
以上步骤1601~步骤1608为训练阈值组集合的过程。
在一些实施例中,预处理后的纹理数据可以作为目标纹理数据,渲染线程将目标纹理数据传输至GPU。当GPU获取到目标纹理数据后,该GPU可以按照布局信息在填充区域填充对应图片的目标纹理数据。图17为示例性示出的GPU贴图的示意图。
如图17所示,17a中示出了4张图片的目标纹理数据,记为Des_1~ Des_4。17b中1701为待显示页面中的布局信息,该布局信息中包括各控件的位置信息以及每个控件指示显示的图片的信息。GPU按照在每个填充区域填充对应的图片的纹理数据,如17c所示,在显示界面1702中分别显示图片1703、图片1704、图片1705以及图片1706。
图18为示例性示出的GPU贴图的示意图。
如图18所示,当用户点击视频应用时,视频应用响应于用户的点击操作,从视频应用对应的服务器中下载待显示的4张图片。该4张图片分别为Res_1~ Res_4,其中,Res_1的分辨率为1095*1920;Res_2的分辨率为3767*6601;Res_3的分辨率为1095*1920,Res_4的分辨率为3767*6601。布局分析管理器根据UI线程传输的布局信息以及资源信息(即Res_1~Res_4的图片信息),获取混合分析的分析结果。该布局分析管理确定分析结构满足预处理的条件,则将Res_1~ Res_4的图片信息传输至GPU,有GPU对Res_1~ Res_4进行预处理,获得Res_1~ Res_4的目标纹理数据。目标纹理数据的分辨率为480*841,Res_1~ Res_4对应的目标纹理数据记为Des_1~ Des_4。与图17类似,GPU在填充区域填充对应图片的目标纹理数据,完成图片的渲染,即可现在界面中显示。
在另一些实施例中,UI线程可以将获取到的布局信息以及资源信息传输至渲染线程,由渲染线程将布局信息以及资源信息传输至该布局分析管理器,由布局分析管理器判断是否对资源信息进行预处理,若满足预处理的条件,该布局分析管理器将资源信息发送GPU/CPU进行预处理,GPU/CPU将预处理后的资源信息返回渲染线程。渲染线程传输绘制指令和预处理后的纹理数据至GPU,以进行图像的渲染,图像的渲染可以结合图19进行具体说明,图19为示例性示出的本申请中图像渲染的流程的示意图。该手机进行图像渲染的过程包括:
步骤1901:UI线程向渲染线程传输布局信息、资源信息。
该步骤与步骤301类似,相关描述可以参考步骤301中的描述,此处不再进行赘述。
步骤1902:渲染线程向布局分析管理器传输布局信息和资源信息。
示例性地,该布局分析管理器布设于应用程序框架层,当渲染线程接收到UI线程传输的布局信息和资源信息后,该渲染线程可以将布局信息以及资源信息传输至布局分析管理器。该布局分析管理器判断GPU/CPU对待显示的图片(即资源信息)是否进行预处理的过程与图11中的类似,此处不进行赘述,具体过程为:该布局分析管理器对布局信息进行布局分析,对资源信息进行纹理分析;布局分析管理器根据布局分析结果以及纹理分析结果,进行混合分析,获得混合分析的分析结果;布局分析管理器判断该混合分析的分析结果是否满足预处理的条件。若确定混合分析的分析结果满足预处理的条件,则布局分析管理器执行步骤1903。若确定混合分析的分析结果不满足预处理的条件,则该布局分析管理器将直接将纹理数据返回渲染线程,由渲染线程将纹理数据传输至GPU。
步骤1903:该布局分析管理器向GPU/CPU发送资源信息,由GPU/CPU对资源信息进行预处理。
该步骤的相关描述与步骤1002类似,此处不再进行赘述。
步骤1904:该GPU/CPU向渲染线程传输处理后的资源信息。
该步骤的相关描述与步骤1003类似,此处不再进行赘述。
步骤1905:渲染线程传输绘制指令和纹理数据。
示例性地,渲染线程获取到预处理后的纹理数据,可以将该预处理后的纹理数据作为参考纹理数据。该渲染线程根据布局信息可以生成绘制指令,并将绘制指令和参考纹理数据传输至GPU。
该步骤与步骤302的相关描述类似,此处将不再进行赘述。
步骤1906:该GPU向缓冲器队列传输渲染后的数据。
该步骤与步骤303的相关描述类似,此处将不再进行赘述。
步骤1907:合成器从缓冲器队列获取渲染后的数据,合成每帧显示的图像。
该步骤与步骤304的相关描述类似,此处将不再进行赘述。
本实例中,布局分析管理器根据布局分析结果和纹理分析结果,进行混合分析,获得混合分析结果,对混合分析结果进行判断,以确定是否对纹理数据进行预处理。若需要进行预处理,由GPU/CPU对纹理数据进行预处理,以使得处理后的纹理数据符合填充区域的大小。由于预先对纹理数据进行了处理,使得渲染线程将纹理数据传输至GPU时,无需对纹理数据进行采样,提高传输的速度。同时预先对纹理数据进行预处理,使得纹理数据减小,降低缓存中的占比,从而避免出现缓存击穿的问题。
图20为示例性示出的本申请与现有技术中输入GPU的纹理数据的示意图。
如图20的20a所示,视频应用程序下载的图片分别为IMG1~IMG3,IMG1的分辨率为1095*1920、IMG2的分辨率为3767*6601、IMG3的分辨率为1095*1920,UI线程获取IMG1~IMG3的纹理数据,本示例中,应用程序框架层设置有布局分析管理器,该渲染线程获得预处理后的纹理数据,如20a所示,经预处理后IMG1的分辨率为480*841;IMG2的分辨率为480*841、IMG3的分辨率为480*841;输入GPU的纹理数据的分辨率均变为480*841。由于分辨率降低,降低了每张图片所占内存的空间。
如图20的20b所示,视频应用程序下载的图片分别为IMG1~IMG3,IMG1的分辨率为1095*1920、IMG2的分辨率为3767*6601、IMG3的分辨率为1095*1920,UI线程获取IMG1~IMG3的纹理数据,并将纹理数据传输至渲染线程,渲染线程将IMG1~IMG3的图片的纹理数据传输至GPU。渲染线程传输的IMG1的分辨率为1095*1920、IMG2的分辨率为3767*6601、IMG3的分辨率为1095*1920。
本示例中,未经过预处理的图片占用内存大,且传输消耗的时间长。本申请中对纹理数据进行预处理后,使得双倍速同步动态随机存储器(Double data rete,“DDR”)的缓存显著减小,可以提高应用内存的驻留个数,提高电子设备的整体运行速率。同时,由于纹理数据的减小,可以减少GPU读取数据的量。也可以减少GPU进行插值运算的次数,如果满足某些场景的情况可能GPU完全不需要运算,直接进行内存拷贝渲染。
本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。
本申请实施例的说明书和权利要求书中的术语“第一”和“第二”等是用于区别不同的对象,而不是用于描述对象的特定顺序。例如,第一目标对象和第二目标对象等是用于区别不同的目标对象,而不是用于描述目标对象的特定顺序。
在本申请实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本申请实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。
在本申请实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。例如,多个处理单元是指两个或两个以上的处理单元;多个系统是指两个或两个以上的系统。
本申请各个实施例的任意内容,以及同一实施例的任意内容,均可以自由组合。对上述内容的任意组合均在本申请的范围之内。
上面结合附图对本申请的实施例进行了描述,但是本申请并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本申请的启示下,在不脱离本申请宗旨和权利要求所保护的范围情况下,还可做出很多形式,均属于本申请的保护之内。

Claims (16)

1.一种图像的渲染方法,其特征在于,应用于电子设备,所述电子设备的应用程序框架层设置有布局分析管理器,所述应用程序框架层产生了渲染线程,所述方法包括:
所述布局分析管理器获取当前帧中待显示页面的布局信息以及所述待显示页面中每个待渲染图像的纹理数据;
所述布局分析管理器根据所述布局信息确定每个待渲染图像的尺寸信息,并将每个待渲染图像的尺寸信息作为各自对应的纹理数据的参考分辨率;
所述布局分析管理器根据所述布局信息、每个纹理数据的原始分辨率以及每个纹理数据对应的参考分辨率,判断是否需要对每个纹理数据进行预处理;
所述布局分析管理器若确定需要对每个纹理数据进行预处理,则将每个所述纹理数据传输至预处理组件;
所述预处理组件将每个纹理数据的原始分辨率调整至对应的参考分辨率,其中,在确定需要对每个纹理数据进行预处理的情况下,每个所述纹理数据的原始分辨率大于对应的参考分辨率;
所述预处理组件将调整后的每个纹理数据传输至所述渲染线程;
所述渲染线程将调整后的每个纹理数据传输至图形处理器单元GPU,以供所述GPU进行图像渲染。
2.根据权利要求1所述的方法,其特征在于,所述布局分析管理器根据所述布局信息、每个纹理数据的原始分辨率以及每个纹理数据对应的参考分辨率,判断是否需要对每个纹理数据进行预处理,包括:
所述布局分析管理器获取每个纹理数据的原始分辨率与对应的所述参考分辨率之间的差值作为纹理差异数据;
所述布局分析管理器根据所述纹理差异数据以及所述布局信息,确定当前帧的分析结果,所述分析结果至少包含两个不同的种类,其中一个种类为所述纹理差异数据,其他种类包括:待渲染图像的数量和/或用于预处理所述当前帧的预处理组件;
所述布局分析管理器将所述分析结果与预存的多个阈值组进行比较,若检测到存在与所述分析结果匹配的阈值组,则确定需要对每个纹理数据进行预处理,每个所述阈值组中包含的种类与所述分析结果中包含的种类相同。
3.根据权利要求2所述的方法,其特征在于,在所述布局分析管理器判断是否需要对每个纹理数据进行预处理之前,所述方法还包括:训练获得阈值组;
每次训练获得阈值组的过程如下:
所述布局分析管理器获取本次训练的样本页面的样本布局信息以及所述样本页面中各样本图像的纹理数据;
所述布局分析管理器根据所述样本布局信息以及所述样本图像的纹理数据,将各样本图像的纹理数据传输至预处理组件;
所述预处理组件对各样本图像的纹理数据进行预处理,并将预处理后的各纹理数据传输至所述渲染线程;
所述渲染线程根据所述样本布局信息生成绘制指令;
所述渲染线程将所述绘制指令以及预处理后的各纹理数据传输至所述GPU,由所述电子设备中的功耗分析模块获得所述GPU渲染各样本图像的第一功耗;
所述渲染线程将所述绘制指令以及各样本图像的纹理数据传输至所述GPU,由所述功耗分析模块获得所述GPU渲染各样本图像的第二功耗;
所述功耗分析模块若检测到所述第一功耗小于所述第二功耗,且所述第二功耗与所述第一功耗之间的差值超出预设的功耗阈值,则所述功耗分析模块指示所述布局分析管理器根据所述本次训练的样本页面的样本布局信息以及所述样本页面中各样本图像的纹理数据确定本次训练的阈值组。
4.根据权利要求3所述的方法,其特征在于,所述功耗分析模块指示所述布局分析管理器根据所述本次训练的样本页面的样本布局信息以及所述样本页面中各样本图像的纹理数据确定本次训练的阈值组,包括:
所述布局分析管理器获取所述样本页面的样本布局信息,确定所述样本页面中待显示图像的数量;
所述布局分析管理器根据所述样本布局信息,确定各样本图像的参考分辨率;
所述布局分析管理器根据各样本图像的原始分辨率与对应的参考分辨率之间的差值,确定本次训练中的纹理差异阈值;
所述布局分析管理器将本次训练中的预处理组件作为被选定组件;
将所述纹理差异阈值、所述样本页面中样本图像的数量以及所述被选定组件作为所述本次训练的阈值组。
5.根据权利要求4所述的方法,其特征在于,所述布局分析管理器根据各样本图像的原始分辨率与对应的参考分辨率之间的差值,确定本次训练中的纹理差异阈值,包括:
所述布局分析管理器从各样本图像的原始分辨率与对应的参考分辨率之间的差值中选取最大值作为所述纹理差异阈值;
或者,所述布局分析管理器获取各样本图像的原始分辨率与对应的参考分辨率之间的差值的均值作为所述纹理差异阈值;
或者,所述布局分析管理器获取每个样本图像的原始分辨率与对应的参考分辨率之间的差值,并获取所有差值所占内存的容量作为所述纹理差异阈值。
6.根据权利要求2所述的方法,其特征在于,所述布局分析管理器根据所述纹理差异数据以及所述布局信息,确定当前帧的分析结果,包括:
所述布局分析管理器根据所述布局信息,确定待渲染图像的数量;
所述布局分析管理器将所述纹理差异数据以及所述待渲染图像的数量作为所述分析结果,或者,将所述纹理差异数据、所述待渲染图像的数量以及预设的预处理组件作为所述分析结果。
7.根据权利要求5所述的方法,其特征在于,所述布局分析管理器将所述分析结果与预存的多个阈值组进行比较,包括:
针对所述分析结果与任一阈值组进行比较的过程,包括:
所述布局分析管理器检测所述分析结果中是否每个种类的内容均与所述阈值组中对应种类的内容匹配,若检测到所述分析结果中每个种类的内容与所述阈值组中对应种类的内容均匹配,则所述布局分析管理器确定检测到存在与所述分析结果匹配的阈值组。
8.根据权利要求7所述的方法,其特征在于,所述分析结果中包括纹理差异数据,所述阈值组中包括与所述纹理差异数据对应的纹理差异阈值,所述纹理差异阈值为每个样本图像的原始分辨率与对应的参考分辨率之间的差值中的最大值;
所述布局分析管理器检测所述纹理差异数据是否与所述阈值组中对应的纹理差异阈值匹配,包括:
所述布局分析管理器检测所述纹理差异数据中各差值是否均超出所述纹理差异阈值,若确定所述纹理差异数据中各差值均超过所述纹理差异阈值,则确定纹理差异数据与所述阈值组中对应的纹理差异阈值匹配。
9.根据权利要求7所述的方法,其特征在于,所述分析结果中包括纹理差异数据,所述阈值组中包括与所述纹理差异数据对应的纹理差异阈值,所述纹理差异阈值为所述纹理差异数据所占内存容量的临界值;
所述布局分析管理器检测所述纹理差异数据是否与所述阈值组中对应的纹理差异阈值匹配,包括:
所述布局分析管理器检测所述纹理差异数据所占内存容量是否超出所述纹理差异阈值,若确定纹理差异数据所占内存容量超过所述纹理差异阈值,则确定所述纹理差异数据与所述阈值组中对应的纹理差异阈值匹配。
10.根据权利要求7所述的方法,其特征在于,若所述分析结果中包括待渲染图像的数量,所述阈值组中包括与所述待渲染图像的数量对应的数量阈值;
所述布局分析管理器检测所述待渲染图像的数量是否与所述阈值组中对应的数量阈值匹配,包括:
所述布局分析管理器检测所述待渲染图像的数量是否大于或等于所述数量阈值,若确定所述待渲染图像的数量大于或等于所述数量阈值,则所述布局分析管理器确定所述待渲染图像的数量与所述阈值组中对应的数量阈值匹配。
11.根据权利要求7所述的方法,其特征在于,若所述分析结果中包括预处理组件,所述阈值组中包括与所述预处理组件对应的被选定组件;
所述布局分析管理器检测所述预处理组件是否与所述阈值组中对应的被选定组件匹配,包括:
所述布局分析管理器检测所述预处理组件与所述阈值组中对应的被选定组件是否相同,若确定相同,则所述布局分析管理器确定所述预处理组件与所述阈值组中对应的被选定组件匹配。
12.根据权利要求2所述的方法,其特征在于,所述预处理组件包括GPU或CPU。
13.根据权利要求1所述的方法,其特征在于,所述应用程序框架层还产生了用户界面UI线程;
所述布局分析管理器获取当前帧中待显示页面的布局信息以及所述待显示页面中每个待渲染图像的纹理数据,包括:
所述UI线程获取当前帧中待显示页面的布局信息以及所述待显示页面中待渲染图像的图片信息;
所述UI线程将当前帧中待显示页面的布局信息以及各所述待渲染图像的图片信息传输至所述布局分析管理器;
所述布局分析管理器对每个所述图片信息进行转换,生成每个所述待渲染图像的纹理数据。
14.根据权利要求1所述的方法,其特征在于,所述应用程序框架层还产生了用户界面UI线程;
所述布局分析管理器获取当前帧中待显示页面的布局信息以及所述待显示页面中每个待渲染图像的纹理数据,包括:
所述UI线程获取当前帧中待显示页面的布局信息以及所述待显示页面中各待渲染图像的图片信息;
所述UI线程将当前帧中待显示页面的布局信息以及所述待显示页面中各待渲染图像的图片信息传输至渲染线程;
所述渲染线程将各待渲染图像的图片信息转化为纹理数据;
所述渲染线程将当前帧中所述待显示页面的布局信息和各纹理数据传输至所述布局分析管理器。
15.一种电子设备,其特征在于,包括;
存储器和处理器,所述存储器与所述处理器耦合;
所述存储器存储有程序指令,当所述程序指令由所述处理器执行时,使得所述电子设备执行如权利要求1-14中任一项所述的图像的渲染方法。
16.一种计算机可读存储介质,其特征在于,包括计算机程序,当所述计算机程序在电子设备上运行时,使得所述电子设备执行如权利要求1-14中任一项所述的图像的渲染方法。
CN202210646792.4A 2022-06-09 2022-06-09 图像的渲染方法、电子设备及存储介质 Active CN114745570B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202210646792.4A CN114745570B (zh) 2022-06-09 2022-06-09 图像的渲染方法、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202210646792.4A CN114745570B (zh) 2022-06-09 2022-06-09 图像的渲染方法、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN114745570A CN114745570A (zh) 2022-07-12
CN114745570B true CN114745570B (zh) 2022-11-11

Family

ID=82287537

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202210646792.4A Active CN114745570B (zh) 2022-06-09 2022-06-09 图像的渲染方法、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN114745570B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116095512B (zh) * 2022-07-15 2024-04-02 荣耀终端有限公司 终端设备的拍照方法及相关装置

Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455571A (zh) * 2013-08-19 2013-12-18 小米科技有限责任公司 网页中的图片显示方法、装置及终端
CN109254818A (zh) * 2018-08-28 2019-01-22 北京影谱科技股份有限公司 针对浏览器不同分辨率的像素级定位方法和装置
CN110377264A (zh) * 2019-07-17 2019-10-25 Oppo广东移动通信有限公司 图层合成方法、装置、电子设备及存储介质
CN112235626A (zh) * 2020-10-15 2021-01-15 Oppo广东移动通信有限公司 视频渲染方法、装置、电子设备及存储介质
CN112241932A (zh) * 2019-07-19 2021-01-19 华为技术有限公司 一种图片处理方法及装置
WO2021008420A1 (zh) * 2019-07-17 2021-01-21 Oppo广东移动通信有限公司 图层合成方法、装置、电子设备及存储介质
CN112328353A (zh) * 2021-01-06 2021-02-05 腾讯科技(深圳)有限公司 子应用播放器的展示方法、装置、电子设备和存储介质
CN113015021A (zh) * 2021-03-12 2021-06-22 腾讯科技(深圳)有限公司 云游戏的实现方法、装置、介质及电子设备
CN113409411A (zh) * 2021-05-26 2021-09-17 腾讯科技(深圳)有限公司 图形界面的渲染方法、装置、电子设备及存储介质
CN114241105A (zh) * 2021-12-06 2022-03-25 网易(杭州)网络有限公司 界面渲染方法、装置、设备和计算机可读存储介质

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6847467B2 (en) * 2001-11-01 2005-01-25 Hewlett-Packard Development Company, L.P. Method and apparatus for low memory rendering
US8547378B2 (en) * 2008-08-28 2013-10-01 Adobe Systems Incorporated Time-based degradation of images using a GPU
US20120192063A1 (en) * 2011-01-20 2012-07-26 Koren Ziv On-the-fly transformation of graphical representation of content
KR102315280B1 (ko) * 2014-09-01 2021-10-20 삼성전자 주식회사 렌더링 장치 및 방법
US10776907B2 (en) * 2018-10-24 2020-09-15 Adobe Inc. Dynamic image resolution adjustment for rendering changes to graphical content
CN112348732B (zh) * 2019-08-08 2023-11-17 华为技术有限公司 基于图形渲染管线的模型推理方法、装置及存储介质
CN110570505B (zh) * 2019-09-11 2020-11-17 腾讯科技(深圳)有限公司 一种图像渲染方法、装置、设备及存储介质
CN113934500A (zh) * 2021-11-03 2022-01-14 杭州逗酷软件科技有限公司 渲染方法、装置、存储介质及电子设备

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103455571A (zh) * 2013-08-19 2013-12-18 小米科技有限责任公司 网页中的图片显示方法、装置及终端
CN109254818A (zh) * 2018-08-28 2019-01-22 北京影谱科技股份有限公司 针对浏览器不同分辨率的像素级定位方法和装置
CN110377264A (zh) * 2019-07-17 2019-10-25 Oppo广东移动通信有限公司 图层合成方法、装置、电子设备及存储介质
WO2021008420A1 (zh) * 2019-07-17 2021-01-21 Oppo广东移动通信有限公司 图层合成方法、装置、电子设备及存储介质
CN112241932A (zh) * 2019-07-19 2021-01-19 华为技术有限公司 一种图片处理方法及装置
CN112235626A (zh) * 2020-10-15 2021-01-15 Oppo广东移动通信有限公司 视频渲染方法、装置、电子设备及存储介质
CN112328353A (zh) * 2021-01-06 2021-02-05 腾讯科技(深圳)有限公司 子应用播放器的展示方法、装置、电子设备和存储介质
CN113015021A (zh) * 2021-03-12 2021-06-22 腾讯科技(深圳)有限公司 云游戏的实现方法、装置、介质及电子设备
CN113409411A (zh) * 2021-05-26 2021-09-17 腾讯科技(深圳)有限公司 图形界面的渲染方法、装置、电子设备及存储介质
CN114241105A (zh) * 2021-12-06 2022-03-25 网易(杭州)网络有限公司 界面渲染方法、装置、设备和计算机可读存储介质

Also Published As

Publication number Publication date
CN114745570A (zh) 2022-07-12

Similar Documents

Publication Publication Date Title
US11344806B2 (en) Method for rendering game, and method, apparatus and device for generating game resource file
US9418171B2 (en) Acceleration of rendering of web-based content
US7864186B2 (en) Device-specific content versioning
AU2011264509B2 (en) Adaptive image rendering and use of imposter
CN110377263B (zh) 图像合成方法、装置、电子设备及存储介质
KR101952983B1 (ko) 콘텐트의 타일-기반 렌더링을 위한 방법 및 콘텐트를 렌더링하기 위한 시스템
US20070226655A1 (en) Electronic Device
US5530799A (en) Rendering cache in an object oriented system
US8595640B2 (en) Render transform based scrolling and panning for smooth effects
JP2010527077A (ja) レンダリング後のグラフィックスオーバーレイ
CN110020300B (zh) 一种浏览器页面合成方法及终端
CN111209422A (zh) 图像显示方法、装置、电子设备及存储介质
US20150348278A1 (en) Dynamic font engine
EP4257217A1 (en) Image processing method, electronic device, and storage medium
US20230419454A1 (en) Control blurring method and apparatus, terminal device, and readable storage medium
CN114745570B (zh) 图像的渲染方法、电子设备及存储介质
US20190080017A1 (en) Method, system, and device that invokes a web engine
CN110471700B (zh) 图形处理方法、装置、存储介质及电子设备
CN114443189B (zh) 一种图像处理方法和电子设备
CN112449230B (zh) 字符串显示处理方法、装置、终端及存储介质
CN106326186B (zh) 一种片上系统、图形绘制方法、中间层及嵌入式设备
CN114995929B (zh) 一种弹窗的显示方法及装置
CN116503529A (zh) 渲染、3d画面控制方法、电子设备和计算机可读存储介质
CN111460342A (zh) 页面的渲染展示方法、装置、电子设备及计算机存储介质
CN113900740A (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
GR01 Patent grant
GR01 Patent grant