chromium 术语
一、以前的类前缀 Render 都被替换成了 Layout??
(比如 core/dom/RenderTreeBuilder.cpp 换成了 \third_party\blink\renderer\core\dom\layout_tree_builder.cc
LayoutObject,以前是 RenderObject ??? (layout_object.cc)
PaintLayer,以前是 RenderLayer
PictureLayer 以前是 GraphicLayer (GL)
third_party\blink\renderer\core\paint\paint_layer_painter.cc
对应以前是 external/chromium_org/third_party/WebKit/Source/core/rendering/RenderLayer.cpp
Dom节点每个对象对应一个 LayoutObject,当 layoutObject处于同一个渲染空间时,形成 PaintLayer(即绘制层,以前的渲染层)。PaintLayers 来保证页面元素以正确的顺序合成.。 这时候就会出现层合成 paintLayer(composite),从而正确处理透明元素和重叠元素的显示。合成是合成paintLayer。
GraphicsContext 绘图上下文,它提供绘制指令接口,比如 drawImage,drawRect。关联着 paintOpBuffer,去调用这些绘制指令,生成绘制命令。这是blink内部指令,一条条指令生成指令集合。起了别名 PaintRecord。这些指令都有序列化,反序列化接口。这些指令可以有具体实现去做。
序列化后可以传到gpu,由gpu绘制。
也可以给skia去绘制,即把 PaintOp转成了 SkPicture.就是用skia的绘制指令实现绘制。
机制都是通过创建不同的canvas实现,对同一条指令做不通处理。 ,比如 输出指令日志,光栅化指令,或者把指令生成skp(即skia的picture,可以通过canvaskit绘制)。
Dom tree + cssom tree> RenderObject tree > renderlayer tree> 整理合并生成层 graphic layer
在图层中的Paint count: 当有css属性position:fixed属性,在滚动时这段区域不动,会导致它需要不断重绘,Paint count一直在增长;
Layer的生成,即PaintLayer(\blink\renderer\core\layout\layout_box_model_object.cc):
查看代码
void LayoutBoxModelObject::CreateLayerAfterStyleChange() { NOT_DESTROYED(); DCHECK(!HasLayer() && !Layer()); GetMutableForPainting().FirstFragment().SetLayer( MakeGarbageCollected<PaintLayer>(this)); SetHasLayer(true); Layer()->InsertOnlyThisLayerAfterStyleChange(); // Creating a layer may affect existence of the LocalBorderBoxProperties, so // we need to ensure that we update paint properties. SetNeedsPaintPropertyUpdate(); if (GetScrollableArea()) GetScrollableArea()->InvalidateScrollTimeline(); }
1)浏览器内核原理--Chromium Blink流程 PaintLayer和GraphicsLayer - 知乎 (zhihu.com)
2)(15条消息) Chromium网页Render Layer Tree创建过程分析_罗升阳的博客-CSDN博客
4)*****
揭秘 Chromium 渲染引擎(三):关键数据结构 - 知乎 (zhihu.com)
揭秘 Chromium 渲染引擎(一):RenderingNG - 知乎 (zhihu.com)
揭秘 Chromium 渲染引擎(二):RenderingNG 架构概览 - 知乎 (zhihu.com)
揭秘 Chromium 渲染引擎(四):深入视频引擎 - 知乎 (zhihu.com)
英文原作者:This post is a part of a series on the Chromium rendering engine. Check out the rest of the series to learn more about RenderingNG, the architecture, VideoNG, and LayoutNG. key data structures
stage与 artifact
渲染是在管线上进行的,管线由各个阶段(stage)和制品(artifact)组成。每个阶段都代表了在渲染进程中完成一项定义明确的任务代码。制品则是数据结构,是各阶段的输入或输出,在图中,输入输出用箭头表示。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2018-03-30 用go语言实现线程池