Chromium线程创建解析:从源码看初始化流程
"Chromium 线程创建流程" 在 Chromium 浏览器的源代码中,线程的创建过程是一个关键的组件,它涉及到多个层级和模块的交互。以下是从给定的文件内容中解析出的 Chromium 线程创建的主要步骤: 1. Thread 类的实例化: 在 `./base/threading/thread.cc:61`,`Thread::Thread(const std::string& name)` 是线程类的构造函数,它用于创建一个新线程并指定线程名称。线程名称有助于在调试和日志记录中识别线程。 2. BrowserThreadImpl 的创建: 在 `./content/browser/browser_thread_impl.cc:154`,`BrowserThreadImpl` 被创建,它是一个特定于 Chromium 的线程实现,用于处理浏览器特定的任务。`GetThreadName(identifier)` 用于获取线程标识符对应的名称,`identifier_` 保存了线程类型。 3. BrowserThread 的初始化: 在 `./content/browser/browser_thread_impl.cc:154` 中的 `discriminator3`,`new BrowserThreadImpl(BrowserThread::UI, base::MessageLoop::current())` 表明创建的是 UI 线程。`BrowserThread::UI` 是一个枚举值,表示用户界面线程,而 `base::MessageLoop::current()` 指定了当前的消息循环,这是线程执行任务的核心。 4. BrowserMainLoop 的初始化: 在 `./content/browser/browser_main_loop.cc:1204` 的 `discriminator2`,`InitializeMainThread()` 被调用,这标志着浏览器主线程的初始化开始。`BrowserThreadImpl` 的实例在这里被创建并关联到主线程。 5. 主消息循环的启动: 在 `./content/browser/browser_main_loop.cc:575` 和 `./content/browser/browser_main_runner.cc:129` 的 `discriminator1`,`main_loop_->MainMessageLoopStart()` 用于启动浏览器主消息循环,这是浏览器接收和处理事件的关键部分。 6. BrowserRunner 的初始化: 在 `./android_webview/lib/main/aw_main_delegate.cc:203` 的 `discriminator1`,`browser_runner_->Initialize(main_function_params)` 初始化了 `BrowserRunner`,这是一个管理浏览器运行时环境的对象。 7. ContentMainRunner 的运行: `./content/app/content_main_runner.cc:403` 和 `./content/app/content_main_runner.cc:786`,`delegate->RunProcess(process_type, ...)` 以及 `RunNamedProcessTypeMain` 调用表明 ContentMainRunner 负责启动和运行指定类型的进程。 8. Android 平台的入口点: 在 `./content/app/android/content_main.cc:47` 的 `discriminator2`,`g_content_runner.Get()->Run()` 是 Android 平台上 Chromium 的主要入口点,它启动了整个浏览器的运行流程。 这些步骤展示了 Chromium 如何从创建基础线程开始,逐步构建起复杂的多线程架构,包括 UI 线程、数据库线程等,为浏览器提供高效且稳定的运行环境。理解这一流程对于进行 Chromium 的性能优化和问题排查至关重要。
./base/threading/thread.cc:61 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:154 (discriminator 3) : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_main_loop.cc:1204 (discriminator 2) new BrowserThreadImpl(BrowserThread::UI, base::MessageLoop::current()));
./content/browser/browser_main_loop.cc:575 InitializeMainThread();
./content/browser/browser_main_runner.cc:129 (discriminator 1) main_loop_->MainMessageLoopStart();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1) int exit_code = browser_runner_->Initialize(main_function_params);
./content/app/content_main_runner.cc:403 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2) return g_content_runner.Get()->Run();
Chrome_DBThread:
./base/threading/thread.cc:61 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3) : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1) (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1) startup_task_runner_->RunAllTasksNow();
./content/browser/browser_main_runner.cc:141 (discriminator 1) main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1) int exit_code = browser_runner_->Initialize(main_function_params);
./content/app/content_main_runner.cc:403 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2) return g_content_runner.Get()->Run();
Chrome_FileThread:
./base/threading/thread.cc:61 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3) : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1) (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_runner.cc:141 (discriminator 1) main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1) int exit_code = browser_runner_->Initialize(main_function_params);
./content/app/content_main_runner.cc:403 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2) return g_content_runner.Get()->Run();
Chrome_FileUserBlockingThread:
./base/threading/thread.cc:61 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3) : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1) (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1) startup_task_runner_->RunAllTasksNow();
./content/browser/browser_main_runner.cc:141 (discriminator 1) main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1) int exit_code = browser_runner_->Initialize(main_function_params);
./content/app/content_main_runner.cc:403 int exit_code = delegate->RunProcess(process_type,
./content/app/content_main_runner.cc:786 return RunNamedProcessTypeMain(process_type, main_params, delegate_);
./content/app/android/content_main.cc:47 (discriminator 2) return g_content_runner.Get()->Run();
Chrome_ProcessLauncherThread
./base/threading/thread.cc:61 Thread::Thread(const std::string& name)
./content/browser/browser_thread_impl.cc:141 (discriminator 3) : Thread(GetThreadName(identifier)), identifier_(identifier) {
./content/browser/browser_process_sub_thread.cc:24 : BrowserThreadImpl(identifier) {
./content/browser/browser_main_loop.cc:948 (discriminator 1) (*thread_to_start).reset(new BrowserProcessSubThread(id));
./base/callback.h:64 (discriminator 1)
./content/browser/browser_main_loop.cc:854 (discriminator 1) startup_task_runner_->RunAllTasksNow();
./content/browser/browser_main_runner.cc:141 (discriminator 1) main_loop_->CreateStartupTasks();
./android_webview/lib/main/aw_main_delegate.cc:203 (discriminator 1) int exit_code = browser_runner_->Initialize(main_function_params);
./content/app/content_main_runner.cc:403 int exit_code = delegate->RunProcess(process_type,
剩余12页未读,继续阅读
- 粉丝: 26
- 资源: 1
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C++多态实现机制详解:虚函数与早期绑定
- Java多线程与异常处理详解
- 校园导游系统:无向图实现最短路径探索
- SQL2005彻底删除指南:避免重装失败
- GTD时间管理法:提升效率与组织生活的关键
- Python进制转换全攻略:从10进制到16进制
- 商丘物流业区位优势探究:发展战略与机遇
- C语言实训:简单计算器程序设计
- Oracle SQL命令大全:用户管理、权限操作与查询
- Struts2配置详解与示例
- C#编程规范与最佳实践
- C语言面试常见问题解析
- 超声波测距技术详解:电路与程序设计
- 反激开关电源设计:UC3844与TL431优化稳压
- Cisco路由器配置全攻略
- SQLServer 2005 CTE递归教程:创建员工层级结构