chromium之BrowserMainParts

chromium中的类 BrowserMainParts,这个类包含了由BrowserMain()函数执行的几个不同的阶段,该类中的每一个函数都代表一个阶段,这些方法都在BrowserMainLoop的通信方法中被调用。


主要有以下几个阶段:

  1. EarlyInitialization:Main Message Loop开始运行之前,此时需要完成在Main Message Loop运行之前就要完成的任务(例如设置信号处理函数);
  2. MainMessageLoopStart:Main Message Loop开始运行时,也就是在Main Message loop开始一直到主线程初始化完成,此时平台相关的操作应该放在PreMainMessageLoopStart()函数中完成;
  3. RunMainMessageLoopParts:在Main Message Loop开始运行之后。(例如:MessageLoopForUI::current()->Run())。
接下来看看如何添加内容,主要是为已经存在的parts:
  • 指出你的新代码在什么时候被执行。在你的代码执行之前以及之后要做些什么?是否有合理的理由在特殊的时间运行你的代码?用文档记录下来!
  • 分离出所有平台相关性的地方。请在各方面避免#ifdef 之类的宏定义。你有两个选择来处理与平台相关的代码:(1).在平台相关的方法中执行这些代码,当要执行的操作是平台唯一的,请在Pre/Post...()方法中完成;(2). 如果要执行的操作在不同的平台中有不同的实现,就放在某一个部分中去执行(例如:EarlyInitialization());
  • 除非你的新代码特别少,否则请把这些代码放在分离的方法中,并且想法要很清晰。
主要成员函数如下:
virtual void PreEarlyInitialization() {}

virtual void PostEarlyInitialization() {}

virtual void PreMainMessageLoopStart() {}

virtual void PostMainMessageLoopStart() {}

初始化使用者的额外工具包
virtual void ToolkitInitialized() {}

这个函数在content framework的子线程创建之前运行,此时Main Message Loop已经创建但还未运行,并且用户自己的工具包也已初始化。返回值就是错误码,若为0,正执行成功。
virtual int PreCreateThreads();

virtual void ServiceManagerConnectionStarted(ServiceManagerConnection* connection) {}

这个函数只在Main Message Loop运行之前调用。此时,browser的多个线程都已经创建完毕。
virtual void PreMainMessageLoopRun() {}

返回true表示Main Message Loop已经开始运行,否则返回false。
如果返回false,将会调用此函数默认的实现。若设置了返回码,这个返回码将在BrowserMain()中得到。
virtual bool MainMessageLoopRun(int* result_code);

在Main Message Loop停止之后调用,此时线程还没有停止。
virtual void PostMainMessageLoopRun() {}

在程序结束之前调用
virtual void PreShutDown() {}

恰好是程序结束之前的最有一个部分,此时线程都已经停止并且被销毁
virtual void PostDestoryThreads() {}

关于这个类的具体功能还需要在工作中进一步学习,目前整理该类的虚方法以及基本介绍,作为一个熟悉和铺垫。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值