乐于分享
好东西不私藏

Chromium源码分层与子目录说明

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:文档与工程支撑