为了对庞大的源码项目进行分析,先对源码目录树作一个简单的介绍,粗略的了解一下各个模块的功能分布情况,chrome源代码src目录下的结构如下图:

app:该目录下的代码主要是和各个操作系统平台相关的应用上层代码的提炼。不同操作系统可能对应不同的c++实现文件。比如裁剪板操作、操作系统数据交换接口、资源管理等。代码量不大。

base:基础设施代码,该目录下的代码对理解chrome的基础架构设计是必不可少的,这里面是大量的工具性、框架性代码实现,比如对进程、线程、消息循环的统一封装,对字符串处理、c++对象生命周期管理、json解析、路径服务、日期时间、日志框架等。

breakpad:崩溃服务框架库,在程序发生异常时,对异常进行捕获后可以将崩溃现场数据发送给google进行分析。

build:编译构建相关的工具支持。

chrome:浏览器主程序实现代码,包括了UI实现和Render部分两大部分,当然这两部分又是以大量的其他基础设施代码为基础的,比如Render部分是对webkit的封装。这部分代码量很大,google自产代码,频繁的改动代码主要集中在这里。

chrome_frame:这是google针对IE开发的一个插件,使得IE可以使用chrome的渲染引擎来显示网页。

courgette:小胡瓜,这个项目是一个针对升级使用的,目的是减少升级过程中数据下载的大小。比如版本升级可能需要更新某个DLL文件,而这个文件可能有10M大小,而新版本可能只是对该DLL改动了一行代码。通过courgette可以找出这两个DLL之间的差异部分,使得不需要下载10M大小,而可能只需要下载几十K的差异描述数据即可完成升级。

gears:是一个用来开发离线网络应用的工具,是一个JavaScript应用编程接口,通过GoogleGears可以允许多种Web应用程序脱机运行,可以让用户在上线或者离线状态下运行网络程序。离线就需要作本地存储,而在html5中就有本地存储相关的接口规范,因此google将放弃gears而采用html5的方式。

google_update:google更新,用于自动升级。

googleurl:google实现的URL解析辅助工具库。

ipc:非常重要的进程通信基础设施库。chrome是多进程架构,而进程间的通信就是以ipc库作为基础支持的。具体在windows下的实现方式是命名管道、异步IO(完成端口)、共享内存来实现进程间高效的数据传输。ipc不仅封装了IO机制,而且还定义了统一的消息传输格式。

media:多媒体音频视频解码相关的内容。

native_client:在浏览器中运行native代码的技术,是一个插件。native_client项目被视为微软ActiveX技术的继任者。项目具体细节可参考native

client官网

net:网络协议实现基础库,包括ftp、http等客户端协议栈的实现代码。

o3d:一个插件,可在浏览器中创建丰富的交互式三维应用程序,以后在浏览器中玩3D游戏将不再遥远。具体细节参考o3d项目官网

printing:打印方面的内容。

rlz:用户行为追踪,这个没有源码,这个库的目的就是将用户行为收集报告给google。虽然这对产品的改善有很大的帮助,但也存在隐私问题。

sandbox:沙盒安全技术,在浏览网页的时候,保护计算机不被恶意代码侵入。

sdch:一种新的压缩技术。浏览器在http请求时可以写成Accept-Encoding: sdch, gzip。服务器如果支持的话,就可以返回sdch格式的压缩数据给浏览器。

site_scons:一个工具,里面是一个python脚本文件,具体用处还未深入了解。

skia:google收购的一家公司提供的2D图形渲染库,图形库的优劣决定了浏览器的显示效果。据说IE9将采用GPU显卡渲染,估计浏览器采用GPU渲染将很快普及。

testing:c++单元测试框架库。

third_party:该目录下是大量的第三方开源支持库,最重要的当然是webkit内核了。

v8:google开发的高效的javascript引擎,是chrome的重要内核库。

views:界面控件元素库,对不同操作系统平台的UI事件交互机制、各种控件如按钮、菜单、树、checkbox等进行了统一的封装。界面绘制采用skia来实现。

webkit:google对webkit内核的封装层,其目的是在webkit内核和上层调用之间提供一个中间层。该目录下有一个重要的glue工程。是名副其实的‘胶水’层。

整个源码工程虽然庞大,但其结构是非常清晰的,代码风格很统一,就象是一个人写的一样。借助vs2008强大的可视化调试,我们只要掌握好粒度,从粗到细,从整体到局部逐渐深入,带着问题去跟踪调试,很快就会上手进入状态。

