chromium for android 硬件渲染流程总结

render进程中

一.webkit模块

webkit引擎会为网页内容同时创建Dom tree, Render tree和RenderLayer tree.

这三棵树之间的关系参见chrome硬件渲染

每一个Render Object都关联着一个RenderLayer.Render Object与RenderLayer是多对一的关系。

RenderLayer代表了网页某一层的内容。正是由于RenderLayer的存在,网页上的元素才可以按照

正确的顺序合成,从而恰当的显示有交叠的内容,和半透明元素等效果。

触发RenderLayer创建的条件如下:

1.网页的root节点;

2.有明确的CSS position属性(relative,absolute,transform)

3.元素是透明的

4.overflow, alpha mask,或者reflection

5.有css filter(滤镜) 属性

6.有2D加速Context或者3D(webGL)context的 canvas 元素对应的RenderObject.

7.video元素对应的RenderObject。

RenderLayerCompositor负责管理所有RenderLayer的合成,并决定可以作为合成层的Layer.

只有满足以下条件的RenderLayer才可以成为合成层(composited layer).

RenderLayer.h中定义了31个reasons:

CompositingReason3DTransform

CompositingReasonVideo

CompositingReasonCanvas

CompositingReasonPlugin

CompositingReasonIFrame

CompositingReasonBackfaceVisibilityHidden

CompositingReasonAnimation

CompositingReasonFilters

CompositingReasonPositionFixed

CompositingReasonPositionSticky

CompositingReasonOverflowScrollingTouch

CompositingReasonBlending

CompositingReasonAssumedOverlap

CompositingReasonOverlap

CompositingReasonNegativeZIndexChildren

CompositingReasonTransformWithCompositedDescendants

CompositingReasonOpacityWithCompositedDescendants

CompositingReasonMaskWithCompositedDescendants

CompositingReasonReflectionWithCompositedDescendants

CompositingReasonFilterWithCompositedDescendants

CompositingReasonBlendingWithCompositedDescendants

CompositingReasonClipsCompositingDescendants

CompositingReasonPerspective

CompositingReasonPreserve3D

CompositingReasonReflectionOfCompositedParent

CompositingReasonRoot

CompositingReasonLayerForClip

CompositingReasonLayerForScrollbar

CompositingReasonLayerForScrollingContainer

CompositingReasonLayerForForeground

CompositingReasonLayerForBackground

CompositingReasonLayerForMask

被认为是合成层的RenderLayer会创建RenderLayerBacking,RenderLayerBacking

与composited layer是一一对应的关系。RenderLayerBacking控制composited layer

的合成行为,并包含了多个GraphicsLayers。

GraphicsLayer是后端存储的抽象表示。不同平台负责提供具体的后端存储类给GraphicsLayer.

对于chromium for android平台提供的是cc模块的PictureLayer类。

下图是webkit::GraphicsLayer到cc::PictureLayer之间的关系:

chromium for android硬件渲染流程全解析(render进程)中的流程一完成后,

webkit::RenderLayer tree表示的网页内容就以网页绘制命令的形式转移到cc模块中。

简单的说就是RenderLayer tree中的每个RenderLayer包含的网页信息都以绘制命令的形式存储在了

LayerTreeHostImpl包含的LayerTreeImpl代表的cc::PictureLayer tree中了。

二.cc模块

1.网页内容的光栅化,这个过程是在cpu上执行的,完成后,网页内容以像素形式存储在一块SharedMemory上.

这块SharedMemory可以跨进程使用。是由Render进程向Browser进程发送消息,由Browser进程创建的,

并将sharedMemory的handle传回给Render进程使用。这块SharedMemory还会在GPU进程中使用。

2.网页各层的混合过程。光栅化后,存储网页内容的SharedMemory在GPU进程中作为纹理数据的源上传给gpu,

实现纹理贴图(glTexImage2D)。chromium是分块渲染的策略,TileManager管理的每个Tile最终都对应着一块

texture(ResourceProvider负责分配的),SharedMemory中的网页内容通过glTexImage2D最终渲染到了Tile

对应的texture上。

3.LayerTreeHostImpl::CalculateRenderPasses()记录已经上传了数据源的需要渲染的Tile的信息。

为LayerTreeHostImpl::DrawLayers()做准备.

4.LayerTreeHostImpl::DrawLayers()触发的实际的绘制过程。(glDrawElements).

这个过程会先调用glFramebufferTexture2DEXT,将texture attach到render进程创建的off-screen surface对应的

framebuffer object上,再接着对每个Tile对应的texture调用glDrawElements,这个过程完成后,

网页内容就被渲染到了attach到framebuffer上的textures上了,这些texture会被传递给browser进程。

Browser进程

Browser进程的主要工作是将render进程中包含网页内容的texture合成到on-screen surface。

Browser进程创建的是on-screen surface,网页内容最终要渲染到on-screen surface的back buffer上。

Browser进程调用eglswapbuffer后onscreen surface对应的back buffer和front buffer会互换,

下次屏幕刷新时,front buffer的内容会显示到屏幕上。具体流程参见chromium for android硬件渲染流程全解析(browser进程)

