
Chromium阅读笔记
文章平均质量分 89
编码时空的诗意行者
十年互联网大厂老司机
展开
-
Chromium源码阅读(12):Chromium不支持MSVC的原因:Double4类型的SIMD封装
由于这些扩展不是标准 C++ 的一部分,因此文件中的代码依赖于支持这些扩展的编译器,GCC 或 Clang。对于逻辑操作,例如比较和逻辑与操作,注释建议使用 AllTrue 函数来检查所有分量是否满足条件,并且在做逻辑与操作时使用位与操作符 & 而不是逻辑与操作符 && 以减少分支。最后,注释指出使用的是 GCC 扩展(也被 Clang 支持),而不是 Clang 独有的扩展,以确保代码能够在 GCC 或 Clang 编译器上编译。字节大小的向量类型。组成的 SIMD 类型,用于存储逻辑操作的结果。原创 2024-07-25 15:50:05 · 373 阅读 · 0 评论 -
Chromium源码阅读(11):了解chromium base的raw-ptr
chromium base的rawptr.h引起了我的注意,常见的ptr封装有refed_ptr、weak_ptr等。raw_ptr还要封装吗?那一定是有特殊的意义。原创 2024-07-19 17:13:58 · 1393 阅读 · 0 评论 -
Chromium源码阅读(10):了解Log模块
Chromium许多日志被TraceEvent代替了,因此TraceEvent出现的频率要比Log高很多。但是也有不少场景使用Log。在blink,Log的实现由base提供,而blink/render/core/base/logging.h进行了二次封装。原创 2024-07-18 18:19:27 · 1513 阅读 · 0 评论 -
Chromium源码阅读(9):了解事件跟踪TRACE_EVENT与第三方库Perfetto
首先,在一个头文件中(例如。原创 2024-07-17 16:47:03 · 1176 阅读 · 0 评论 -
Chromium源码阅读(8):了解Base库里的PartitionAlloc模块
malloc符号定义这个阶段负责覆盖mallocfree等符号,并将这些调用路由到分配器shim内部。这由中的头文件处理。在Windows上:Windows的UCRT(通用C运行时)导出了弱符号,我们可以在中覆盖它们。在Linux/CrOS上:分配器符号作为导出的全局符号在(对于mallocfree等)和(对于等)中定义。这使malloc符号在主可执行文件和任何第三方库中得到适当的拦截。在Android上:与Linux/CrOS的情况不同,加载时的符号拦截是不可能的。原创 2024-07-15 10:56:56 · 1587 阅读 · 0 评论 -
Chromium源码阅读(7):了解WTF的静态字符串机制
在浏览器的实现中,处理HTML和CSS涉及大量的字符串操作,这些操作通常包括字符串的比较、查找和匹配。如果使用普通的字符串对这些进行操作,在面临大量DOM元素和CSS规则时会导致效率低下。例如,当解析CSS时,属性名如colormarginpadding等在内部可以被转换为静态字符串。在后续的样式计算和匹配过程中,只需通过比较这些属性的ID,而不是一遍遍地比较完整的字符串。这种比较是通过简单的指针或整数比较来完成的,这要比字符串的字节级比较快得多。原创 2024-07-11 15:56:20 · 920 阅读 · 0 评论 -
Chromium源码阅读:Mojo实战:从浏览器JS API 到blink实现
这个API是Web标准API,肯定在blink/render下面,简单一搜就找到了:> get(> get(// Cookie Store API的解释器文档链接// 定义一个名为CookieStore的接口,它在ServiceWorker和Window环境中被暴露,Exposed=(ServiceWorker,Window), // 暴露给ServiceWorker和WindowSecureContext // 并且仅在安全上下文中可用(如HTTPS)原创 2024-06-13 17:05:55 · 1663 阅读 · 0 评论 -
Chromium源码阅读:深入理解Mojo框架的设计思想,并掌握其基本用法(2)
Mojo 是一个为 Chromium 项目量身定制的 IPC(Inter-Process Communication,跨进程通信)系统。它不仅包含了序列化和反序列化的能力,还提供了一整套用于高效跨进程消息传递和接口定义的机制。零拷贝传输Mojo 专注于支持大数据量的高效传输,包括对共享内存和跨进程直接内存访问的支持。这种零拷贝传输方式对于浏览器中图形和媒体相关的数据非常重要,可以最小化延迟和CPU开销。句柄和资源的传递Mojo 允许在进程间传递操作系统句柄(如文件、共享内存段和同步原语)。原创 2024-06-12 18:21:39 · 1964 阅读 · 0 评论 -
Chromium源码阅读:深入理解Mojo框架的设计思想,并掌握其基本用法(1)
节。如果用计算机网络的术语进行类比,那么 Channel 类似于网络协议栈中的 IP 层,它提供了寻址和路由的能力;而 NodeChannel则相当于应用层的协议,例如 UDP,它在更高层次上处理数据的传输和相关逻辑。那么,可以预见,Mojo的应用层概念将围绕Node为核心展开。从上面代码中我们发现,NodeChannel中有个重要的嵌入类:Delegate。原创 2024-06-12 14:44:18 · 1638 阅读 · 0 评论 -
Chrome 源码阅读:跟踪一个鼠标事件的流程
这个实现将抽象的行为具体化,它通过调用Blink渲染引擎的其他组件,如布局引擎、绘图系统等,来完成对Web内容的渲染和事件处理。类提供了一系列的基础方法和属性,用于管理节点之间的关系(例如父子关系和兄弟关系)、节点的遍历以及节点的基本操作(比如插入、替换、删除)。类是 Blink 和 Web 开发者用来操作和理解 Web 页面结构的基础,它为构建、遍历和交互提供了基本的框架。类还是事件模型的一部分。类是这些具体节点类型的基类,通过继承和多态,不同类型的节点可以拥有特化的行为,并且仍然能够通过。原创 2024-06-07 18:03:29 · 1850 阅读 · 0 评论 -
Chroium 源码目录结构分析(3):目录和模块总结(src根目录部分)
我将为每个目录提供摘要,概述其模块的作用、引入背景和价值。请注意,由于缺乏每个模块特定背景和价值的详细信息,我的回答可能会基于一般知识和模块描述进行推测。原创 2024-06-07 15:24:22 · 1387 阅读 · 0 评论 -
Chroium 源码目录结构分析(2):自动摘取目录结构信息
通过脚本,梳理统计chromium源码子目录的大小和功能情况:src根目录import osdef get_total_directory_size(path, ignore_dirs): total_size = 0 for root, dirs, files in os.walk(path): dirs[:] = [d for d in dirs if d not in ignore_dirs] for file in files:原创 2024-06-06 18:24:00 · 795 阅读 · 0 评论 -
Chroium 源码目录结构分析(4):目录和模块总结(thirdparty目录部分)
由于thirdparty目录下在子模块过多,很多模块只需要粗略了解即可。因此,这个目录不再进行详细的分析,只粗略给出一个简介。原创 2024-06-07 15:53:53 · 1348 阅读 · 0 评论 -
Chroium 源码目录结构分析(1):源码目录体积一栏
首先,我们拉一份最新的源代码(笔者是2024.6.6日拉取的):如果运行build,会生成许多生成的代码,因此我们不运行build。然后,把干扰后续分析的.git目录删除。这次拉取仅仅从源文件的物理结构对chromium进行分析。然后删除testsdata、test等相关的文件,减少理解源码功能的干扰。还手动删除了一些数据用space sniffer 可视化观察源码目录体积的情况,有个大概的印象:从src根目录:可见体积最大的是third-party,占据了接近80%放大我们后面会重点关注的src/c原创 2024-06-06 18:22:59 · 1146 阅读 · 0 评论 -
阅读笔记:Life of a Pixel
这份PPT讲述了Chromium浏览器内核中html文档渲染成像素的主要过程。网上有很多介绍和转载,内容非常硬核。今天看了一遍收益良多,于是整理成图。原创 2024-06-05 17:44:30 · 405 阅读 · 0 评论 -
阅读笔记:Multi-threaded Rasterization in the Chromium Compositor
对于图块化的内容,每个图块可以独立光栅化。:文档也提到了一些实施多线程光栅化带来的挑战,比如遮挡剔除(occlusion culling)的架构难题、更多并行可能导致的额外延迟,以及对Blink中像素级优化的无效化。:强调了“无特殊案例”原则,即Tile Manager需要考虑所有可能的图块,包括那些暂时不可见但未来可能需要的,以支持预渲染和减少页面滚动时的空白现象。: 这里提到的是一个编译时的设置,它可能属于Chrome的组件(cc代表Chrome Compositor),用于调试和查看图层记录的边界。原创 2024-06-06 14:19:54 · 704 阅读 · 0 评论