前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android硬件加速原理和简介

Android硬件加速原理和简介

作者头像
Demo_Yang
发布2018-10-15 15:52:06
1.5K0
发布2018-10-15 15:52:06
举报
文章被收录于专栏:yang0rangeyang0range

例:实现一个圆角矩形通常有两个方案:

1.使用PNG图片

原理:使用PNG图片(BitmaoDrable)解码PNG图片生成Bitmap,传到底层,有GPU渲染图片解码,消耗CPU运算资源,Bitmap占内存大,绘制慢。

2.使用代码(XML或者Java)实现

绘制使用XMl或者Java代码实现(ShapeDrawable)直接将shape信息传到底层,由GPU渲染消耗CPU资源少,占内存少,绘制快。

3.CPU和GPU结构对比

CPU:中央处理器,是计算机设备核心器件,用于执行程序代码

GPU:图形处理器,主要用于处理图形运算,通常所说的“显卡”的核心部件就是GPU

4.硬件加速原理:就是通过底层软件代码,将CPU不擅长的图形运算转换成GPU专用指令,由GPU完成


Android中的硬件加速

大多数界面都是利用常规的View来构建的。

DisplayList

DisplayList是一个基本绘制元素,包含元素原始的属性(位置、尺寸、角度、透明度等)对应的Canvas的draw xxx()方法。

信息的传递流程:

Canvas(Java API)——》OpenGL(C/C++)——》驱动程序——》GPU

在Android4.1及以上版本,DisplayList支持属性,如果View的属性发生变化(比如Scala,Apla,Tranlate)只需把属性更新给GPU,不需要生成新的DisplayList。

RenderNode

一个RenderNode包含若干个DisPlayList通常一个RenderNode对应一个View,包含View自身及其子View的所有DisPlayList。

Android的绘制流程:

绘制步骤:

1.从ViewRootImpl.perform Traversals到phoneWindow DecraView.drawchild 是每次遍历,VIew树的固定流程。首先根据标志位判断是否需要重新布局并执行布局。然后进行Canvas的创建等操作开始绘制

①如果硬件加速不支持或者被关闭,则使用软件绘制,生成的Canvas即Canvas.class的对象

②如果支持硬件加速,则生成的是DisplayList Canvas.class 对象

③两者的isHardwarve Accelerated()的方法返回的值分别是false,true,View根据这个值判断硬件是否加速

2.VIew中的draw (cavas,parent,drawingTime)——draw——onDraw——dispatchDraw——drawchild这条递归路径(简称Draw路径)调用了Canvas.draw xxx()方法,在软件渲染时用于实际绘制,在硬件加速时,用于构建Displaylist。

3.View中的updateDisplayListIfDirty——dispatchGet——playList——recreatechildDisplayList这条递归路基(简称DisplayList路径)仅在硬件加速时会经过用于在遍历VIew树绘制的过程中更新DisplayList属性,并快速跳过不需要重建DisplayList的View。

4.在硬件加速情况下,draw流程执行结束后DisplayList的构建完成,然后通过ThreadedRender.nSyAndDrawFrame()利用GPU绘制DisplayList到屏幕上。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.03.09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档