firefox调试记录6——Firefox主窗口创建过程研究
2011-12-19 21:31
309 查看
到此为止,可以说已经到了firefox比较关键的地方了,其打开过程弄得比较清楚了,现在先来理清楚firefox是如何创建浏览器窗口,并最终展示在用户面前。这里先分析一下AppShell->Run()开始调用到消息循环开始这个过程。
当程序运行到~\firefox-8.0.source\toolkit\components\startup\nsAppRunner.cpp第35444行(在函数XRE_main里面)调用appStartup->Run()的时候,单步跟踪进去,发现该函数首先对环境进行了一下判断(如,有没有打开的firefox窗口,或者打开的窗口已经调用了推出函数),然后直接调用函数mAppShell->Run(),跟进这个函数。
函数mAppShell->Run()首先调用了mozilla::widget::StartAudioSession();函数,然后直接调用nsBaseAppShell::Run()。StartAudioSession()的功能是启用音频会话,跟进nsBaseAppShell::Run()函数。
该函数首先获取当前进程*thread = NS_GetCurrentThread();然后调用MessageLoop::current()->Run();,跟进这个函数。
MessageLoop::current()->Run()函数只有两句话:AutoRunState save_state(this);(保存当前状态)和RunHandler();(运行消息处理器),跟进RunHandler()。
RunHandler()就在Run()函数后面,直接调用其下面的函数RunInternal();
RunInternal()直接调用pump_->Run(this); pump_是一个MessagePump类的对象,其Run函数中有一个for循环,就是前面提到的消息处理循环。
上面这个过程的调用堆栈截图如下:
当程序运行到~\firefox-8.0.source\toolkit\components\startup\nsAppRunner.cpp第35444行(在函数XRE_main里面)调用appStartup->Run()的时候,单步跟踪进去,发现该函数首先对环境进行了一下判断(如,有没有打开的firefox窗口,或者打开的窗口已经调用了推出函数),然后直接调用函数mAppShell->Run(),跟进这个函数。
函数mAppShell->Run()首先调用了mozilla::widget::StartAudioSession();函数,然后直接调用nsBaseAppShell::Run()。StartAudioSession()的功能是启用音频会话,跟进nsBaseAppShell::Run()函数。
该函数首先获取当前进程*thread = NS_GetCurrentThread();然后调用MessageLoop::current()->Run();,跟进这个函数。
MessageLoop::current()->Run()函数只有两句话:AutoRunState save_state(this);(保存当前状态)和RunHandler();(运行消息处理器),跟进RunHandler()。
RunHandler()就在Run()函数后面,直接调用其下面的函数RunInternal();
RunInternal()直接调用pump_->Run(this); pump_是一个MessagePump类的对象,其Run函数中有一个for循环,就是前面提到的消息处理循环。
上面这个过程的调用堆栈截图如下:
相关文章推荐
- 调试过程中尚未研究的问题,先记录下,以后解决
- QT学习记录二 (windows窗口创建过程)
- STM32调试过程中遇到BIN文件生成问题记录
- Android应用程序窗口(Activity)的窗口对象(Window) 的创建过程分析
- linux vsftpd 创建虚拟用户 过程记录
- 到银联的调试过程,总结,记录
- VC中窗口的创建过程
- SRS学习笔记9-rtmp监听线程创建推流线程的过程分析-gdb调试
- 代码实现数据库的创建和查询(随便写点,只为记录自己的成长过程)
- Activity启动及窗口创建过程详解
- Windows编程——实现创建一个窗口过程
- OpenJDK源码研究笔记(十三):Javac编译过程中的上下文容器(Context)、单例(Singleton)和延迟创建(LazyCreation)3种模式
- 窗口的创建过程
- 多路广播应用----APP搜索网关调试过程记录
- vc++窗口的创建过程(MFC消息机制的经典文章)
- CanFestival win32程序调试过程记录 版本CanFestival-3-8bfe0ac00cdb
- 学MFC之前必须会的金典创建窗口程序的过程代码
- C++--CSplitterWnd::CreateView创建CListView创建过程的调试摘抄
- 【解剖】每日一记API—一个窗口创建的过程
- firefox扩展开发(二):用XUL创建窗口控件