chromium源码阅读

丹西 丹西     2022-09-04     402

关键词:

linux下chromium的入口函数在文件:src/chrome/app/chrome_exe_main_aura.cc 中

int main(int argc, const char** argv) {
  return ChromeMain(argc, argv);
}

ChromeMain函数在 src/chrome/app/chrome_main.cc 中

base::CommandLine::Init(params.argc, params.argv);

具体函数如下:

bool CommandLine::Init(int argc, const char* const* argv) {
  if (current_process_commandline_) {
    // If this is intentional, Reset() must be called first. If we are using
    // the shared build mode, we have to share a single object across multiple
    // shared libraries.
    return false;
  }

  current_process_commandline_ = new CommandLine(NO_PROGRAM);
#if defined(OS_WIN)
  current_process_commandline_->ParseFromString(::GetCommandLineW());
#elif defined(OS_POSIX)
  current_process_commandline_->InitFromArgv(argc, argv);
#endif

  return true;
}

接下来进入文件: src/headless/app/headless_shell.cc

int HeadlessBrowserMain(
    HeadlessBrowser::Options options,
    const base::Callback<void(HeadlessBrowser*)>& on_browser_start_callback) {
  DCHECK(!on_browser_start_callback.is_null());
#if DCHECK_IS_ON()
  // The browser can only be initialized once.
  static bool browser_was_initialized;
  DCHECK(!browser_was_initialized);
  browser_was_initialized = true;

  // Child processes should not end up here.
  DCHECK(!base::CommandLine::ForCurrentProcess()->HasSwitch(
      ::switches::kProcessType));
#endif
  return RunContentMain(std::move(options),
                        std::move(on_browser_start_callback));
}

继续:src/content/app/content_main.cc

int ContentMain(const ContentMainParams& params) {
  ContentServiceManagerMainDelegate delegate(params);
  service_manager::MainParams main_params(&delegate);
#if defined(OS_POSIX) && !defined(OS_ANDROID)
  main_params.argc = params.argc;
  main_params.argv = params.argv;
#endif
  return service_manager::Main(main_params);
}

继续往下看:src/services/service_manager/embedder/main.cc   int Main(const MainParams& params) 中

switch (process_type) {
    case ProcessType::kDefault:
      NOTREACHED();
      break;

    case ProcessType::kServiceManager:
      exit_code = RunServiceManager(delegate);
      break;

    case ProcessType::kService:
      CommonSubprocessInit();
      exit_code = RunService(delegate);
      break;

    case ProcessType::kEmbedder:
      if (ServiceManagerIsRemote())
        CommonSubprocessInit();
      exit_code = delegate->RunEmbedderProcess();
      break;
  }

继续://src/base/run_loop.cc

void RunLoop::Run() {
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);

  if (!BeforeRun())
    return;

  // It is okay to access this RunLoop from another sequence while Run() is
  // active as this RunLoop won‘t touch its state until after that returns (if
  // the RunLoop‘s state is accessed while processing Run(), it will be re-bound
  // to the accessing sequence for the remainder of that Run() -- accessing from
  // multiple sequences is still disallowed).
  DETACH_FROM_SEQUENCE(sequence_checker_);

  // Use task stopwatch to exclude the loop run time from the current task, if
  // any.
  tracked_objects::TaskStopwatch stopwatch;
  stopwatch.Start();
  delegate_->Run();
  stopwatch.Stop();

  // Rebind this RunLoop to the current thread after Run().
  DETACH_FROM_SEQUENCE(sequence_checker_);
  DCHECK_CALLED_ON_VALID_SEQUENCE(sequence_checker_);

  AfterRun();
}

 

chromium源码阅读--进程的messageloop

上一篇总结了chromium进程的启动,接下来就看线程的消息处理,这里的线程包含进程的主进程。消息处理是由base::MessageLoop中实现,消息中的任务和定时器都是异步事件的。主要如下几点:1、消息的类型分类2、延时处理的消息是... 查看详情

chromium源码阅读--browser进程初始化

最近在研读chromium源码,经过一段懵懂期,查阅了官网和网上的技术文章,是时候自己总结一下了,首先从Browser进程启动以及IPCmessageloop开始吧,这是每个主线程必须有的一个IPC消息轮训主体,类似之前的quagga里thread。首先来看... 查看详情

chromium源码阅读--图片处理

JavaScript图像替换JavaScript图像替换技术检查设备能力,然后“做正确的事”。您可以通过 window.devicePixelRatio 确定设备像素比,获取屏幕的宽度和高度,甚至可通过 navigator.connection 或发出假请求来执行某种网络连接... 查看详情

如何获取最新chromium源码

