Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Android硬件加速原理和简介

Android硬件加速原理和简介

作者头像
Demo_Yang
发布于 2018-10-15 07:52:06
发布于 2018-10-15 07:52:06
1.6K0
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Android硬件加速介绍与实现
概述 在手机客户端尤其是Android应用的开发过程中,我们经常会接触到“硬件加速”这个词。由于操作系统对底层软硬件封装非常完善,上层软件开发者往往对硬件加速的底层原理了解很少,也不清楚了解底层原理的意义,因此常会有一些误解,如硬件加速是不是通过特殊算法实现页面渲染加速,或是通过硬件提高CPU/GPU运算速率实现渲染加速。 本文尝试从底层硬件原理,一直到上层代码实现,对硬件加速技术进行简单介绍,其中上层实现基于Android 6.0。 硬件加速对App开发的意义 对于App开发者,简单了解硬件加速原理及上层
xiangzhihong
2018/01/26
1.6K0
理解Android硬件加速原理的小白文
硬件加速,直观上说就是依赖GPU实现图形绘制加速,软硬件加速的区别主要是图形的绘制究竟是GPU来处理还是CPU,如果是GPU,就认为是硬件加速绘制,反之,软件绘制。在Android中也是如此,不过相对于普通的软件绘制,硬件加速还做了其他方面优化,不仅仅限定在绘制方面,绘制之前,在如何构建绘制区域上,硬件加速也做出了很大优化,因此硬件加速特性可以从下面两部分来分析:
看书的小蜗牛
2018/06/29
2K0
理解Android硬件加速原理的小白文
软件绘制 & 硬件加速绘制 【DisplayList & RenderNode】
两者都是从SF获取一块内存,绘制都是在APP端,绘制好后都是通知SF去进行合成图层
北洋
2023/09/18
6870
软件绘制 & 硬件加速绘制 【DisplayList & RenderNode】
两者都是从SF获取一块内存,绘制都是在APP端,绘制好后都是通知SF去进行合成图层
小柔
2022/10/09
1.5K0
软件绘制 & 硬件加速绘制 【DisplayList & RenderNode】
硬件渲染源码分析流程详解
硬件渲染中采用AttachInfo的mThreadRenderer.draw方法传入view,attachinfo和ViewRootImpl开始硬件渲染。
小柔
2022/10/09
1.2K0
Android硬件加速(二)-RenderThread与OpenGL GPU渲染
Android4.0之后,系统默认开启硬件加速来渲染视图,之前,理解Android硬件加速的小白文简单的讲述了硬件加速的简单模型,不过主要针对前半阶段,并没怎么说是如何使用OpenGL、GPU处理数据的,OpenGL主要处理的任务有Surface的composition及图形图像的渲染,本篇文章简单说一下后半部分的模型,这部分对于理解View渲染也有不少帮助,也能更好的帮助理解GPU渲染玄学曲线。
看书的小蜗牛
2018/08/16
10.6K0
Android硬件加速(二)-RenderThread与OpenGL GPU渲染
hwui介绍与分析
hwui全称**HardwareAcceleratedRenderingEngineforUI,**hwui是一个基于GPU加速的2D图形引擎。HWUI的目标是提供高效、稳定、高质量的2D图形渲染能力,为Android系统的UI体验提供技术支持。
用户1907613
2023/09/17
2.4K0
hwui介绍与分析
View的绘制-draw流程详解
根据 measure 测量出的宽高,layout 布局的位置,渲染整个 View 树,将界面呈现出来。
用户5546570
2019/06/06
1.4K0
View的绘制-draw流程详解
从零开始仿写一个抖音App——Android绘制机制以及Surface家族源码全解析
本文首发于微信公众号——世界上有意思的事,搬运转载请注明出处,否则将追究版权责任。微信号:a1018998632,交流qq群:859640274
何时夕
2019/03/04
3.1K0
从零开始仿写一个抖音App——Android绘制机制以及Surface家族源码全解析
HenCoder Android 自定义 View 1-8 硬件加速
硬件加速这个词每当被提及,很多人都会感兴趣。这个词给大部分人的概念大致有两个:快速、不稳定。对很多人来说,硬件加速似乎是一个只可远观而不可亵玩的高端科技:是,我听说它很牛逼,但我不敢「乱」用,因为我怕 hold 不住。
扔物线
2018/08/20
4310
HenCoder Android 自定义 View 1-8 硬件加速
硬件加速:RenderThread处理DrawOp树
接收SF上抛的Vsync信号,通过监听DisplayEventReceiver的BitTube来回调编舞者的doFrame方法
小柔
2022/10/09
6790
硬件加速:RenderThread处理DrawOp树
Android 优化——卡顿优化
Android 系统每隔 16ms 会发出 VSYNC 信号重绘界面(Activity)。之所以是 16ms,是因为 Android 设定的刷新率是 60FPS(Frame Per Second),也就是每秒 60 帧的刷新率,约合 16ms 刷新一次。
三流之路
2018/09/11
2.3K0
实习杂记(28):Android不同层次开启硬件加速的方式
1、应用: <application android:hardwareAccelerated="true">
wust小吴
2019/07/08
1.8K0
Android UI优化全解析
java代码布局、View重用、异步创建View、xml布局优化、异步布局框架Litho、屏幕适配、Flutter、Jetpack Compose
码上积木
2021/01/11
1.2K0
Android UI优化全解析
深入理解Android渲染机制
基础知识 CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps、Drawables等都是一起打包到统一的纹理)。 GPU:一个类似于CPU的专门用来处理Graphics的处理器, 作用用来帮助加快格栅化操作,当然,也有相应的缓存数据(例如缓存已经光栅化过的bitmap等)机制。 OpenGL ES:是手持嵌入式设备的3DAPI,跨平台的、功能完善的2D和3D图形应用程序接口API,有一套固定渲染管线流程. OpenGL ES详解 Display
xiangzhihong
2018/01/26
1.2K0
浏览器之硬件加速机制
而【WebKit 技术内幕】是基于 WebKit 的 Chromium 项目的讲解。
夜尽天明
2019/11/13
1.5K0
浏览器之硬件加速机制
Android——卡顿优化布局篇(含学习资料分享)
在当下移动互联网后半场,手机已经是人手必备的设备。App是离用户最近的应用,界面又是最直观影响用户体验的关键部分,其流畅度直接影响用户对产品的评价和留存。
做个快乐的码农
2022/01/22
7921
Android——卡顿优化布局篇(含学习资料分享)
使用 GPU 渲染模式分析工具进行分析
其实就是处理输入事件开始到结束的时间,如果竖条中此颜色高度过高代表输入事件应放到其他线程去做
小柔
2022/10/09
1.3K0
使用 GPU 渲染模式分析工具进行分析
不再迷惑,也许之前你从未真正懂得 Scroller 及滑动机制
一直以来,Android 开发中绕不过去的话题就是自定义 View,曾几何时,考验一个开发者能不能熟悉自定义 View 的基础流程作为分辨菜鸟和中级开发者的一个技术标准。但是自定义 View 本身而言,应对各种具体的需求,难度又不一样,这是因为牵扯到了各种各样的技术点。本文要讲解的一个技术点,正是广大开发者容易困惑的一个知识点————Scroller。为什么说它是一个容易让人困惑的内容呢?这是因为很多开发者勉强接受了许多书本或者是博客上直接给予的概念说明,而对于 View 中 scroll 本身思考的过少。每次顺着别人的博文来看,好像已经弄懂了。知道了怎么设置参数如 mScrollX、怎么样创建 Scroller 对象然后调用相应的 API。可是呢?当脱离博文涉及的事例而处理自己工作当中真实面对的场景,往往出现的情况是不能很好地实现既定的效果,这个时候会发现自己并没有真的理解它,所以没有办法举重若轻地将思维迁移到崭新的问题上面。各位读者,请回想下自己是否有过这种体会否则说曾经是否有过这种体会?如果有的话,我们接下来将开启一段解惑之旅。
Frank909
2019/01/14
1.8K0
【专业技术】chromium GPU 硬件加速合成
前言: 在传统浏览器网页渲染实现方案中,网页完全依赖CPU的能力去渲染网页(软件渲染简介:网页生成一张bitmap丢给CPU去绘制),然而一台机器的CPU不仅仅提供给网页,CPU还需要处理其他的事务,响应除网页以外的动作。 那么这种效率可想而知,性能会打大折扣,尤其在配置较低的机型表现得更明显。当前的硬件能力已经将更多渲染任务交由GPU去处理,那么开发者更多的需要关心实现的渲染性能以及是否省电,这两个点在移动设备上更加突出。那么在浏览器上使用GPU来进行硬件加速合成网页显得更为重要。 硬件加速的优点: 1
程序员互动联盟
2018/03/14
2K0
【专业技术】chromium GPU 硬件加速合成
推荐阅读
相关推荐
Android硬件加速介绍与实现
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档