#############################################
#0 android::WebViewCore::contentDraw (this=0x2a1c6f68) at external/webkit/Source/WebKit/android/jni/WebViewCore.cpp:969
#1 0x48f8ad3c in android::ChromeClientAndroid::attachRootGraphicsLayer (this=, layer=)
at external/webkit/Source/WebKit/android/WebCoreSupport/ChromeClientAndroid.cpp:112
#2 0x48dcfd8c in WebCore::RenderLayerCompositor::attachRootPlatformLayer (this=0x2a3b3f58, attachment=WebCore::RenderLayerCompositor::RootLayerAttachedViaChromeClient)
at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:1895
#3 0x48dd03e4 in WebCore::RenderLayerCompositor::ensureRootPlatformLayer (this=0x2a3b3f58) at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:1842
#4 0x48dd0432 in WebCore::RenderLayerCompositor::enableCompositingMode (this=0x2a3b3f58, enable=) at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:153
#5 WebCore::RenderLayerCompositor::enableCompositingMode (this=0x2a3b3f58, enable=) at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:147
#6 0x48dd051a in WebCore::RenderLayerCompositor::updateBacking (this=0x2a3b3f58, layer=0x2a3fa67c, shouldRepaint=WebCore::RenderLayerCompositor::CompositingChangeRepaintNow)
at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:360
#7 0x48dd05da in WebCore::RenderLayerCompositor::updateLayerCompositingState (this=, layer=0x2a3fa67c, shouldRepaint=)
at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:437
#8 0x48dca85a in WebCore::RenderLayer::styleChanged (this=0x2a3fa67c, diff=WebCore::StyleDifferenceEqual, oldStyle=0x0) at external/webkit/Source/WebCore/rendering/RenderLayer.cpp:4119
#9 0x48db78e6 in WebCore::RenderBoxModelObject::styleDidChange (this=0x2a3fa600, diff=WebCore::StyleDifferenceEqual, oldStyle=0x0) at external/webkit/Source/WebCore/rendering/RenderBoxModelObject.cpp:363
#10 0x48db2122 in WebCore::RenderBox::styleDidChange (this=0x2a3fa600, diff=, oldStyle=0x0) at external/webkit/Source/WebCore/rendering/RenderBox.cpp:300
#11 0x48da903a in WebCore::RenderBlock::styleDidChange (this=0x2a3fa600, diff=WebCore::StyleDifferenceEqual, oldStyle=) at external/webkit/Source/WebCore/rendering/RenderBlock.cpp:239
#12 0x48dd998a in WebCore::RenderObject::setStyle (this=0x2a3fa600, style=) at external/webkit/Source/WebCore/rendering/RenderObject.cpp:1634
#13 0x48dd9260 in WebCore::RenderObject::setAnimatableStyle (this=0x2a3fa600, style=) at external/webkit/Source/WebCore/rendering/RenderObject.cpp:1551
#14 0x48d06d82 in WebCore::Node::createRendererAndStyle (this=0x2a42fb70) at external/webkit/Source/WebCore/dom/Node.cpp:1508
其实Render的部分也没有想象中的那么复杂,只是会有一些布局,排版方面的交错的地方。
void RenderBoxModelObject::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle)
{
RenderObject::styleDidChange(diff, oldStyle);
updateBoxModelInfoFromStyle();
if (requiresLayer()) {
if (!layer()) {
if (s_wasFloating && isFloating())
setChildNeedsLayout(true);
m_layer = new (renderArena()) RenderLayer(this);
setHasLayer(true);
m_layer->insertOnlyThisLayer();
if (parent() && !needsLayout() && containingBlock()) {
m_layer->setNeedsFullRepaint();
m_layer->updateLayerPositions();
}
}
} else if (layer() && layer()->parent()) {
setHasTransform(false); // Either a transform wasn't specified or the object doesn't support transforms, so just null out the bit.
setHasReflection(false);
m_layer->removeOnlyThisLayer(); // calls destroyLayer() which clears m_layer
if (s_wasFloating && isFloating())
setChildNeedsLayout(true);
}
if (layer()) {
layer()->styleChanged(diff, oldStyle);
if (s_hadLayer && layer()->isSelfPaintingLayer() != s_layerWasSelfPainting)
setChildNeedsLayout(true);
}
}
这个函数有一个requiresLayer()的判断,requiresLayer的函数原型为:
#2 0x48dcfd8c in WebCore::RenderLayerCompositor::attachRootPlatformLayer (this=0x2a3b3f58, attachment=WebCore::RenderLayerCompositor::RootLayerAttachedViaChromeClient)
at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:1895
#3 0x48dd03e4 in WebCore::RenderLayerCompositor::ensureRootPlatformLayer (this=0x2a3b3f58) at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:1842
#4 0x48dd0432 in WebCore::RenderLayerCompositor::enableCompositingMode (this=0x2a3b3f58, enable=) at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:153
#5 WebCore::RenderLayerCompositor::enableCompositingMode (this=0x2a3b3f58, enable=) at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:147
#6 0x48dd051a in WebCore::RenderLayerCompositor::updateBacking (this=0x2a3b3f58, layer=0x2a3fa67c, shouldRepaint=WebCore::RenderLayerCompositor::CompositingChangeRepaintNow)
at external/webkit/Source/WebCore/rendering/RenderLayerCompositor.cpp:360
部分都是比较好理解的,按照这个函数搜一下code,就可以了解这个都是一些100%要进行的调用。