chromium:LoadUrl之后会发生那些事情之GraphicsLayer创建

一 综述在上一篇(五)中,分析CompositedLayer的创建过程,在blink中每一个CompositedLayer都会存在一个后端存储,它就是GraphicsLayer,GraphicsLayer存储了网页上LayoutObject的paint方法中的绘制命令,当网页(失效区域)中所有LayoutObject的绘制命令都收集完成后,cc就会执行各个layer的合成操作,然后会交给GPU
摘要由CSDN通过智能技术生成

一 综述

在上一篇(五)中,分析CompositedLayer的创建过程,在blink中每一个CompositedLayer都会存在一个后端存储,它就是GraphicsLayerGraphicsLayer存储了网页上LayoutObjectpaint方法中的绘制命令,当网页(失效区域)中所有LayoutObject的绘制命令都收集完成后,cc就会执行各个layer的合成操作,然后会交给GPU进行实际绘制操作。

二 GraphicsLayer创建流程

GraphicsLayer是在Layout过程中创建的,当发现LayoutLayer需要被Composited时,它就会创建一个CompositedLayer,同时也会创建GraphicsLayer

其调用栈如下,Call Stack:

#0   blink::GraphicsLayer::GraphicsLayer(blink::GraphicsLayerClient * client)

#1   blink::GraphicsLayerFactoryChromium::createGraphicsLayer(

blink::GraphicsLayerClient * client)

#2   blink::GraphicsLayer::create(blink::GraphicsLayerFactory * factory, 

blink::GraphicsLayerClient * client)

#3   blink::CompositedDeprecatedPaintLayerMapping::createGraphicsLayer(unsigned __int64 reasons)

#4   blink::CompositedDeprecatedPaintLayerMapping::createPrimaryGraphicsLayer()

#5   blink::CompositedDeprecatedPaintLayerMapping::CompositedDeprecatedPaintLayerMapping(blink::DeprecatedPaintLayer & layer)

#6   blink::DeprecatedPaintLayer::ensureCompositedDeprecatedPaintLayerMapping()

#7   blink::DeprecatedPaintLayerCompositor::allocateOrClearCompositedDeprecatedPaintLayerMapping(blink::DeprecatedPaintLayer * layer, blink::CompositingStateTransitionType compositedLayerUpdate)

#8   blink::CompositingLayerAssigner::assignLayersToBackingsInternal(blink::DeprecatedPaintLayer * layer, blink::CompositingLayerAssigner::SquashingState & squashingState, WTF::Vector<blink::DeprecatedPaintLayer *,0,WTF::DefaultAllocator> & layersNeedingPaintInvalidation)

#9   blink::CompositingLayerAssigner::assignLayersToBackingsInternal(blink::DeprecatedPaintLayer * layer, blink::CompositingLayerAssigner::SquashingState & squashingState, WTF::Vector<blink::DeprecatedPaintLayer *,0,WTF::DefaultAllocator> & layersNeedingPaintInvalidation)

#10 blink::CompositingLayerAssigner::assignLayersToBackingsInternal(blink::DeprecatedPaintLayer * layer, blink::CompositingLayerAssigner::SquashingState & squashingState, WTF::Vector<blink::DeprecatedPaintLayer *,0,WTF::DefaultAllocator> & layersNeedingPaintInvalidation)

#11 blink::CompositingLayerAssigner::assign(blink::DeprecatedPaintLayer * updateRoot, WTF::Vector<blink::DeprecatedPaintLayer *,

0,WTF::DefaultAllocator> & layersNeedingPaintInvalidation)

#12 blink::DeprecatedPaintLayerCompositor::updateIfNeeded()

#13 blink::DeprecatedPaintLayerCompositor::updateIfNeededRecursive()

#14 blink::FrameView::updateLayoutAndStyleForPaintingInternal()

#15 blink::FrameView::updateLayoutAndStyleForPainting()

#16 blink::PageAnimator::updateLayoutAndStyleForPainting(blink::LocalFrame * rootFrame)

#17 blink::PageWidgetDelegate::layout(blink::Page & page, blink::LocalFrame & root)

#18 blink::WebViewImpl::layout()

#19 content::RenderWidgetCompositor::Layout()

#20 cc::LayerTreeHost::Layout()

#21 cc::ThreadProxy::BeginMainFrame() 

三 GraphicsLayer Tree创建

由多个GraphicsLayer也会形成一颗Tree,下面还是以之前的测试页面来看看GraphicsLayer Tree到底是什么样的,测试页面如图1所示,GraphicsLayer Tree如图2所示。

 

测试页面

 

 

GraphicsLayer Tree

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值