浏览器-07 chromium 渲染1
Chromium 软件渲染
- 软件渲染就是利用
CPU,根据一定的算法来计算生成网页的内容; Chromium都是用软件渲染的技术来完成页面的绘制工作(除非强行打开硬件加速绘制);
软件渲染基础和架构
Renderer进程:RenderWidget对象,它负责调度页面渲染和页面更新等操作以及和Browser进程的通信;PlatformCanvas,即SkiaCanvas,Render树的绘制操作中Canvas的元素的实现;
Browser进程:RenderWidgetHos对象,负责同Renderer进程的通信;BackingStore,它是一个后端的存储空间,大小通常是网页可视区域的大小,该空间存储的就是页面的绘制结果;
- 两个进程之间的通信:
WebKit负责遍历Render树,每个RenderObject节点根据需要来绘制自己和子节点的内容到目标存储,就是SkiaCanvas所对应的共享内存的Bitmap中;之后,RenderWidgetHost把bitmap复制到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的更多相关文章
- 浏览器-08 chromium 渲染2
Chromium 硬件加速合成 一个网页通常可以包
- 浏览器的 16ms 渲染帧
标签 归档 关于arttle Land 浏览器的 16ms 渲染帧 DOM JavaScript 异步 性能 重绘 由于现在广泛使用的屏幕都有固定的刷新率(比如最新的一般在 60Hz), 在两次硬件刷 ...
- 浏览器的 16ms 渲染帧--摘抄
由于现在广泛使用的屏幕都有固定的刷新率(比如最新的一般在 60Hz), 在两次硬件刷新之间浏览器进行两次重绘是没有意义的只会消耗性能. 浏览器会利用这个间隔 16ms(1000ms/60)适当地对绘制 ...
- document.compatMode(判断当前浏览器采用的渲染方式)
转载自:http://www.cnblogs.com/fullhouse/archive/2012/01/17/2324706.html IE对盒模型的渲染在 Standards Mode和Quirk ...
- 浏览器-10 Chromium 移动版
移动版 chromium 的iOS版和Android是为两个流行的移动操作系统设计的, UI方面进行了 较大的重新设计; 两者从外观上看颇为相似,但是其内部的渲染引擎的差别非常的大,原因在于iOS对应 ...
- 浏览器-04 WebKit 渲染2
渲染主循环(main loop)和requestAnimationFrame requestAnimationFrame 使用requestAnimationFrame而非setTimeout/set ...
- BOM 浏览器对象模型_渲染引擎_JavaScript 引擎_网页加载流程
1. 浏览器核心的两个组成部分 渲染引擎 将网页代码渲染为用户视觉可以感知的平面文档 分类: Firefox Gecko 引擎 Safari WebKit 引擎 Chrom ...
- 浏览器加载渲染HTML、DOM、CSS、 JAVASCRIPT、IMAGE、FLASH、IFRAME、SRC属性等资源的顺序总结
页面响应加载的顺序: 1.域名解析->加载html->加载js和css->加载图片等其他信息 DOM详细的步骤如下: 解析HTML结构. 加载外部脚本和样式表文件. 解析并执行脚 ...
- 【repost】浏览器内核、渲染引擎、js引擎
[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具[2]常见引擎 渲染引擎: firef ...
随机推荐
- Angular.js通过bootstrap实现经典的表单提交
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel= ...
- 10月24日下午PHP封装
class Ren { private $name; private $sex; private $age;//年龄必须在18-50岁之间 function __construct($n) { $th ...
- jquery 幻灯片 左右滚动
使用jquery封装的一个幻灯片插件 写的好差 参考了别人写的 后面再重构 现在这个应该可以直接用了 主要实现思路就是 添加当前选中状态 index相对应的 选中的图总是在第一位(也就是加选中状态的 ...
- trigger中insert动作的测试
Trigger为默认事务 测试环境:sql server 2008 r2 对象:DevList表 目标:确定trigger在数据库中有数据变化时是一次一批一批执行还是,按每条触发执行 测试需求: De ...
- [NHibernate]持久化类(Persistent Classes)
系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 引言 持久化类是应用程序用来解决商业问题的类(比如,在电子交易程序中的Customer和Orde ...
- Shell case esac语句
case ... esac 与其他语言中的 switch ... case 语句类似,是一种多分枝选择结构. case 语句匹配一个值或一个模式,如果匹配成功,执行相匹配的命令.case语句格式如下: ...
- PHP错误级别 error_reporting() 函数详解
在PHP开发的时候常常会用到error_reporting(report_level)来调试自己的程序,下面列出了report_level可能值: 值 常量 描述 1 E_ERROR 这是一个严重错误 ...
- ThinkPHP2.2框架执行流程图,ThinkPHP控制器的执行流程
ThinkPHP2.2框架执行原理.流程图在线手册 ThinkPHP控制器的执行流程 对用户的第一次URL访问 http://<serverIp>/My/index.php/Index/s ...
- Google疯了,竟然这样!
导读 一个小问题:你每天做什么事?当然了,好多事情,但是我可以指出一件事,你几乎每天都会用 Google 搜索,我说的对吗?现在,如果你是一位 Linux 用户,这里有另外一个问题:如果你甚至不用离开 ...
- C++ STL模板
C++中的STL(Standard Template Library)用起来挺方便的,这里我们来做一下总结. 一.set set是STL中一种标准关联容器 (vector,list,string,de ...
- 浏览器-08 chromium 渲染2