chromium显示页面(一)

最近在进行校园招聘,也有一段时间没有更新博客了。这篇文章是关于chromium如何组织网页的显示的,在讲解显示之前,需要了解一下这些类在显示中过程中起到什么作用。整体的类图如下


RenderProcessHostImpl:对应一个RenderProcess,他们之间通过ChannelProxy来通信,也就是说每一个RenderProcessHost控制着一个渲染进程。

SiteInstanceImpl: SiteInstanceImpl对象对应一个RenderProcessHost,同时SiteInstanceImpl对应着一个站点site_,也就是说来源于该站点的url会被分配到SiteInstanceImpl对应的RenderProcessHost中。同时它包含对象BrowsingInstance,它会决定url被分配到哪一个SiteInstanceImpl,也就是决定该url在哪一个渲染进程中进行渲染。

BrowsingInstance:包含着一个映射关系site_instance_map_,它决定url到SiteInstanceImp的对应关系,函数GetSiteInstanceForURL的作用是输入一个url,它会先计算该url属于哪一个site_,然后返回该site_对应的SiteInstanceImpl,如果该site_对应的SiteInstanceImpl还没有创建,则会进行创建并保存在site_instance_map_中。

RenderViewHostImpl:与RenderProcess中的某一个RenderView对应,同样是通过ChannelProxy来通信。

FrameTree:这个结构在当前的大多数文档中都没有提到,所以也是我看得最吃力的地方,后来我在文章中发现了该改动的一些基本的思路

http://www.chromium.org/developers/design-documents/oop-iframes
目前chromium希望frame相关的逻辑从content模块的RenderView和RenderViewHost类中分离,放入一个新的RenderFame和RenderFrameHost类中。这些新的类会分配一个channel_id用于进程间通信。对于每个活动的Frame,它在当前进程中会有一个完整RenderFrame,并在其他进程中保存一个换出(swapped out)RenderFrame。下图展示了一个包含了两个tab的BrowsingInstance,每个tab中都包括两个子frame,这些可换出的代理对象,用虚线表示。


FrameTreeNode:FrameTree的节点结构,每一个FrameTreeNode都包含一个RenderFrameHostManager,RenderFrameHostManager包含RenderFrameHostImpl,就是FrameTreeNode通过RenderFrameHostManager对RenderFrameHostImpl进行操作。每一个WebContents都会维护一棵以FrameTreeNode为节点的FrameTree,与当前页面的frame树相对应,FrameTreeNode维护frame的相关信息,负责frame中的跨进程导航,并处理其他进程frame传递过来的消息。

RenderFrameHostImpl:与RenderViewHost类似,对应于一个其它进程中的RenderFame。

NavigationController接口:负责某一个标签页中的导航逻辑。其内部维护一个导航过的NavigationEntry列表,也可以理解成用户操作的记录,用于处理前进、后退、刷新等操作。

NavigatorImpl:用于处理FrameTree某个节点上的Navigation,它会绑定在一棵FrameTree上,并且该棵的每一个节点都会包含这个NavigatorImpl的指针。

WebContants:应于一个标签页,浏览器中打开的标签页都会对应一个WebContants。当用户点击浏览器上的添加按钮或者是从一个网页的一个连接来打开一个新的页面,这样一个新的页面就被创建了。一个WebContents对象对应于一个HTML页面和显示该页面的标签页,创建一个页面其实就是创建一个WebContents对象。


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值