Android 渲染过程分析
来源:互联网 发布:sql导入access数据库 编辑:程序博客网 时间:2024/05/16 17:26
1.每一个View对应一个RenderNode,一个独立的GLES20RecordingCanvas。
2.父视图的DisplayList包含所有子视图的DisplayList。
3.硬件加速和非硬件加速的时候Canvas是不一样的,前者是一个真的Canvas后者是一个GLES20RecordingCanvas对象,在GLES20RecordingCanvas上执行绘图命令时并没有真正绘制,而是将这些命令封装成一个个DrawOp对象。最后添加到DisplayList中。比如调用canvas.drawArc()的过程如下:
GLES20Canvas.drawArc()-->android_view_GLES20Canvas_drawArc()-->renderer->drawArc(left, top, right, bottom, startAngle, sweepAngle, useCenter, paint)-->DisplayListRenderer::drawArc()-->addDrawOp(new (alloc()) DrawArcOp(left, top, right, bottom,startAngle, sweepAngle, useCenter, paint))
4.GLES20RecordingCanvas继承自GLES20Canvas继承自HardwareCanvas,在GLES20Canvas有属性mRenderer对应一个native层的DisplayListRenderer对象。GLES20RecordingCanvas还有一个属性mNode,对应一个RenderNode。
5.DisplayListRenderer的属性mDisplayListData保存他对应的RenderNode对应的View的所有直接子View对应的DrawRenderNodeOp。而属性chunks保存的是所有的chunks,这里chunks简单的理解是把很多的DisplayList进行分块,分块的原因是不同块的有些不同的特性,而且这个分块是以View为基本单位的,也就是一般几个共性的View组成一个chunk。最后属性mDisplayListData保存的是所有的绘制命令也就是DisplayList。
6.常见的DrawOp有:DrawLayerOp,DrawRenderNodeOp,DrawBitmapOp,DrawArcOp等等。并最终通过函数size_t DisplayListRenderer::addDrawOp(DrawOp* op) 添加到DisplayList中。
7.如果一个View是非硬件加速的会先将View绘制在一个普通的Bitmap上,然后作为一个DrawBitmapOp命令添加到DisplayList中。
8.如果一个View是TextureView,会将他对应的Layer,封装成一个DrawLayerOp命令添加到DisplayList中。
9.一个View的每个子View会封装成一个DrawRenderNodeOp对象添加到DisplayList中。这样子在真正渲染的时候就会去调用他的子View的渲染命令。
- Android 渲染过程分析
- Android 视图渲染过程的源码分析
- Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
- Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
- Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
- Android应用程序请求SurfaceFlinger服务渲染Surface的过程分析
- Android应用程序UI硬件加速渲染环境初始化过程分析
- Android应用程序UI硬件加速渲染环境初始化过程分析
- Android应用程序UI硬件加速渲染的动画执行过程分析
- Android应用程序UI硬件加速渲染环境初始化过程分析
- Android WebView硬件加速渲染网页UI的过程分析
- Android WebView硬件加速渲染网页UI的过程分析
- Android应用程序UI硬件加速渲染的Display List渲染过程分析
- android4.0.1 webkit 软件渲染过程分析
- android4.0.1 webkit 硬件渲染过程分析
- 游览器加载渲染网页过程分析
- Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析
- Android系统Surface机制的SurfaceFlinger服务渲染应用程序UI的过程分析
- GCD
- Linux的vi问题
- 一、初始Hadoop之一Hadoop三大组件
- JAVA随笔——关于构造函数与this关键字和static关键字
- Unity性能优化(1)-官方教程The Profiler window翻译
- Android 渲染过程分析
- json的介绍
- Remote System Explorer Operation总是运行后台服务,卡死eclipse解决办法
- 医院HIS系统简介
- curl模拟http请求
- Unity性能优化(2)-官方教程Diagnosing performance problems using the Profiler window翻译
- JS url加密解密
- simpleDateFormat日期格式转换
- at91sam9260 Arm开发板与PC机 ubuntu系统NFS挂载