WebKit(Chrome)中的树结构

时间:2017-08-18 04:58:40

标签: html google-chrome dom webkit render

Web浏览器在浏览网页时会生成许多树,包括DOM,CSSOM,Render,Layout树。 (布局树是否存在?或者布局树只是一个概念,它是一个具有布局属性的渲染树的概念吗?)

我正在检查Chromium源代码,我正在尝试查找每棵树的数据结构,以及它们的制作方式/时间/地点。

我在WebKit中找到了DOM树,它是一个树状结构。 按照源代码,看一些引用如:

我发现以下内容:

  • HTMLDocumentParser通过函数HTMLDocumentParser::PumpTokenizer()
  • 工作
  • 在该函数中,它调用HTMLDocumentParser::ConstructTreeFromHTMLToken()并使用HTMLTreeBuilder构建DOM树
  • 完成解析时(当解析器看到</html>结束标记时),执行函数Document::FinishedParsing(),并触发DOMContentLoaded事件。

我认为CSSOM,渲染和布局树将在FinishedParsing期间/之后制作,但我无法找到。

我认为一些重要的功能如下:(我发现他们使用TRACE_EVENT函数在跟踪文件中记录重要内容)

  • Document::FinishedParsing()
    • Document::UpdateStyleAndLayoutTree()
      • Document::UpdateActiveStyle():制作CSSStyleSheetGlobalRuleset
      • Document::UpdateStyle():设置样式并附加到布局树

我无法找到树的确切数据结构。 我正在寻找以下结构和功能:

  • 数据结构
    • CSSStyleSheet
    • StyleSheetCollection
    • CSSGlobalRuleSet
    • LayoutObject
  • 函数
    • Element::RecalcStyle
    • Element::RebuildLayoutTree

我在哪里可以找到这些树结构上的数据,以及我应该遵循的序列?

===加法=== 2017.08.18 16:46 KOREA

我分析了$CHROME/src/third_party/WebKit/Source/core/dom/Document.cpp$Document::FinishedParsing()Document::UpdateStyleAndLayoutTree()中的代码。

想到的内容如下:

  • CSSOM由Document::UpdateActiveStyle()
  • 制作
  • 渲染树在Document::UpdateStyle()
  • 中制作
  • 布局树在Document::NotifyLayoutTreeOfSubtreeChanges()中制作 (我认为布局树是一个概念树,它与渲染树共享相同的结构)

0 个答案:

没有答案