chrome源代码目录结构简介(版本4.1.249.1059)的更多相关文章

  1. Android 工程目录结构简介

    一般来说,一个Android工程的目录结构如下图所示. 1:src JAVA源代码都放在这里面. 2:gen 编译器自动生成的一些JAVA代码 3:Android 4.2 Android平台(本工程用 ...

  2. Contiki 源代码目录结构

    最近要在烧写contiki的CC2650上做一些简单的实验,需要对contiki的目录结构有一个简单的了解.本文使用的是contiki 3.0版本,并且参考了百度文库上的一篇文档:https://we ...

  3. Android系统源代码目录结构 “Android源代码”“目录结构”

    在讲述Android源码编译的三个步骤之前,将先介绍Android源码目录结构,以便读者理清Android编译系统核心代码在Android源代码的位置. Android源代码顶层目录结构如下所示: ├ ...

  4. Android源代码目录结构(转)

    https://android.googlesource.com/ Android 2.2 |-- Makefile |-- bionic               (bionic C库) |-- ...

  5. angular源码分析:angular的源代码目录结构说明

    一.读源码,是选择"编译合并后"的呢还是"编译前的"呢? 有朋友说,读angular源码,直接看编译后的,多好,不用管模块间的关系,从上往下读就好了.但是在我看 ...

  6. Android开发学习之路--Android Studio项目目录结构简介

    既然已经搭建好环境了,那就对Android Studio中项目目录结构做个简单的了解了,这里以最简单的Hello工程为例子,新建好工程后看如下三个工程视图: 1.Android工程 manifests ...

  7. linux 源代码目录结构

    Linux源代码目录树结构 (2008-04-21 09:14) 分类: Linux/Unix Linux用来支持各种体系结构的源代码包含大约4500个C语言程序,存放在270个左右的子目录下,总共大 ...

  8. cept源代码目录结构详解_知识树(转)

    1 简介该代码架构基于版本10.0.5整理,先整理根目录里的代码,再整理出src目录的架构. 2 代码架构2.1 Ceph源码根目录Ceph的根目录下包含了一些文件夹和若干编译.代码格式相关的文件. ...

  9. 摘抄 - linux 目录结构简介

    /   根目录 |—–/bin   软连接,指向 /usr/bin.存储一些命令,一般为用户命令 |—-/boot  系统启动相关的文件;包括启动时内核的一些配置,grub配置等等:一般为之分配300 ...

随机推荐

  1. 洛谷P4887 第十四分块(前体)(二次离线莫队)

    题面 传送门 题解 lxl大毒瘤 我们考虑莫队,在移动端点的时候相当于我们需要快速计算一个区间内和当前数字异或和中\(1\)的个数为\(k\)的数有几个,而这个显然是可以差分的,也就是\([l,r]\ ...

  2. codechef : TREDEG , Trees and Degrees

    其实有原题,生成树计数 然鹅这题里面是两道题, 50pts 可以用上面那题的做法直接过掉,另外 50pts 要推推式子,搞出 O n 的做法才行(毕竟多项式常数之大您是知道的) 虽说这道题里面是没有 ...

  3. 反向代理与Real-IP和X-Forwarded-For(转)

    如下图所示,客户端通过Nginx Proxy1 和 Nginx Proxy2 两层反向代理才访问到具体服务Nginx Backend(或如Tomcat服务).那Nginx Backend如何才能拿到真 ...

  4. [Qt Quick入门] 基本元素初体验

    Qt Quick作为QML语言的标准库,提供了很多基本元素和控件来帮助我们构建Qt Quick应用.这节我们简要地介绍一些Qt Quick元素,如Rectangle.Item.Text.Button. ...

  5. 转 MySQL数据库基础

    http://lib.csdn.net/article/mysql/57883 1 数据库基础 一.数据库与数据库管理系统 1.数据库(DB):存放数据的仓库,从广义来说,数据不仅包括数字,还包括了文 ...

  6. WinForm ListBox 控件用法

    下面演示如何利用列表控件 ListBox 实现多选与移动选项: using IMS.WinFormClient.UserControls; using System; using System.Col ...

  7. 使用jstack精确找到异常代码的

    https://blog.csdn.net/mr__fang/article/details/68496248

  8. Modbus消息帧

    两种传输模式中(ASCII和RTU),传输设备以将Modbus消息转为有起点和终点的帧,这就允许接收的设备在消息起始处开始工作,读地址分配信息,判断哪一个设备被选中(广播方式则传给所以设备),判知何时 ...

  9. php函数的定义和声明

    1.函数的定义 函数是一个被命名的独立的代码段,它执行特定任务,并可以给调用它的程序返回值. 2.函数的优点 提高程序的重用性 提高程序的可维护性 可以提高软件的开发效率 提高软件的可靠性 控制程序的 ...

  10. win7下安装MySQL 5.7.19(解压缩版)

    1.官网下载地址:https://downloads.mysql.com/archives/community/ 下载后,得到压缩包: 2.解压,我的解压目录为:E:\mysql-5.7.19\mys ...