浏览器内核入门

chromium大学

chromium doc

现代浏览器内部揭秘

[译] 现代浏览器内部揭秘(第一部分) – 掘金 (juejin.cn)

[译] 现代浏览器内部揭秘(第二部分) – 掘金 (juejin.cn)

[译] 现代浏览器内部揭秘(第三部分) – 掘金 (juejin.cn)

[译] 现代浏览器内部揭秘(第四部分) – 掘金 (juejin.cn)

【译】浏览器如何工作:在现代web浏览器场景的之下 – 掘金 (juejin.cn)

https://segmentfault.com/a/1190000016335571 像素的一生

怎样阅读 Chromium 源码? – 知乎 (zhihu.com)

参考:

一个浏览器引擎toy:https://limpet.net/mbrubeck/2014/08/08/toy-layout-engine-1.html

toy技术实现分析:https://tigercosmos.xyz/post/2018/02/browser/browser_series_33/

2,调试浏览器tips

Dev Tips – Developer Tips by Umar Hansa (umaar.com)

  1. (18条消息) Chromium网页加载过程简要介绍和学习计划_罗升阳的博客-CSDN博客 dom,render tree,graphic tree

《Chromium内核原理之blink内核工作解密》
《Chromium内核原理之多进程架构》
《Chromium内核原理之进程间通信(IPC)》
《Chromium内核原理之网络栈》
《Chromium内核原理之网络栈HTTP Cache》
《Chromium内核原理之Preconnect》
《Chromium内核原理之Prerender》
《Chromium内核原理之cronet独立化》

https://zhuanlan.zhihu.com/p/34957535 裁剪出net模块

https://zhuanlan.zhihu.com/p/62381831 http rtsp服务

https://zhuanlan.zhihu.com/p/143422507 http client

(22条消息) 浏览器的渲染机制(一)_hancao97的博客-CSDN博客_inline-flow

(22条消息) 浏览器的渲染机制(二)_hancao97的博客-CSDN博客

(22条消息) 【精简版】浏览器渲染机制(完整流程概述)_hancao97的博客-CSDN博客

Activate
在Commit之后,Draw之前有一个Activate操作。Raster和Draw都发生在合成器线程里的Layer List上,但是我们知道Raster操作是异步的,有可能需要执行Draw操作的时候,Raster操作还没完成,这个时候就需要解决这个问题。

于是它将LayerTree分为了:

PendingTree:负责接收commit,然后将Layer进行Raster操作

ActiveTree:会从这里取出光栅化好的Layer进行draw操作。

在 Impl 端有三个 cc::LayerImpl 树,分别是 Pending,Active,Recycle 树。Commit 阶段提交的目标其实就是 Pending 树, Raster 的结果也被存储在了 Pending 树中。Raster阶段会把图块转换成位图,存储在内存中,当然这个内存地址的引用也会被记录,记录在 cc::PictureLayerImpl中(以后会用!)。

在 Activate 阶段,Pending 树中的所有 cc::LayerImpl 会被复制到 Active 树中,为了避免频繁的创建 cc::LayerImpl 对象,此时 Pending 树并不会被销毁,而是退化为 Recycle 树。

和主线程 cc::Layer 树不同,cc::LayerImpl 树并不是自己维护树形结构的,而是由 cc::LayerTreeImpl 对象来维护 cc::LayerImpl 树的。三个 Impl 树分别对应三个 cc::LayerTreeImpl 对象。

Draw
Draw 阶段并不执行真正的绘制,而是遍历 Active 树中的 cc::LayerImpl 对象,并调用它的 cc::LayerImpl::AppendQuads 方法创建合适的 viz::DrawQuad 放入 CompositorFrame 的 RenderPass 中。cc::LayerImpl 中的资源会被创建为 viz::TransferabelResource 存入 CompositorFrame 的资源列表中。至此一个 viz::CompositorFrame 对象创建完毕,最后通过 cc::LayerTreeFrameSink 接口将该 CompositorFrame 发送到给 viz 进程(GPU进程)进行渲染。

到了Draw这个步骤,当每个图块都被光栅化之后,合成器线程会为每个图块生成draw quads(在屏幕的指定位置绘制图块的指令,也包含了属性树里面的变换,特效等操作),这些draw quads会被封装在CompositorFrame对象里面,CompositorFrame对象也是Render Process(渲染进程)的产物,它会被提交到Gpu Process中。

Draw指的就是 把光栅化的图块,转换成draw quads的过程。 最后CompositorFrame会发送到viz进程(GPU进程)进行最后的渲染。

浏览器内核入门

