hwui简介

article/2025/11/6 12:52:51

简介:

hwui主要是android用于2d硬件绘图而加入的一个模块,在hwui之前,android主要是用skia来进行软件绘制,后由于绘制性能等问题,现在android的绘图几乎都是使用了hwui硬件加速绘图。hwui主要则是使用opengles来进行gpu硬件绘图,提升整个系统的绘制性能,主要有以下方式:直接渲染,显示列表渲染,延时渲染列表,分别代表的类为:OpenGLRenderer,DisplayListRenderer,DeferredDisplayList。

直接渲染:


OpenGLRenderer这个类是DisplayListRenderer和LayerRenderer的基类,也是最终的实现类,该类中包含了所有的绘制函数,也称为立即绘制,如果可以的话是可以不需要其他子类的继承,直接调用就可以用于绘制的,但是如果直接由应用直接频繁调用该接口将会影响系统的绘制性能,这也就是为什么引入显示列表的原因了。

显示列表渲染:

DisplayListRenderer这个类用于将全部的绘图指令保存在DisplayListData这个结构中。显示列表是一定会使用的,其目的就是将全部的绘图指令全部保存起来,而不是立即绘制,其实显示列表渲染,就是一种延时渲染了,将指令存储起来的目的是防止频繁的调用opengl接口,由于GPU的运算很快,如果较为频繁的调用OpenGL的API,不仅会影响它执行的性能,同时也会增加系统的功耗,所以android采用了显示列表的形式,将全部的命令存储起来,等最后命令都收集完后,调用drawDisplayList,一次性将全部的绘图指令释放,能够提升GPU运行性能,在Android4.2之前都是采用这套绘制方式进行硬件加速的。

延时渲染列表:

在Android4.4之后,加入了延时渲染列表,DeferredDisplayList是基于DisplayListRenderer的基础上,当将显示列表构建好后,调用drawDisplayList时,开始构建延时渲染列表,延时渲染相对显示列表主要做了一下优化工作:
1. 通过计算过度绘制区域,将明显的且被覆盖的区域剔除,从而能够减少过度绘制和减少绘制指令。(其实google完全可以在hwui层中将过度绘制区域全部剔除,可以做到几乎不存在过度绘制的情况,估计也有考虑将过度绘制区域裁剪,将会引入更多的绘图指令与裁剪区域,估计性能不佳,或者google的下一个版本将会有该功能)
2. 将绘图指令进行分批次(Batch),将相同的绘制指令,但是不相交的区域(不能相交是为了防止层级之间绘制错乱的问题),将这个全部合并为一次绘制指令(也称为multiDraw),只要设置好相对应的纹理坐标等,就能在一次绘制指令中完成,即减少了多次调用绘制指令,也减少了多次的着色器上传等,同时也将相同批次一起绘制,减少了渲染状态的切换,较少着色器的上传等,能够较大提升系统的性能。(现在支持合并区域绘制的有DrawTextOp,DrawBitmapOp,DrawPatchOp)
3. 将相同绘制指令,但是不能合并的绘制指令,且不能相交的区域,组成一个DrawBatch,这样做的目的也是为了减少渲染状态的切换,提升系统的绘制性能。

http://chatgpt.dhexx.cn/article/EkrW5mer.shtml

相关文章

【深度】广告流量分配HWM算法

在广告投放系统中,广告通常分为保量交付广告(Guaranteed Delivery,GD,合约广告)和不保量交付(Non-Guaranteed Delivery,NGD,竞价广告)两种。合约广告是提前签好合约的&am…

Oracle-HWM(High Water Mark) 高水位解读

读前须知:Oracle的逻辑存储管理 ORACLE在逻辑存储上分4个粒度 ,由大到小为: 表空间, 段, 区 和 块. 块Block 块:是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而…

Oracle 高水位(HWM: High Water Mark) 说明

一. 准备知识:ORACLE的逻辑存储管理. ORACLE在逻辑存储上分4个粒度: 表空间, 段, 区 和 块. 1.1 块: 是粒度最小的存储单位,现在标准的块大小是8K,ORACLE每一次I/O操作也是按块来操作的,也就是说当ORACLE从数据文件读数据时,是读取多少个块,而不是多少行. 每一个B…

分析HWM

下面结合官方文档和实验介绍下HWM: 以下英文摘自11gR2官方文档: HWM(high water mark):The boundary between used and unused space in a segment. ORACLE9i之后开始使用自动段空间管理即ASSM,它使用位图来管理段空间的使用情况,如果表空间ASSM,则表空间…

【计算广告】在线分配算法之 —— HWM(High water mark)介绍

该算法是雅虎工程师提出的一个解决合约制广告或者说GD(担保式投放)投放系统在线分配问题的贪心算法,思路很直接,下面是本人对照其论文整理的思路,里面有自己的理解。 论文题目:Ad Serving Using a Compact…

IMEI 码的校验和生成

IMEI 码的校验和生成 文章目录 IMEI 码的校验和生成IMEI 码Luhn算法代码实现C IMEI 码 IMEI 码,即手机的串号。它是 International Mobile Equipment Identity( 国际移动设备身份) 的简称,就像是手机的身份证,是用来帮助辨别手机身份真伪的。…

