Chromimum Android渲染介绍

从概念上一个使用硬件加速(AC)时,页面显示的结构是Viewport -> Layer(s) -> Tile(s),所谓的纹理就是Tile上显示的内容。分块最大的好处就是重绘的单元变小,更利于降低系统开销。

(Tile翻成瓦片,还不如瓷砖呢 ^_^!)

详情可参考:开启硬件加速时Web页面绘制流程

从WebKit内核到Chromium的cc模块,其对应关系如下:

Chormium通过impl-side painting实现了多线程的渲染(Design Document)。其目的是将WebKit内核的页面内容绘制与实际显示隔离开来,再将painting操作分为recording和rasterization。

其中一个重要的概念是Main Thread(side)和Impl Thread(side)。

Main Thread运行于Render线程,包括RenderWidget,LayerTreeHost等。Impl Thread运行于Compositor线程,包括LayerTreeHostImpl等。两者通过一个Proxy进行线程的通讯。基本的渲染路径就像是dot绘图一样,先录制脚本,再生成图像。它使用的对象是SkPicture, 它能做到类似Display List的功能,能够记录,再播放。这也是跨进程渲染的基础(必然需要一个编码及解码的过程。)。

步骤如下:

* 在Main Thread里,Chromium/WebKit的渲染到一个图形后端(SkPicture)存储起来, 由LayerTreeHost管理整个Layer Tree。 这个过程叫Record,并没有真正绘制。

* 将这些数据提交到Impl Thread里的LayerTreeHostImpl进行给制,这个过程是Upload,还有一个Commit。

* LayerTreeHostImpl再通过AwContents,使用Android的GL功能进行合成绘制,这个过程叫Rastering (光栅化,其实就是用位图显示的概念,对应于矢量方式绘图.)。

结构上,LayerTreeHost与LayerTreeHostImpl构成了Main Thread和Impl Thread的交互界面。

初始化时,流程从RenderViewImpl的创建开始,如下图所示(ThreadProxy是Proxy的实现):

为了更好地安排Main Thread与Impl Thread的任务队列,还会有一个Scheduler负责任务安排。 以下是类的关系,可以看到它们的生命周期管理:

Main Thread(Side)

LayerTreeHost/LayerTreeHostImpl只是组织和事务处理的类,实际绘制时是以OutputSurface为基础的,可以理解为图形后端。Android WebView和CC都是基于对OutputSurface的操作来完成后面的合成的。Chromium WebView使用同步合成器,即SynchronousCompositor,在UI线程上使用系统的GL能力绘制。后面有一串以SynchronousCompositor命名的类。

首先当LayerTreeHostImpl准备好后,会向LayerTreeHost请求OutputSurface, 最终由RenderWidget通过SynchronousCompositorFactory创建出一个OutputSurface,并交给LayerTreeHostImpl管理(scoped_ptr)。

Impl Thread(Side)

在Impl side, AwContents中合成器管理操作是由BrowserViewRenderer负责的,它将主要通过SynchronousCompositorImpl来向LayerTreeHostImpl和OutputSurface提供服务的。

Android WebView的设计中一个WebContents对应一个合成器,所以SynchronousCompositorOutputSurface通过routingid就可以确认所对应的SynchronousCompositorImpl。

Android上将Impl Thread实际是跑在UI线程上的,即child compositor运行在UI线程上。详细的说明参考 Urbercomp in Android WebView,里面有详细的说明。

以下为主要类的关系:

参考资料: Android 4.4 Browser渲染机制解析

附上OutputSurface的初始化及绑定流程如下:

当开始绘制时,为了支持DrawGL函数(下面有介绍),还会创建一个OutputSurface。析构时依次析构,流程如下:

TileSet & Layer

对应于上面的TileSet和Layer,Chromium是由PictureLayerImpl来实现的。以下为其类图,没有深入研究,仅作参考:

更为系统的介绍看这里Chromium Graphics: 再谈Chromium WebView硬件渲染模式的演进

参考

  1. Web页面渲染及合成加速(二)
  2. Chromium Graphics: 再谈Chromium WebView硬件渲染模式的演进
  3. 开启硬件加速时Web页面绘制流程
  4. Impl-Side Painting
  5. Android Graphics Architecture
时间: 2024-08-29 13:29:38

Chromimum Android渲染介绍的相关文章

深入理解Android渲染机制