参考技术A如何获取最新chromium源码2015-08-2309:39风纪社0021B|浏览3次软件我要回答搜索相关资料符号编号排版图片地 查看详情

如何获取最新chromium源码

...装了msysgit和python,则跳过这一步。  从命令行到保存chromium源码的路径下,运行命令:gclient。第一次运行,gclient将会安装所有和获取源码相关的工具,例如git,python:  Fetchingfromhttps://src.chromium.org/svn/trunk/tools/third_party/svn_b... 查看详情

chromium中的gn构建系统

chromium中的GN构建系统原创云水木石最后发布于2017-06-2317:16:35阅读数6924收藏展开阅读最新的chromium源码,发现项目的构建系统已经从GYP全面切换到GN了。在软件开发中,经常有人忠告:不要重复造轮子。但谷歌可不管这个,造的轮... 查看详情

怎么制作自己的chrome浏览器呢

360、枫树什么的都制作Chromium浏览器,教我怎么制作参考技术A不用说制作,只是编译chromium的源代码就相当费劲了,据说要用20G左右的空间进行编译...如果没有几年的windows下的C++开发经验,基本没有可能的...方法大概是:1、下... 查看详情

大白话讲透chromium源码(宏观篇)(代码片段)

接下来给大家分享Chromium源码的文章,原文链接:https://juejin.cn/post/7039850183244382216自从我对C语言有过编译原理上的实践经验&&对js和浏览器的表层(非chromium源码级我都统称表层)有了更深的理解后,对于JS及其相关的很... 查看详情

哪些c++源代码项目值得阅读

...广泛使用很多C++项目都不错,但是不适合全部阅读,比如Chromium,源码总计2000w+行,可以说没有任何人能够完全掌握,就算是1/100难度也不小,我看有不少博主在鼓吹看了 查看详情

cef源码编译

CEF的构造说明:https://bitbucket.org/chromiumembedded/cef/wiki/BranchesAndBuildingchromium的源码地址:https://chromium.googlesource.com/chromium/src.gitcef的源码地址:https://bitbucket.org/chromiumembedded/cef/src/2357 查看详情

大牛们是怎么阅读android系统源码的

...些性能敏感模块及第三方库是用C++实现的,比如:Input系统,Chromium项目(WebView的底层实现).  硬件  流畅的国际网络  AOS 查看详情

chrome和chromium区别

ChromiumChromium官网:https://www.chromium.orgChromium源码:https://github.com/chromium/chromiumChromium是谷歌的开源项目,由开源社区维护,拥有诸多尖端优势。拥有众多的版本包括Windows、Mac、Linux,几乎每天都在进行更新 查看详情

android10中的浏览器构建

从Android4.4开始,系统浏览器内核开始从WebKit切换到Chromium。为了保持API兼容,Chromium为AndroidWebView提供了ChromiumWebView封装。最初ChromiumWebview代码是位于AOSP源码树中,和AOSP源码一起构建。到了Android5.0,ChromiumWebView代... 查看详情

chromium内核浏览器编译记踩坑实录(代码片段)

...icle/details/123862868本文出自容华谢后的博客往期回顾:Chromium内核浏览器编译记(一)踩坑实录Chromium内核浏览器编译记(二)UI定制0.写在前面本篇文章是用来记录编译Chromium源码的步骤和踩过的坑,以防止... 查看详情

chromium浏览器组件设计意图

   在文章開始之前。我要叽歪几句,一上来就看Chrome的代码。简直晕头转向,摸来摸去莫不着头脑,好不easy看了一点点代码。却犹如瞎子摸象。无法众观全局。以下这篇小文,简介当中一个重要的模块--Component的设计... 查看详情

chrome和chromium区别

ChromiumChromium官网:https://www.chromium.orgChromium源码:https://github.com/chromium/chromiumChromium是谷歌的开源项目,由开源社区维护,拥有诸多尖端优势。拥有众多的版本包括Windows、Mac、Linux,几乎每天都在进行更新࿰... 查看详情

问答形式阅读jquery源码

笔者阅读了园友艾伦Aaron的系列博客《jQuery源码分析系列》,主要是阅读的jQuery的原理,然后跑园友的代码,真正对jQuery源码的阅读并不多。主要是直接阅读jQuery源码,一次能读懂的部分并不多,不如先阅读源码解析的文章,然... 查看详情

阅读源码(iv)

往期系列:《由阅读源码想到》《由阅读源码想到|下篇》《阅读源码(III)》  Eric S.Raymond的写于2014年的《Howtolearn hacking》是一篇出色的谈论如何阅读源码的文章。(Eric这里的hacking技术,指的是开源项目里的一种ane... 查看详情