chromium之content_shell源代码分析(二)

上一篇介绍到了Shell_browser_main.cc的中调用的BrowserMainRunnerImpl的Initialize和Run函数,现在来介绍具体的过程和特点;在BrowserMainRunnerImpl的Initialize中会看到如下代码:


 main_loop_.reset(new BrowserMainLoop(parameters));

    main_loop_->Init();

    main_loop_->EarlyInitialization();

    // Must happen before we try to use a message loop or display any UI.
    main_loop_->InitializeToolkit();

    main_loop_->MainMessageLoopStart();

BrowserMainLoop的Init在上一篇我们介绍过了,下面来看看EarlyInitialization:

 if (parts_.get())
    parts_->PreEarlyInitialization();

if (parts_.get())
    parts_->PostEarlyInitialization();

parts_是在Init中初始化的,通过上一篇的分析我们得知是由ShellContentBrowserClient的CreateBrowserMainParts函数得到结果,其代码如下:

shell_browser_main_parts_ = new ShellBrowserMainParts(parameters);
  return shell_browser_main_parts_;

从代码中我们可以知道,ShellBrowserMainParts的这连个函数在windows平台下,什么都没做;

看看BrowserMainLoop的InitializeToolkit函数,该函数主要是平台界面系统的初始化工作;

BrowserMainLoop的MainMessageLoopStart函数:初始化main_message_loop_和主线程CrBrowserMain


接下来BrowserMainRunnerImpl的Initialize函数调用BrowserMainLoop的CreateThreads函数:初始化DB thread、IO thread、File thread、Cache thread等


call stack:

>	content.dll!content::WebContentsImpl::GetNativeView()  行 1113 + 0x20 字节	C++
 	content_shell.exe!content::Shell::GetContentView()  行 201 + 0x20 字节	C++
 	content_shell.exe!content::Shell::PlatformResizeSubViews()  行 168 + 0x1b 字节	C++
 	content_shell.exe!content::Shell::CreateShell(content::WebContents * web_contents)  行 93	C++
 	content_shell.exe!content::Shell::CreateNewWindow(content::BrowserContext * browser_context, const GURL & url, content::SiteInstance * site_instance, int routing_id, content::WebContents * base_web_contents)  行 134 + 0x9 字节	C++
 	content_shell.exe!content::ShellBrowserMainParts::PreMainMessageLoopRun()  行 137 + 0x46 字节	C++
 	content.dll!content::BrowserMainLoop::CreateThreads()  行 469 + 0x26 字节	C++
 	content.dll!content::BrowserMainRunnerImpl::Initialize(const content::MainFunctionParams & parameters)  行 106	C++
 	content_shell.exe!ShellBrowserMain(const content::MainFunctionParams & parameters)  行 111 + 0x2a 字节	C++
 	content_shell.exe!content::ShellMainDelegate::RunProcess(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & process_type, const content::MainFunctionParams & main_function_params)  行 134 + 0x9 字节	C++
 	content.dll!content::RunNamedProcessTypeMain(const std::basic_string<char,std::char_traits<char>,std::allocator<char> > & process_type, const content::MainFunctionParams & main_function_params, content::ContentMainDelegate * delegate)  行 438 + 0x17 字节	C++
 	content.dll!content::ContentMainRunnerImpl::Run()  行 754 + 0x14 字节	C++
 	content.dll!content::ContentMain(HINSTANCE__ * instance, sandbox::SandboxInterfaceInfo * sandbox_info, content::ContentMainDelegate * delegate)  行 35 + 0x1a 字节	C++
 	content_shell.exe!wWinMain(HINSTANCE__ * instance, HINSTANCE__ * __formal, HINSTANCE__ * __formal, HINSTANCE__ * __formal)  行 24 + 0x14 字节	C++
 	content_shell.exe!__tmainCRTStartup()  行 547 + 0x2c 字节	C
 	content_shell.exe!wWinMainCRTStartup()  行 371	C

到这里就创建了浏览器的主窗口,进入了主要的事件循环了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要调试 Chromium for Android 源代码,需要使用 Android Studio 和 Chromium for Android 源代码。以下是步骤: 1. 下载 Chromium for Android 源代码Chromium 的官方网站上下载 Chromium for Android 源代码。下载完成后,解压到本地。 2. 安装 Android Studio 从 Android Studio 的官方网站上下载最新版本的 Android Studio。安装完成后,打开 Android Studio。 3. 导入 Chromium for Android 项目 在 Android Studio 中,选择 File -> New -> Import Project。在弹出的窗口中,选择 Chromium for Android 源代码所在的文件夹。然后按照向导完成项目导入。 4. 配置 Chromium for Android 项目 在 Android Studio 中,打开 Project Structure 窗口。选择 app 模块,并在 Dependencies 标签页中添加 Chromium for Android 的依赖库。然后在 Build Variants 标签页中选择正确的 Build Variant。 5. 配置 Chromium for Android 运行环境 在 Android Studio 中,打开 Run/Debug Configurations 窗口。点击左上角的加号,添加一个新的 Android Application 配置。在 Configuration 标签页中选择正确的模块和启动 Activity。然后在 Profiling 标签页中选择正确的调试方式。最后点击 OK 保存配置。 6. 启动调试 在 Android Studio 中,点击 Run 按钮启动调试。如果一切正常,就会在设备或模拟器上启动 Chromium for Android 应用,并进入调试模式。 以上就是调试 Chromium for Android 源代码的步骤。需要注意的是,由于 Chromium for Android 是一个庞大而复杂的项目,调试起来可能比较困难,需要具备一定的 Android 开发和调试经验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值