Chromium源码分层与子目录说明
帮你建立 Chromium 代码库的整体脑图
说明“这一层主要放什么”
说明“这一层下面常见子目录通常负责什么”
不追求:
精确到具体文件
穷尽所有历史细节
穷尽每一个边缘目录
1. 总体分层
可以先把 Chromium src 大致理解成 5 层:
基础设施层 2. 内核与运行时层 3. 公共能力组件层 4. 产品与平台层 5. 文档、测试、工具与工程支持层
如果用最实用的方式记:
base / build / tools:工程基础
content / mojo / services / net / ui:浏览器运行时核心
components:可复用业务模块
chrome / android_webview / ash / ios:具体产品与平台
docs / testing / infra:文档与工程支撑
2. 基础设施层
这一层主要解决“所有上层都要用的共性能力”。
### /Users/cj/chromium/src/base
作用:
Chromium 最底层公共库
提供字符串、时间、文件、路径、线程、任务调度、日志、同步、命令行、进程工具等
常见子目录职责:
memory/ 内存管理、智能指针、内存安全相关能力
task/ 任务调度、线程池、序列执行、异步执行框架
files/ 文件系统、路径、I/O 工具
strings/ 字符串转换、格式化、编码处理
time/ 时间、定时器、时间戳与时间区间工具
containers/ Chromium 自定义容器或容器适配工具
functional/ 回调、绑定、函数对象工具
metrics/ 基础埋点、统计、直方图等通用能力
test/base 层自己的测试辅助设施
### /Users/cj/chromium/src/build
作用:
主构建系统配置目录
决定如何编译、链接、打包、测试
常见子目录职责:
config/ 编译器、平台、功能开关、优化参数等配置
toolchain/ 各平台工具链定义
android/ Android 构建规则与支持
ios/ iOS 构建规则与打包支持
rust/ Rust 集成相关规则
util/ 构建辅助脚本与通用工具
### /Users/cj/chromium/src/buildtools
作用:
构建依赖工具与工具链资源
常见子目录职责:
clang、libc++、平台工具、GN 辅助资源等
### /Users/cj/chromium/src/build_overrides
作用:
覆写默认构建行为
用于特定产品或嵌入方调整公共依赖和编译选项
### /Users/cj/chromium/src/third_party
作用:
第三方依赖总目录
常见内容:
渲染库、媒体库、网络库、前端依赖、测试依赖、编译工具依赖
### /Users/cj/chromium/src/tools
作用:
开发、检查、生成、维护工具集合
常见子目录职责:
代码生成器
分析脚本
开发辅助工具
自动化维护脚本
3. 内核与运行时层
这一层是 Chromium 真正“跑起来”的核心。
### /Users/cj/chromium/src/content
作用:
浏览器内核框架层
定义 Browser Process、Renderer Process、Navigation、Frame、WebContents 等核心抽象
常见子目录职责:
browser/ 浏览器进程核心逻辑
renderer/ 渲染进程核心逻辑
common/ browser/renderer 共用的数据结构、常量、IPC/Mojo 粘合
public/ 对外暴露给其他目录依赖的公共接口
child/ 子进程公共入口支撑
gpu/ 与 GPU 相关的 content 层接入
test/ content 层测试基础设施
shell/ content shell 这种轻量嵌入壳程序
### /Users/cj/chromium/src/mojo
作用:
进程间通信框架
常见子目录职责:
public/ 对外暴露的 Mojo API
core/ Mojo 核心运行时
bindings/ 接口绑定与代码生成相关支持
### /Users/cj/chromium/src/services
作用:
服务化能力集合
很多独立子系统会以 service 方式暴露接口
常见子目录职责:
network/ 网络服务
device/ 设备服务
audio/ 音频服务
metrics/ 指标与度量服务
public/ 对外公共接口,很多是 mojom
各个子服务自己的 public/mojom/ 服务接口定义层
### /Users/cj/chromium/src/net
作用:
Chromium 网络协议栈核心
常见子目录职责:
base/ 网络基础类型与工具
http/ HTTP 协议实现
dns/ DNS 解析相关
socket/ 套接字通信
ssl/ TLS/证书校验
cookies/ Cookie 相关
proxy_resolution/ 代理解析与 PAC
### /Users/cj/chromium/src/ui
作用:
UI 基础设施层
常见子目录职责:
gfx/ 几何、颜色、图像等基础图形类型
events/ 输入事件系统
views/ Views UI 框架
base/ UI 层公共基础设施
aura/ 窗口与合成环境相关能力
compositor/ UI 合成支撑
accessibility/ 无障碍能力
resources/ UI 资源
### /Users/cj/chromium/src/device
作用:
设备能力接入层
常见子目录职责:
bluetooth/ 蓝牙
usb/ USB
hid/ HID 设备
serial/ 串口
vr/ / xr/ XR/VR 相关设备接入
fido/ 安全密钥、身份验证设备
### /Users/cj/chromium/src/media
作用:
音视频能力层
常见子目录职责:
audio/ 音频采集与播放
video/ 视频处理与播放
filters/ 媒体管线组件
capture/ 音视频采集
muxers/ 封装与复用
### /Users/cj/chromium/src/gpu
作用:
GPU 运行时与硬件加速支撑
常见子目录职责:
command_buffer/ GPU 命令缓冲
config/ GPU 配置与黑名单等
ipc/ GPU 相关进程通信
### /Users/cj/chromium/src/cc
作用:
合成器与渲染管线层
常见子目录职责:
layers/ 图层树
trees/ 合成树、提交与同步
animation/ 动画系统
input/ 滚动和输入与合成交互
其他内核支撑目录
/Users/cj/chromium/src/storage
存储系统
常见方向:blob、quota、filesystem、bucket、持久化数据管理
/Users/cj/chromium/src/sql
SQLite 封装与数据库工具
/Users/cj/chromium/src/url
URL 解析、规范化、Origin/Scheme 能力
/Users/cj/chromium/src/crypto
加密、签名、证书相关能力
/Users/cj/chromium/src/sandbox
进程隔离与沙箱策略
/Users/cj/chromium/src/ipc
历史 IPC 基础设施及部分桥接能力
/Users/cj/chromium/src/gin
C++ 与 V8/JS 的绑定辅助层
/Users/cj/chromium/src/pdf
PDF 渲染与集成能力
/Users/cj/chromium/src/printing
打印管线与打印预览能力
/Users/cj/chromium/src/google_apis
Google API 相关协议与客户端辅助
/Users/cj/chromium/src/rlz
历史分发/来源标识相关模块
/Users/cj/chromium/src/dbus
D-Bus 系统服务交互封装
/Users/cj/chromium/src/skia
图形库 Skia 集成
/Users/cj/chromium/src/v8
JavaScript 引擎 V8
/Users/cj/chromium/src/webkit
历史遗留目录,偏兼容与过渡意义
4. 公共能力组件层
### /Users/cj/chromium/src/components
作用:
这是 Chromium 的公共组件层
放会被多个产品、多个平台或多个上层共享的功能模块
典型模块:
autofill/
history/
password_manager/
safe_browsing/
sync/
optimization_guide/
一个典型组件常见子目录模式:
browser/ 只能运行在浏览器进程的组件逻辑
renderer/ 只能运行在渲染进程的组件逻辑
common/ browser/renderer 共用层,通常放接口、常量、Mojo 定义、共享数据结构
core/ 与具体产品弱耦合的纯逻辑层,常用于可复用业务核心
android/ Android 专用接入
ios/ iOS 专用接入
public/ 暴露给其他目录依赖的接口
test/ 测试工具或测试支持代码
你当前新增的 components/automation/ 就适合沿这个模式发展,比如:
core/common/ 动作模型、类型定义、Mojo/协议抽象
后续可继续加:browser/、renderer/、public/、test/
5. 产品与平台层
这一层主要是“谁把内核和组件真正组装成一个产品”。
### /Users/cj/chromium/src/chrome
作用:
Chrome 浏览器产品层
负责浏览器 UI、Profile、策略、特性组装、页面、产品级行为
常见子目录职责:
browser/ Chrome 浏览器进程产品逻辑,最常改的上层目录之一
renderer/ Chrome 在渲染进程侧的产品级逻辑
common/ Chrome 公共数据结构与常量
utility/ utility 进程相关集成
services/ Chrome 自己的 service 层能力
test/ Chrome 层测试
android/ Android Chrome 产品代码
app/ 浏览器应用壳、资源和入口相关
### /Users/cj/chromium/src/android_webview
作用:
Android WebView 的产品层和嵌入层实现
常见子目录职责:
browser/ WebView 浏览器侧逻辑
renderer/ WebView 渲染侧逻辑
common/ WebView 公共定义
java/ Android Java 层接入
### /Users/cj/chromium/src/ash
作用:
Ash 桌面环境与窗口系统
在 ChromeOS 图形环境中地位很高
常见子目录职责:
public/ 对外可依赖的 Ash 接口
shell/ Ash Shell 本体
system/ 系统 UI
wm/ 窗口管理
### /Users/cj/chromium/src/chromeos
作用:
ChromeOS 平台能力与产品整合
常见方向:
平台服务接入
系统策略
设备能力
ChromeOS 特有产品逻辑
### /Users/cj/chromium/src/headless
作用:
Headless Chromium 无界面运行模式
常见子目录职责:
app/ 入口与壳
lib/ Headless 运行时库
public/ 对外接口
### /Users/cj/chromium/src/chromecast
作用:
Chromecast 产品相关代码
### /Users/cj/chromium/src/fuchsia_web
作用:
Fuchsia 平台上的 Web 嵌入实现
### /Users/cj/chromium/src/ios
作用:
iOS 平台通用代码与 Chromium 在 iOS 上的基础设施
常见子目录职责:
web/ iOS Web 层能力
build/ iOS 构建相关
chrome/ 不在这里,而是在更高层 iOS 目录体系中独立存在
### /Users/cj/chromium/src/apps
作用:
应用模型与应用基础设施
包含一部分历史 Chrome Apps / Web Apps 相关逻辑
### /Users/cj/chromium/src/clank
作用:
Android Chrome 历史目录
主要可理解为 Android 上 Chrome 产品集成的历史残留或专用打包部分
### /Users/cj/chromium/src/remoting
作用:
远程桌面/远程控制产品代码
6. 文档、测试与工程支持层
### /Users/cj/chromium/src/docs
作用:
官方文档主入口
常见内容:
架构文档
开发流程
测试指南
构建与调试说明
### /Users/cj/chromium/src/testing
作用:
通用测试基础设施
常见子目录职责:
测试工具
测试资源
平台测试支持
浏览器测试/单测通用封装
### /Users/cj/chromium/src/infra
作用:
CI/CD、recipe、自动化流水线与基础设施集成
### /Users/cj/chromium/src/styleguide
作用:
风格、规范、工程约束说明
### /Users/cj/chromium/src/codelabs
作用:
教学示例与实验性学习内容
### /Users/cj/chromium/src/clusterfuzz-data
作用:
fuzzing/ClusterFuzz 相关数据或样本
### /Users/cj/chromium/src/out
作用:
本地构建输出目录
放生成代码、中间产物、编译产物,不属于源码主体
7. 内部或工作区附带目录
### /Users/cj/chromium/src/internal
作用:
内部私有扩展目录
不同环境下内容可能不同
### /Users/cj/chromium/src/ios_internal
作用:
iOS 内部私有代码目录
### /Users/cj/chromium/src/agents
作用:
当前工作区附带目录
更偏本地自动化/代理能力,不是标准 Chromium 核心目录
8. 如果你现在的目标是做 Chromium 自动化内核
最值得优先熟悉的目录层级是:
第一优先级
content/
components/
chrome/
services/
第二优先级
ui/
device/
net/
mojo/
第三优先级
base/
testing/
tools/
对你当前这个方向,最实用的子目录关注顺序通常是:
content/browser/2.content/renderer/3.content/public/4.components/<你的组件>/core/common/5.components/<你的组件>/browser/6.chrome/browser/7.services/*/public/mojom/8.ui/events/ 与 ui/gfx/
9. 一句话总结
Chromium 的目录结构可以简化理解为:
base/build/tools:工程地基
content/mojo/services/net/ui:浏览器运行时骨架
components:可复用功能模块
chrome/android_webview/ash/ios/...:产品和平台装配层
docs/testing/infra:文档与工程支撑
夜雨聆风