Original: https://www.cnblogs.com/bigben0123/p/16445336.html
Author: Bigben
Title: 浏览器内核入门

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/551323/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Mac配置PHP开发环境

    众所周知,Mac对开发者非常友好,内置了很多开发语言的环境,比如Ruby、Python、PHP,本文主要给大家说一下小明 PHP环境的配置。 开启Apache服务 我们编写好的PH…

    技术杂谈 2023年7月24日
    075
  • 图像处理之水彩画特效生成算法

    在研究非真实感绘制相关算法时,水彩画算法是第一个開始看的,只是却拖到最后总结。 水彩画还是挺不好模拟的,里面涉及的算法比較多,本文实现的水彩画算法主要參考以下两篇文章,《Inter…

    技术杂谈 2023年5月31日
    099
  • Win10系统的SurfacePro4无法修改启动顺序怎么办

    必须要把底部的开关关闭,否则启动顺序无法修改 本文为博主原创文章,未经博主允许不得转载。 posted @2018-08-20 22:37 gary_tao 阅读(1850 ) 评…

    技术杂谈 2023年5月31日
    0281
  • 千古前端图文教程-HTML004- HTML标签:排版标签

    HTML标签:排版标签 HTML标签:排版标签 本文主要内容 #标题标签 HTML 注释 #段落标签 <span></span> 水平线标签 <hr&…

    技术杂谈 2023年7月11日
    068
  • EBS QRCODE

    qrcode_java0.50beta10.tar [root@ebs12vis ~]# su – applmgr [applmgr@ebs12vis ~]$ cd $…

    技术杂谈 2023年6月1日
    079
  • 交换鼠标按键

    csharp;gutter:true;[DllImport(“user32.dll”)]public extern static bool SwapMouseButton(bool…

    技术杂谈 2023年6月1日
    098
  • 日常踩坑_SpringBoot项目Controller层同时传输MultipartFile和实体类

    背景提要 需求是一个表单,需要同时上传附件和一些其他内容(例如标题、内容之类的),本身是把 MultipartFile作为一个数组直接放入创建的对象 FileSaveDTO中的,但…

    技术杂谈 2023年7月25日
    072
  • Creating a DMZ in OpenWRT

    Creating a DMZ in OpenWRT Creating a DMZ in OpenWRT https://forum.openwrt.org/t/guide-to-s…

    技术杂谈 2023年5月30日
    080
  • mac iterm2配置ssh自动登陆

    下载并安装好iterm2 配置过程: https://blog.csdn.net/hu_feng903/article/details/104077950 https://www….

    技术杂谈 2023年5月31日
    071
  • RHCSA认证考试

    考试要求: 在 mars.domain250.example.com 上执行以下任务。○ 复查 ○ 完成 配置网络设置○ 复查 ○ 完成 配置您的系统以使用默认存储库○ 复查 ○ …

    技术杂谈 2023年6月21日
    0132
  • 未来数据库需要关心的硬核创新

    分享嘉宾:刘冰冰 亚马逊云科技 编辑整理:张了了 聚水潭 出品平台:DataFunTalk 导读:数据库经过了几十年的发展,目前已经是一项非常成熟的技术,然而随着当今互联网的极速增…

    技术杂谈 2023年7月25日
    075
  • .ipynb格式文件

    ipynb,即ipython notebook,需要用ipython notebook打开,IPython Notebook是web based IPython封装,但是可以展现富…

    技术杂谈 2023年5月31日
    078
  • OpenSSL命令—pkcs8

    用途: pkcs8格式的私钥转换工具。它处理在PKCS#8格式中的私钥文件。它可以用多样的PKCS#5 (v1.5 and v2.0)和PKCS#12算法来处理没有解密的PKCS#…

    技术杂谈 2023年5月31日
    083
  • 2022.15 数字水印

    在数字化转型当下,越来越多事物在被电子数字化,我们在收获数字化便利好处的同时,也要面对数据信息更容易被泄漏、篡改、盗版等问题,而数字水印技术就是为解决上述问题的。 数字水印,是指将…

    技术杂谈 2023年5月30日
    089
  • 使用微软分布式缓存服务Velocity Part 1

    概述 Velocity是微软推出的分布式缓存解决方案,为开发可扩展性,可用的,高性能的应用程提供支持,可以缓存各种类型的数据,如CLR对象、XML、二进制数据等,并且支持集群模式的…

    技术杂谈 2023年5月31日
    081
  • 列表初始化

    C++11将列表初始化(大括号初始化)作为一种通用的初始化方式.可用于所有类型. 数组以前就可以用列表初始化,但 C++11 中的列表初始化新增了一些功能: 初始化数组时,可省略等…

    技术杂谈 2023年7月11日
    068
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球