chromium进程间通信

因为chromium是多进程的架构,因此需要一种可靠的进程间通信机制。chromium在Windows上的进程间通信是基于命名管道实现的。异步的命名管道通信模式确保不会阻塞通信的双方。 browser中的IPC 在browser进程中,与renderers进程通信是在独立的I/O线程里。跟views的来往消息会通过主线程的ChannelProxy。这种架构的优势是资源请求等性能要求较高的消息会直接在I/O线程里处理了,不会导致UI的阻塞。 renderer中的IPC 每个renderer进程的主线程管理消息通信,大多数消息会调度到renderer线程去处理。 消息的类型 chromium中有两种主要的消息:routed和control。control由创建管道的类直接处理。这个类也允许其他类通过MessageRouter对象去监听注册接收routed消息。 比如,control消息没有指定那个view处理,它将被RenderProcess或者RenderProcessHost处理。请求资源或者修改剪贴板都是跟特定view无关的,所以它是control消息。要求一个view重绘某个区域则是routed消息。 声明消息 chromium在ipc_message_macros.h中有很多不同的宏用来声明消息。比如声明一个从renderer到browser的routed消息,包含url和view... Read More | Share it now!

熟悉chromium代码目录结构

很多项目结构都已发生了改变,可能与最新的项目结构不一致。 高层次概述 chromium可以分为三大部分:浏览器,渲染器,webkit。浏览器是主进程,代表着所有的UI和I/O。渲染器(通常)是每个标签对应一个子进程,被浏览器驱动着。它嵌入webkit用来布局和渲染。 sln文件的快速入门 chrome.sln 启动代码在... Read More | Share it now!

Chromium显示网页

原文链接:http://dev.chromium.org/developers/design-documents/displaying-a-web-page-in-chrome 概念应用层 每个框代表一个概念应用层。没有一层需要知道或者依赖他的上层。 WebKit:渲染引擎。Port是一个集成平台相关的系统服务的部分,比如资源加载和图像。 Glue:转换webkit类型到chromium类型。 Renderer... Read More | Share it now!

Chromium多进程架构

原文链接:http://dev.chromium.org/developers/design-documents/multi-process-architecture 这篇文章是从高层的架构来描述chromium,每个新接触chromium的人最好都能理解这篇文章的概念。 chromium为浏览器标签页使用隔离开的进程,使得浏览器渲染引擎的错误不会导致整个浏览器的错误。也限制每个渲染引擎进程去访问其他进程和系统。在某些方面,独立的多进程架构可以利用操作系统带来的内存保护和访问控制的好处。 我们运行界面、管理标签页和插件的进程称为主进程,或者是浏览器进程,浏览器。而每个标签页所对应的进程称之为渲染进程或者渲染器。渲染器使用webkit来解释排布html。 管理渲染进程 每个渲染进程有个全局的RenderProcess对象来管理跟他的父进程也就是浏览器进程的通信和维护各种全局状态。浏览器进程则是为每个渲染进程维护对应的RenderProcessHost对象,用来管理浏览器状态和跟渲染进程通信。浏览器进程和渲染进程是通过Chromium’s... Read More | Share it now!

Windows下面获取chromium代码

参考: http://dev.chromium.org/developers/how-tos/get-the-code http://dev.chromium.org/developers/how-tos/install-depot-tools chromium是个巨大的开源项目,目前的chromium27包含有700多个工程,2个多G的代码压缩包,解压出来5个G以上。要把这些代码同步到本地,一般要花费很长时间,由于中国的网络原因,同步代码经常被中断。所以不建议直接用svn去同步代码。 如果你只是想查看代码,可以通过这个网址在线的查看,http://src.chromium.org/viewvc/chrome/。 下面有几种方便的方式来获取代码到本地。 安装depot_tools 下面的方法都需要安装depot_tools。 从这里下载depot_tools:https://src.chromium.org/svn/trunk/tools/depot_tools.zip。 然后解压到一个目录,比如c:depot_tools,然后把这个目录加入PATH环境变量里面。 使用压缩包获取代码 去这里下载代码压缩包,http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html。一般有几个G的大小,用迅雷下载比较方便。 把压缩包的中的代码解压到你本地的目录,目录的路径名不能包含空格。比如你建立一个c:chromium的目录,把解压包的src目录和同级的.gclient、.gclient_entries、README-archive等文件复制到c:chromium目录下。 安装depot_tools cmd里面切换到c:chromium目录,运行gclient... Read More | Share it now!

Mfc实现系统托盘功能

声明一个NOTIFYICONDATA类变量,该句可以放在Dlg类的声明中,作为Dlg类的一个成员;也可以放在Dlg类的实现中,作为全局变量来使用。 声明一个响应函数,用于响应鼠标操作。将这个函数放入Dlg类的声明中,作为Dlg类的一个成员。 定义消息名称以消息号,并注册消息,该步很重要!我就是因为没有注册消息,导致调试了很久都找不到问题所在。该步都是在Dlg.cpp(Dlg的实现中)中操作。定义消息名称和消息号:,1001只是用于指定一个消息号,可以随便指定。 注册则是在BEGIN_MESSAGE_MAP(Dlg,CDialog)和END_MESSAGE_MAP()之间添加 初始化系统托盘: 有了上面的代码,当程序运行到含有如上代码的函数时就会在系统托盘处添加一个图标,想隐藏主对话框,就再添加一句ShowWindow(SW_HIDE);这样就实现了将MFC最小化到系统托盘。但还要添加点击托盘图标时响应鼠标的函数,也就是第二步中的函数OnNotifyIcon。OnNotifyIcon函数,如下: 退出时删除托盘 ... Read More | Share it now!