Chromium 软件渲染

  • 软件渲染就是利用CPU,根据一定的算法来计算生成网页的内容;
  • Chromium都是用软件渲染的技术来完成页面的绘制工作(除非强行打开硬件加速绘制);

软件渲染基础和架构

  • Renderer进程:

    • RenderWidget对象,它负责调度页面渲染和页面更新等操作以及和Browser进程的通信;
    • PlatformCanvas,即SkiaCanvas,Render树的绘制操作中Canvas的元素的实现;
  • Browser进程:
    • RenderWidgetHos 对象,负责同Renderer进程的通信;
    • BackingStore,它是一个后端的存储空间,大小通常是网页可视区域的大小,该空间存储的就是页面的绘制结果;
  • 两个进程之间的通信: WebKit 负责遍历Render树,每个RenderObject节点根据需要来绘制自己和子节点的内容到目标存储,就是SkiaCanvas所对应的共享内存的Bitmap 中;之后,RenderWidgetHostbitmap复制到backingstore的相应区域中,并调用paint来把自己绘制到窗口中;

具体渲染过程

发起重新绘制某些区域的请求

  • 前端请求:包括从browser进程发起的请求,可能是browser自身的,也有可能是其他窗口系统;
  • 后端请求:由页面自身发起更新部分区域的请求,如HTML元素或者样式的改变,动画等等。

例子:JS代码每隔50ms更新元素;

  • Renderer进程的message loop调用处理Invalidation的回调函数,该函数主要调用RenderWidget::DoDeferredUpdate来完成绘制请求;
  • RenderWidget::DoDeferredUpdate首先调用layout来触发检查是否有需要重新计算的布局和更新请求;
  • RenderWidget调用TransportDIB来创建共享内存,内存大小为绘制区域的高×宽×4,同时调用Skia来创建一 个canvas,它的绘制目标是一个使用共享内存存储的bitmap;
  • 当渲染该页面的全部或者部分时,ScrollView请求按照从前到后顺序遍历并绘制所有的RenderLayer的内容到目标的bitmap中,每个RenderLayer的绘制通过以下步骤来完成:
    • 首先计算重绘的区域是否和自己有重叠,如果有, 则要求该layer中的所有RenderObject对象绘制自己;
  • 绘制完成后,发送UpdateRect的消息给browser进程,Renderer进程同时返回完成绘制;Browser进程接受到消息后首先由BackingStoreManager来获取或者创建 BackingStoreX,大小是 Viewport,包

    浏览器-07 chromium 渲染1的更多相关文章

    1. 浏览器-08 chromium 渲染2

      Chromium 硬件加速合成 一个网页通常可以包

    2. 浏览器的 16ms 渲染帧

      标签 归档 关于arttle Land 浏览器的 16ms 渲染帧 DOM JavaScript 异步 性能 重绘 由于现在广泛使用的屏幕都有固定的刷新率(比如最新的一般在 60Hz), 在两次硬件刷 ...

    3. 浏览器的 16ms 渲染帧--摘抄

      由于现在广泛使用的屏幕都有固定的刷新率(比如最新的一般在 60Hz), 在两次硬件刷新之间浏览器进行两次重绘是没有意义的只会消耗性能. 浏览器会利用这个间隔 16ms(1000ms/60)适当地对绘制 ...

    4. document.compatMode(判断当前浏览器采用的渲染方式)

      转载自:http://www.cnblogs.com/fullhouse/archive/2012/01/17/2324706.html IE对盒模型的渲染在 Standards Mode和Quirk ...

    5. 浏览器-10 Chromium 移动版

      移动版 chromium 的iOS版和Android是为两个流行的移动操作系统设计的, UI方面进行了 较大的重新设计; 两者从外观上看颇为相似,但是其内部的渲染引擎的差别非常的大,原因在于iOS对应 ...

    6. 浏览器-04 WebKit 渲染2

      渲染主循环(main loop)和requestAnimationFrame requestAnimationFrame 使用requestAnimationFrame而非setTimeout/set ...

    7. BOM 浏览器对象模型_渲染引擎_JavaScript 引擎_网页加载流程

      1. 浏览器核心的两个组成部分 渲染引擎 将网页代码渲染为用户视觉可以感知的平面文档 分类: Firefox        Gecko 引擎 Safari        WebKit 引擎 Chrom ...

    8. 浏览器加载渲染HTML、DOM、CSS、 JAVASCRIPT、IMAGE、FLASH、IFRAME、SRC属性等资源的顺序总结

      页面响应加载的顺序:   1.域名解析->加载html->加载js和css->加载图片等其他信息 DOM详细的步骤如下: 解析HTML结构. 加载外部脚本和样式表文件. 解析并执行脚 ...

    9. 【repost】浏览器内核、渲染引擎、js引擎

      [1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...

    随机推荐

    1. TypeScript Writing .d.ts files(编写声明文件)

      当使用扩展的JavaScript库或者插件API的时候,将需要使用声明文件(.d.ts)来描述库的类型.本文内容将包括如何编写声明文件相关的一些高级概念,然后用一些例子来展示如何将各式各样的概念与声明 ...

    2. MySQL索引结构--由 B-/B+树看

      B-树 B-树,这里的 B 表示 balance( 平衡的意思),B-树是一种多路自平衡的搜索树它类似普通的平衡二叉树,不同的一点是B-树允许每个节点有更多的子节点.下图是 B-树的简化图. B-树有 ...

    3. Traditional Language Model

      Traditional Language Model通常用于回答下述问题: How likely is a string of English words good English ? \(p_{LM ...

    4. js字符串方法

      字符串方法根据下标返回字符:str.charAt()//传入一个下标返回字符str.charCodeAt();// 传入一个下标获取编码String.formCharCode();//接受编码,编码转 ...

    5. .Net 中的反射(动态创建类型实例) - Part.4

      动态创建对象 在前面节中,我们先了解了反射,然后利用反射查看了类型信息,并学习了如何创建自定义特性,并利用反射来遍历它.可以说,前面三节,我们学习的都是反射是什么,在接下来的章节中,我们将学习反射可以 ...

    6. 20145204&20145212实验二报告

      实验二固件设计 步骤: 1.开发环境的配置,参考实验一 1.将实验代码拷贝到共享文件夹中. 2.在虚拟机中编译代码.对于多线程相关的代码,编译时需要加-lpthread的库.下载调试在超级终端中运行可 ...

    7. Mac Sublime Text complie python .py error /bin/bash: shell_session_update: command not found

      1.get the rvm version rvm -v 2.make sure the version at least 1.26 above. 3.then go ahead rvm get he ...

    8. Migrating an Existing Website from SQL Membership to ASP.NET Identity

      Migrating an Existing Website from SQL Membership to ASP.NET Identity public class User : IdentityUs ...

    9. 深入理解javascript原型和闭包(13)-【作用域】和【上下文环境】

      上文简单介绍了作用域,本文把作用域和上下文环境结合起来说一下,会理解的更深一些. 如上图,我们在上文中已经介绍了,除了全局作用域之外,每个函数都会创建自己的作用域,作用域在函数定义时就已经确定了.而不 ...

    10. 3Struts2进阶----青软S2SH(笔记)

      关于上面这个红框里的问题,经过实际测试发现,struts2增加一个命名空间后,jsp页面里所引用的资源的路径,也需要增加一个"../", 于是,跟SpringMVC没啥区别了啊.. ...