Android获取手机设备识别码(IMEI)和手机号码

最近看了下获取手机设备ID和手机信息以及SIM的信息例子,主要还是借鉴别人的,现在自己写一下,算是巩固加深了,也希望能给大家一个参考 必要的条件还是一部真机,SIM卡或者UIM卡。 首先,在AndroidMainfest.x…

手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)

文章目录 Android篇1 IMEI和MEID2 DeviceId3 mac地址4 ANDROID_ID5 UUID6 OpenUDID7 Serial Number8 IDFA9 GAID iOS篇1 IMEI2 IDFA3 mac地址4 UDID5 UUID6 如何正确的获取设备的唯一标识7 什么是钥匙串 Android篇 1 IMEI和MEID (1) IMEI (International Mobile Equipment Id…

什么是IMEI / MEID?他们有什么不同?

摘要: 最近小编了解到一个新的概念:MEID码。说实话,一开始小编并不了解这是个什么。小编以为是不是打字的时候打错了啊,是不是要了解的是IMEI码呢?后来百度了一下才知道我理解错了。小编就做一回好学生,在苹果手机找回…

手机IMEI码规则介绍

2019独角兽企业重金招聘Python工程师标准>>> 手机IMEI码由15-17位数字组成。 第一部分 TAC,Type Allocation Code,类型分配码,由8位数字组成(早期是6位),是区分手机品牌和型号的编码&#xff0c…

android 华为 imei,华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei...

华为手机怎么查看IMEI码?华为手机查询IMEI串号两种方法,华为imei 每一部手机的串号都是不同的,如果想要查看华为手机的IMEI串号,我们该怎么样来查询呢?下面一起来看看操作的方法吧。 华为手机查询IMEI串号两种方法 方法…

IMEI是什么? 怎样查手机串号IMEI

IMEI的基本含义 IMEI(International Mobile Equipment Identity,移动设备国际识别码,又称为国际移动设备标识)是手机的唯一识别号码。我们从这个缩写的全称中来分析它的含义:“移动设备”就是手机,不包括便…

智能手机串号IMEI码丢失(无效IMEI)解决恢复办法

本方法本少爷亲测可行,故做一记录如下: 准备工作: 1、手机已经ROOT。没有ROOT的下载ROOT大师即可ROOT。 2、下载移动叔叔工具箱 3、下载MTK6575主板序列号及IMEI生成器 详细步骤 1、记录你的手机IMEI串号:IMEI串号,可以…

手机的imei号的获取

手机的设备信息,是我们在做证书验证的时候不可缺少的,这里我会写一些我们常用的手机信息获取办法。TelephonyManager是我们手机管理的一个大的类,继承的Object。 1核心代码和权限 Context.getSyste…

获取手机唯一识别码IMEI

前言 获取IMEI相信大家非常熟悉,但是项目中使用时,发现当手机卡为电信的时候,获取的并不是IMEI,而是MEID,什么是MEID,为什么会出现这种情况呢? IMEI国际移动设备识别码(IMEI&#xf…

IMEI、IMSI、ICCID、SN是什么?意义和区别?通信模组或手机的唯一识别码

最近在做几个4G移动端的产品,初入行门有很多生涩的名词。想获取一个全球唯一ID作为设备后台管理编号,就扯出了 IMEI、IMSI、ICCID、SN 这几个东西。 IMEI IMEI:国际移动设备识别码 (International Mobile Equipment Identity&…

ProtcolBuffer基础原理

Protocol Buffer由Google出品的一款轻量而高效的数据序列化和反序列化的方法,下面的我们来介绍一下Protocol Buffer的内部实现原理。 1.类实例 编码包括数据的编解码和函数方法的还原 2.ProtcolBuffer的数据类型 TypeMeaningUsed For0Varintint32, int64, uint32, uint64,…

ADI Blackfin DSP处理器-BF533的开发详解13:LDF内存分配的详解(含源代码)

硬件准备 ADSP-EDU-BF533:BF533开发板 AD-HP530ICE:ADI DSP仿真器 软件准备 Visual DSP软件 硬件链接 功能介绍 ADSP上的LDF(Linker Description Files)连接器描述文件是处理器用来进行资源分配的文件,通过对LDF文…

M4内核的FPU/DSP使用总结

FPU简介 近年,在Cortex-M3之后ARM公司又推出Cortex-M4内核,ARM Cortex-M4处理器是由ARM专门开发的最新嵌入式处理器,在M3的基础上强化了运算能力,新加了浮点、DSP、并行计算等。Cortex-M4处理器的最大亮点之一,也是本文…

【STM32F407的DSP教程】第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波)

完整版教程下载地址:http://www.armbbs.cn/forum.php?modviewthread&tid94547 第37章 STM32F407的FIR低通滤波器实现(支持逐个数据的实时滤波) 本章节讲解FIR低通滤波器实现。 目录 37.1 初学者重要提示 37.2 低通滤波器介绍…