欢迎来到天天文库
浏览记录
ID:39550100
大小:221.00 KB
页数:21页
时间:2019-07-06
《Chromium网页Render Object Tree创建过程分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Chromium网页RenderObjectTree创建过程分析在前面一文中,我们分析了网页DOMTree的创建过程。网页DOMTree创建完成之后,WebKit会根据它的内容创建一个RenderObjectTree。RenderObjectTree是和网页渲染有关的一个Tree。这意味着只有在DOMTree中需要渲染的节点才会在RenderObjectTree中有对应节点。本文接下来就分析网页RenderObjectTree的创建过程。从前面一文可以知道,每一个HTML标签在DOMTree中都有一个对应的HTMLElement节点。相应地,在DOMTree中每一个需要渲染的HTMLElem
2、ent节点在RenderObjectTree中都有一个对应的RenderObject节点,如图1所示:从图1还可以看到,RenderObjectTree创建完成之后,WebKit还会继续根据它的内容创建一个RenderLayerTree和一个GraphicsLayerTree。本文主要关注RenderObjectTree的创建过程。从前面一文还可以知道,DOMTree是在网页内容的下载过程中创建的。一旦网页内容下载完成,DOMTree就创建完成了。网页的RenderObjectTree与DOMTree不一样,它是在网页内容下载完成之后才开始创建的。因此,接下来我们就从网页内容下载完成时开始分
3、析网页的RenderObjectTree的创建过程。从前面一文可以知道,WebKit是通过Browser进程下载网页内容的。Browser进程一方面通过Net模块中的URLRequest类去Web服务器请求网页内容,另一方面又通过Content模块中的ResourceLoader类的成员函数OnReadCompleted不断地获得URLRequest类请求回来的网页内容,如下所示:[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片voidResourceLoader::OnReadCompleted(net::URLRequest*unused,intbytes_re
4、ad){......CompleteRead(bytes_read);......if(bytes_read>0){StartReading(true);//Readthenextchunk.}else{//URLRequestreportedanEOF.CallResponseCompleted.DCHECK_EQ(0,bytes_read);ResponseCompleted();}}这个函数定义在文件external/chromium_org/content/browser/loader/resource_loader.cc中。参数bytes_read表示当前这次从URLRequest
5、类中读取回来的网页内容的长度。当这个长度值等于0的时候,就表示所有的网页内容已经读取完毕。这时候ResourceLoader类的成员函数OnReadCompleted就会调用另外一个成员函数ResponseCompleted进行下一步处理。ResourceLoader类的成员函数ResponseCompleted的实现如下所示:[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片voidResourceLoader::ResponseCompleted(){......handler_->OnResponseCompleted(request_->status(),se
6、curity_info,&defer);......}这个函数定义在文件external/chromium_org/content/browser/loader/resource_loader.cc中。在前面一文中,我们假设ResourceLoader类的成员变量handler_指向的是一个AsyncResourceHandler对象。ResourceLoader类的成员函数ResponseCompleted调用这个AsyncResourceHandler对象的成员函数OnResponseCompleted进行下一步处理。AsyncResourceHandler类的成员函数OnRespons
7、eCompleted的实现如下所示:[cpp]viewplaincopy在CODE上查看代码片派生到我的代码片voidAsyncResourceHandler::OnResponseCompleted(constnet::URLRequestStatus&status,conststd::string&security_info,bool*defer){constResourceRequestInfoImpl
此文档下载收益归作者所有