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. CIDR详解和ip最长地址前缀匹配

      1.CIDR是什么 无类域间路由(CIDR)编址方案 摒弃传统的基于类的地址分配方式,允许使用任意长度的地址前缀,有效提高地址空间的利用率. 就是一个ip加一个网络掩码,不过这个掩码不是之前只有3个值 ...

    2. php多文件压缩下载

      /*php多文件压缩并且下载*/ function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. whil ...

    3. C#利用System.Net发送邮件(带 抄送、密送、附件、html格式的邮件)

      net2.0后,C#可以利用System.Net发送邮件了. 代码整理如下: 3. 增加IProcessMessage类,定义了一个消息方法,用于消息传递 /********************* ...

    4. arguments 对象的老历史

      引题:为什么 JavaScript 中的 arguments 对象不是数组 http://www.zhihu.com/question/50803453 JavaScript 1.0 1995 年, ...

    5. 惊艳!9个不可思议的 HTML5 Canvas 应用试验

      HTML5 <canvas> 元素给网页中的视觉展示带来了革命性的变化.Canvas 能够实现各种让人惊叹的视觉效果和高效的动画,在这以前是需要 Flash 支持或者 JavaScript ...

    6. Java重点识记

      1.final修饰的类不能被继承,已经达到类层次中的最低层. 2.abstract修饰的类或成员方法,表明是抽象的,含有抽象方法的类必须说明是抽象类,必须派生出子类. 3.JAVA对逻辑与和逻辑或提供 ...

    7. unity3D游戏-WorldFight

      计划写一个2D策略类的游戏,玩法类似炉石传说,以收集卡牌为主,不同的地方在于战斗方式类似棋类游戏,而且还有一个技能系统作为补充. ---更新(2015.7.13) v2.0.1更新: 添加了基本AI ...

    8. 微信公众平台推出"微信保护"提升微信账号安全 附微信保护开启教程

      前两天小美女的微信公众平台要群发消息时提示需要绑定手机才能操作,当时还以为是动态ip的问题,今天微信公众平台安全中心就说升级了,原来那时已经在公测了.微信公众平台推出"微信保护", ...

    9. 配置SQL server远程连接(局域网)

      具体步骤: 1) 2) 3) 4) 5) 6) 7) 最后为了防火墙有影响,直接把防火关了,测试连接通过在来设置防火墙.

    10. Nginx 限速模块一览

      为了保护服务器不被刷流量,或者业务方面的一些限制,需要做一些限速措施. 一.http 请求并发连接数模块:ngx_http_limit_conn_module 这个模块可以设置每个定义的变量(比如客户 ...