关键词:
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; }
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... 查看详情