chromium for android 硬件渲染流程总结

时间: 2024-08-08 06:54:33

chromium for android 硬件渲染流程总结的相关文章

android4.4 webview chromium与chromium for android硬件渲染的异同

相同点: android4.4 webview chromium的渲染流程与chromium for android硬件渲染流程全解析(render进程)中总结的五个子流程完全一致. android4.4 webview chromium的渲染流程也是这五个子流程组成的. 不同点: 1.android4.4中网页渲染的驱动还是android的UI系统控制的.即WebView.onDraw()是渲染的入口.chromium for android没有用到WebView控件,绘制的驱动完全由底层ch

chromium for android v34 2dcanvas硬件渲染实现分析

这篇接着上一篇2dcanvas硬件绘制,分析保存绘制结果的texture被合成到on screen framebuffer上的过程. 1.webkit为canvas元素相应的render树节点RenderHTMLCanvas, 创建RenderLayer的步骤例如以下: RenderLayerModelObject::createLayer()调用 RenderLayer::insertOnlyThisLayer()将创建完 的RenderLayer增加到renderlayer tree中. 2

chromium for android v34 2dCanvas硬件绘制及硬件渲染实现分析

HTMLCanvasElement对应h5的canvas元素. 解析网页遇到canvas元素会创建HTMLCanvasElement实例. Canvas可以支持2d和3d图形的绘制. HTMLCanvasElement提供了getContext()接口,返回图形绘制的上下文对象, 对于2d图形返回的是CanvasRenderingContext2D. CanvasRenderingContext2D提供了网页可调用的所有绘制动作. CanvasRenderingContext2D的所有绘制命令都

android4.4 webview chromium实现硬件渲染的chromium内核结构

这里只关注与原生chromium不同的几个类. 一.DrawGLFunctor android4.4 webview chromium的硬件渲染是android ui系统和chromium内核协作 完成的.android ui系统负责触发网页渲染(调用WebView.onDraw()),以及提供 网页内容的最终目的地(HardwareCanvas);chromium内核提供具体的渲染行为. 这里就引出了DrawGLFunctor结构. DrawGLFunctor.java/draw_gl_fun

Chromium Graphics: 再谈Chromium WebView硬件渲染模式的演进

摘要:从Android KitKat系统第一个采用Chromium内核的WebView开始,Android WebView一直在持续演进中,自Chromium M38开始,WebView在硬件渲染模式方面发生了较大的变化,最明显的变化莫过于WebGL的支持以及ubercompositor的使用,同时为了吻合Android L的渲染模型变化,DrawGL函数是在Android系统的渲染线程中执行的. Android 4.4系统WebView的硬件渲染 对于Chromium WebView来说,首先

Chromium on Android: Android L平台上WebView的变化及其对浏览器厂商的影响分析

摘要:Android L平台在图形渲染方面有一项重要的改进,它引入了一个专门的线程用于执行渲染工作,UI线程负责生成的显示列表(DisplayList),渲染线程负责重放(playback)这个显示列表绘制最终的内容,因此Chromium WebView在图形栈的实现方面也作了相应的调整,以支持Android L系统上新的渲染线程模型.本文将深度分析Chromium WebView的渲染流水线是如何无缝整合到Android L系统的渲染模型中,以及对目前市场主流浏览器厂商将会产生什么样影响等问题

Chromium on Android: 认识Chromium WebView

Android KitKat一项重要的更新就是WebView采用Chromium/Blink渲染引擎,本文简要的叙述了新版WebView的主要特性.需要进一步改进的地方以及WebView的代码结构等. WebView前世今生 WebView是Android平台上一个非常重要的系统组件,用于将一个显示Web页面的窗口部件view嵌入到应用程序,并提供了一组API接口允许开发者定制页面加载和绘制的行为,比如响应页面加载状态的变化和弹出JavaScript对话框的请求等等.自Android 1.0发布

Chromium的GPU进程启动流程

转载请注明出处:http://www.cnblogs.com/fangkm/p/3960327.html 硬件渲染依赖计算机的GPU,GPU种类繁多,兼容这么多种类的硬件,稳定性是个大问题,虽然Chromium内部维护了一个GPU黑名单列表,限定了哪些渲染特性不能在哪些GPU上渲染,但还不足以解决使用GPU过程中的稳定性问题.在Chromium的多进程架构中,不稳定不可控的因素一般都会采取独立进程的渲染方式, 从而保证主进程的稳定性,比如Render进程.插件进程,GPU的使用也一样,采取独立进

Ogre2.1 Hlms与渲染流程

在我前面三篇说明Ogre2.x的文章里,第一篇大致说了下Hlms,第二篇说了下和OpenGL结合比较紧的渲染,本文用来说下Hlms如何影响渲染流程中,因为有些概念已经在前面二文里说过了,本文就不再提,最后这篇也算是对Ogre2.1一个渲染流程的详细讲解. PassScene简单流程 首先是所有场景更新,场景更新包含的内容如下. 场景动画 _applySceneAnimations 所有节点数据 UPDATE_ALL_TRANSFORMS 骨骼动画 UPDATE_ALL_ANIMATIONS 所有