WebKit->Source:
文件夹 | 文件夹说明 |
bindings/ | bindings /目录包含大量使用V8 API的文件。拆分单独目录的理由是:V8 API非常复杂,容易出错并且对安全性敏感,因此我们希望将V8 API的使用与其他代码分开。 就依赖性而言,bindings/core 和 core/ /位于同一层级中。唯一的区别是他们使用V8 API的程度。如果给定文件正在使用许多V8 API,则应转到bindings/core。否则,应转到core /。请注意,随着时间的流逝,bindings/core 应该移动到 core/bindings ,并仅成为core/ 的一部分。 以上所有内容均适用于bindings/modules 和 modules/ |
core/ | core/目录实现了规范、IDL接口定义的Web平台的主体功能。由于历史原因,core/包含许多具有复杂相互依存关系的功能,因此可以视为一个整体。 |
modules/ | modules/目录是Web平台自包含的,是定义明确的功能集合,这些功能是从整体core/中剔除的。这些功能要求为:
模块/所有者负责确保仅添加满足上述要求的功能。 |
platform/ | platform/目录是Blink的较低级功能的集合,这些功能是从整体core/中移出的。这些功能遵循与modules/相同的原则,但是允许不同的依赖关系:
平台/所有者负责确保仅添加满足上述要求的功能。 例如,platform/scheduler程序为Blink发布的所有任务实现任务调度程序。 |
web/ |
|
wtf/ | WTF是一个专门供webkit使用的基础库。开发者正在尝试尽可能多地统一Chromium和webkit之间的基础库,因此WTF应该很小。需要此库是因为确实需要针对webkit的工作量和Oilpan(webkit GC)优化许多类型,容器和宏。如果类型是在WTF中定义的,则webkit必须使用WTF类型而不是//base或std库中定义的类型。比较常见的vectors, hashsets, hashmaps和 strings. webkit应该使用WTF::Vector, WTF::HashSet, WTF::HashMap, WTF::String and WTF::AtomicString instead of std::vector, std::*set, std::*map and std::string. |
core
& modules
& platform
的区分:
请注意,并没有没有“core
”、“modules
”、“platform
”的概念。它们之间的区别是为了实现方便,避免将所有内容放在单个核心/功能中(这会降低代码模块化并增加构建时间):
- 与HTML,CSS和DOM等基本部分紧密结合的功能应该放在core/中;
- 从概念上讲,取决于“core/”功能的功能应归入
modules
/; - “core/”所依赖的功能应转到Platform/;
WebKit->public:
文件夹 | 文件夹说明 |
platform/ | public/platform目录定义了运行Blink的抽象平台。 Blink并非直接与底层操作系统进行通信,而是设计为在沙箱中运行,并通过平台API与操作系统进行交互。 API的这一部分的中央接口是Platform,它是一个纯虚拟接口,Blink可以从该接口获得许多其他接口。 |
web/ | public/web目录定义了Blink的Web平台实现的接口,包括文档对象模型(DOM)。API此部分的主界面是WebView,这是探索API的良好起点。请注意,public/platform不应依赖于public/web。 |
整体的依赖关系如下:
Chromium => content/ => modules/ bindings/modules/ => core/ bindings/core/ => platform/ => 底层库(例如://base, //v8 和//cc)