基础知识 CPU: 中央处理器,它集成了运算,缓冲,控制等单元,包括绘图功能.CPU将对象处理为多维图形,纹理(Bitmaps.Drawables等都是一起打包到统一的纹理). GPU:一个类似于CPU的专门用来处理Graphics的处理器, 作用用来帮助加快格栅化操作,当然,也有相应的缓存数据(例如缓存已经光栅化过的bitmap等)机制. OpenGL ES:是手持嵌入式设备的3DAPI,跨平台的.功能完善的2D和3D图形应用程序接口API,有一套固定渲染管线流程. OpenGL ES详解 D

Android平台介绍

一.Android平台介绍 什么是智能手机 具有独立的操作系统,独立的运行空间,可以由用户自行安装软件.游戏.导航等第三方应用程序,并可以通过移动通讯网络来实现无线网络接入的手机类型总称. 智能手机操作系统 Android.IOS.Windows Phone.BlackBerry.Symbian 什么是Android Android是一种基于Linux的开源操作系统,主要使用于移动设备,例如智能手机.平板电脑.智能手表.智能电视等等.由Google公司和开放手机联盟领导及开发.Android操作

android AsyncTask介绍

本文转自:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html 写的很好,向你们推荐 android AsyncTask介绍 AsyncTask和Handler对比 1 ) AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主

Android bluetooth介绍(一):基本概念及硬件接口

关键词:蓝牙硬件接口 UART  PCM  blueZ 版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载,请注明作者,请尊重版权谢谢)欢迎指正错误,共同学习.共同进步!! 一.基本概念补充 1.AP:ApplicationProcessor应用处理器 采用ARM架构的CPU,通常负责运行OS和一些特定设置和载入开机预设.比如一个没有电话功能的平板电脑,只跑android或

Android bluetooth介绍(二): android 蓝牙代码架构及其uart 到rfcomm流程

关键词:蓝牙blueZ  UART  HCI_UART H4  HCI  L2CAP RFCOMM  版本:基于android4.2之前版本 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载,请注明作者,请尊重版权谢谢)欢迎指正错误,共同学习.共同进步!!一.Android Bluetooth Architecture蓝牙代码架构部分(google 官方蓝牙框架) Android的蓝牙系统,自下而上包括以下一些

Android Configuration介绍 (未完成)

博客很空,想赶紧填一篇东西,选的这个题目看了下中文网络中还不是很常见,但是由于我也不了解全部的configuration,需要验证思路,写起来也很慢,先发个未完成的占座. 所谓Configuration指的是Configuration.java这个类所代表的配置信息,它的位置在($ANDROID_ROOT)/frameworks/base/core/java/android/content/res/Configuration.java 本文分三部分: 一. 逐一讲解成员变量,了解功能和每一个数值

Android bluetooth介绍(三): 蓝牙扫描(scan)设备分析

关键词:蓝牙blueZ  A2DP.SINK.sink_connect.sink_disconnect.sink_suspend.sink_resume.sink_is_connected.sink_get_properties.AUDIO.DBUS版本号:基于android4.2之前版本号 bluez内核:linux/linux3.08系统:android/android4.1.3.4作者:xubin341719(欢迎转载.请注明作者.请尊重版权谢谢)欢迎指正错误.共同学习.共同进步!! 參考

Android渲染机制和丢帧分析

http://blog.csdn.net/bd_zengxinxin/article/details/52525781 自己编写App的时候,有时会感觉界面卡顿,尤其是自定义View的时候,大多数是因为布局的层次过多,存在不必要的绘制, 或者onDraw等方法中过于耗时.那么究竟需要多快,才能给用户一个流畅的体验呢?那么就需要简单了解下Android的渲染机制: Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,那么整个过程如果保证在16ms以内就能达到一个流畅的画面. 那么

Android入门介绍

Android入门介绍 3G.4G 第三代移动通信技术(3rd - Generation),速率一般在几百Kbps,较之前的2G和2.5G在数据传输速度上有很大提升. 第四代移动通信技术(4th - Generation),速度可达到100Mbps以上,几乎可以满足人们的所有传输数据的需求. 目前主流的3G技术标准有三种: WCDMA:全球80%以上的3G网络都是采用此种制式.中国联通运营.186 CDMA2000:目前日韩及北美使用较多.中国电信运营. 189 TD-SCDMA:中国自主知识产