Skip to content

Commit

Permalink
add traceid for context
Browse files Browse the repository at this point in the history
  • Loading branch information
biezhihua committed Jul 24, 2023
1 parent 14479e3 commit 5c844a4
Show file tree
Hide file tree
Showing 9 changed files with 204 additions and 23 deletions.
18 changes: 14 additions & 4 deletions GaiaXAndroid/src/main/kotlin/com/alibaba/gaiax/GXTemplateEngine.kt
Original file line number Diff line number Diff line change
Expand Up @@ -634,9 +634,13 @@ class GXTemplateEngine {

//
val size = Size(gxTemplateContext.size.width, gxTemplateContext.size.height)
GXNodeUtils.computeNodeTreeByPrepareView(gxRootNode, size)
GXNodeUtils.computeNodeTreeByPrepareView(gxTemplateContext, gxRootNode, size)
gxRootNode.stretchNode.layoutByPrepareView?.let {
GXGlobalCache.instance.putLayoutForPrepareView(gxTemplateContext.templateItem, it)
GXGlobalCache.instance.putLayoutForPrepareView(
gxTemplateContext,
gxTemplateContext.templateItem,
it
)
GXNodeUtils.composeGXNodeByCreateView(gxRootNode, it)
}
}
Expand Down Expand Up @@ -770,14 +774,20 @@ class GXTemplateEngine {

if (gxTemplateContext.isReuseRootNode) {
if (GXLog.isLog()) {
GXLog.e("reuse root node, skip bindDataOnlyNodeTree")
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=internalBindDataOnlyNodeTree reuse root node, skip bindDataOnlyNodeTree"
)
}
gxTemplateContext.isReuseRootNode = false
return
}

if (GXLog.isLog()) {
GXLog.e("internalBindDataOnlyNodeTree gxMeasureSize=${gxMeasureSize} gxTemplateItem=${gxTemplateContext.templateItem}")
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=internalBindDataOnlyNodeTree gxMeasureSize=${gxMeasureSize} gxTemplateItem=${gxTemplateContext.templateItem}"
)
}

gxTemplateContext.templateData = gxTemplateData
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import com.alibaba.gaiax.render.node.text.GXDirtyText
import com.alibaba.gaiax.render.view.GXIContainer
import com.alibaba.gaiax.render.view.GXIRootView
import com.alibaba.gaiax.template.GXTemplateInfo
import java.util.UUID
import java.util.concurrent.CopyOnWriteArraySet

/**
Expand Down Expand Up @@ -56,6 +57,10 @@ class GXTemplateContext private constructor(
var visualTemplateNode: GXTemplateNode? = null
) {

var traceId: String? = UUID.randomUUID().toString()

var tag: String? = ""

/**
* 视图的尺寸是否发生了变化,如果发生了变化,那么缓存需要被清空,UI需要被重建。
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import com.alibaba.gaiax.render.view.GXIRootView
import com.alibaba.gaiax.render.view.GXViewTreeCreator
import com.alibaba.gaiax.render.view.GXViewTreeUpdate
import com.alibaba.gaiax.utils.GXGlobalCache
import com.alibaba.gaiax.utils.GXLog

/**
* @suppress
Expand All @@ -37,15 +38,30 @@ class GXRenderImpl {
val rootNode = GXNodeTreePrepare.create(gxTemplateContext)
gxTemplateContext.rootNode = rootNode
rootNode.stretchNode.layoutByPrepareView?.let {
GXGlobalCache.instance.putLayoutForPrepareView(gxTemplateContext.templateItem, it)
GXGlobalCache.instance.putLayoutForPrepareView(
gxTemplateContext,
gxTemplateContext.templateItem,
it
)
}
rootNode.release()
}

fun createViewOnlyNodeTree(gxTemplateContext: GXTemplateContext): GXNode {
val rootLayout =
GXGlobalCache.instance.getLayoutForPrepareView(gxTemplateContext.templateItem)
GXGlobalCache.instance.getLayoutForPrepareView(
gxTemplateContext,
gxTemplateContext.templateItem
)
?: throw IllegalArgumentException("root layout is null")

if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=createViewOnlyNodeTree rootLayout=${rootLayout}"
)
}

// Create a virtual node tree
val rootNode = GXNodeTreeCreator.create(gxTemplateContext, rootLayout)
gxTemplateContext.rootNode = rootNode
Expand All @@ -67,6 +83,13 @@ class GXRenderImpl {
}

fun bindViewDataOnlyNodeTree(gxTemplateContext: GXTemplateContext) {
if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=bindViewDataOnlyNodeTree"
)
}

// Resetting the Template Status
gxTemplateContext.isDirty = false

Expand All @@ -75,6 +98,13 @@ class GXRenderImpl {
}

fun bindViewDataOnlyViewTree(gxTemplateContext: GXTemplateContext) {
if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=bindViewDataOnlyViewTree"
)
}

val rootNode = gxTemplateContext.rootNode
?: throw IllegalArgumentException("RootNode is null(bindViewDataOnlyViewTree) gxTemplateContext = $gxTemplateContext")

Expand All @@ -86,6 +116,13 @@ class GXRenderImpl {
}

fun resetViewDataOnlyViewTree(gxTemplateContext: GXTemplateContext) {
if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=resetViewDataOnlyViewTree"
)
}

GXNodeTreeUpdate.resetView(gxTemplateContext)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import com.alibaba.gaiax.GXTemplateEngine
import com.alibaba.gaiax.context.GXTemplateContext
import com.alibaba.gaiax.template.GXLayer
import com.alibaba.gaiax.template.GXTemplateInfo
import com.alibaba.gaiax.utils.GXLog

/**
* 用于创建虚拟节点树
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ object GXNodeTreePrepare {
)
rootNode.isRoot = true
GXNodeUtils.computeNodeTreeByPrepareView(
gxTemplateContext,
rootNode, Size(gxTemplateContext.size.width, gxTemplateContext.size.height)
)
return rootNode
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import com.alibaba.gaiax.context.GXTemplateContext
import com.alibaba.gaiax.render.node.text.GXDirtyText
import com.alibaba.gaiax.render.node.text.GXFitContentUtils
import com.alibaba.gaiax.render.node.text.GXHighLightUtil
import com.alibaba.gaiax.render.view.*
import com.alibaba.gaiax.render.view.GXIViewBindData
import com.alibaba.gaiax.render.view.basic.GXIImageView
import com.alibaba.gaiax.render.view.basic.GXProgressView
import com.alibaba.gaiax.render.view.basic.GXText
Expand All @@ -41,6 +41,19 @@ import com.alibaba.gaiax.render.view.container.GXContainer
import com.alibaba.gaiax.render.view.container.GXContainerViewAdapter
import com.alibaba.gaiax.render.view.container.slider.GXSliderView
import com.alibaba.gaiax.render.view.container.slider.GXSliderViewAdapter
import com.alibaba.gaiax.render.view.setBackgroundColorAndBackgroundImageWithRadius
import com.alibaba.gaiax.render.view.setDisplay
import com.alibaba.gaiax.render.view.setGridContainerDirection
import com.alibaba.gaiax.render.view.setGridContainerItemSpacingAndRowSpacing
import com.alibaba.gaiax.render.view.setHidden
import com.alibaba.gaiax.render.view.setHorizontalScrollContainerLineSpacing
import com.alibaba.gaiax.render.view.setOpacity
import com.alibaba.gaiax.render.view.setOverflow
import com.alibaba.gaiax.render.view.setRoundCornerRadiusAndRoundCornerBorder
import com.alibaba.gaiax.render.view.setScrollContainerDirection
import com.alibaba.gaiax.render.view.setScrollContainerPadding
import com.alibaba.gaiax.render.view.setSpanSizeLookup
import com.alibaba.gaiax.render.view.setVerticalScrollContainerLineSpacing
import com.alibaba.gaiax.template.GXCss
import com.alibaba.gaiax.template.GXLayer
import com.alibaba.gaiax.template.GXStyle
Expand All @@ -50,13 +63,21 @@ import com.alibaba.gaiax.template.animation.GXLottieAnimation
import com.alibaba.gaiax.template.animation.GXPropAnimationSet
import com.alibaba.gaiax.template.factory.GXExpressionFactory
import com.alibaba.gaiax.template.utils.GXTemplateUtils
import com.alibaba.gaiax.utils.GXLog

/**
* @suppress
*/
object GXNodeTreeUpdate {

fun buildNodeLayout(gxTemplateContext: GXTemplateContext) {
if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=buildNodeLayout"
)
}

val rootNode = gxTemplateContext.rootNode
?: throw IllegalArgumentException("RootNode is null(buildNodeLayout)")
val templateData =
Expand Down Expand Up @@ -96,19 +117,34 @@ object GXNodeTreeUpdate {
templateData: JSONObject,
size: Size<Float?>
) {
if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=updateNodeTreeLayout"
)
}

// 更新布局
updateNodeTreeLayout(gxTemplateContext, gxNode, templateData)

// 计算布局
if (gxTemplateContext.isDirty) {
GXNodeUtils.computeNodeTreeByBindData(gxNode, size)
GXNodeUtils.computeNodeTreeByBindData(gxTemplateContext, gxNode, size)
}
}

internal fun updateNodeTreeLayoutByDirtyText(
gxTemplateContext: GXTemplateContext, rootNode: GXNode, size: Size<Float?>
) {
if (gxTemplateContext.dirtyTexts?.isNotEmpty() == true) {

if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=updateNodeTreeLayoutByDirtyText"
)
}

var isTextDirty = false
gxTemplateContext.dirtyTexts?.forEach {
val isDirty = updateTextLayoutByFitContentByDirtyText(
Expand All @@ -122,7 +158,7 @@ object GXNodeTreeUpdate {
}
gxTemplateContext.dirtyTexts?.clear()
if (isTextDirty) {
GXNodeUtils.computeNodeTreeByBindData(rootNode, size)
GXNodeUtils.computeNodeTreeByBindData(gxTemplateContext, rootNode, size)
}
}
}
Expand Down Expand Up @@ -320,6 +356,13 @@ object GXNodeTreeUpdate {
gxFlexBox.sizeForDimension?.height = it
isDirty = true
}

if (GXLog.isLog()) {
GXLog.e(
gxTemplateContext.tag,
"traceId=${gxTemplateContext.traceId} tag=updateContainerLayout containerSize=${containerSize}"
)
}
}

} else if (gxNode.isGridType()) {
Expand Down Expand Up @@ -1033,21 +1076,26 @@ object GXNodeTreeUpdate {
gxNode.isCustomViewType() -> bindCustom(
view, gxNode.templateNode, templateData
)

gxNode.isTextType() -> bindText(
gxTemplateContext, view, css, layer, gxNode.templateNode, templateData
)

gxNode.isRichTextType() -> bindRichText(
gxTemplateContext, view, css, layer, gxNode.templateNode, templateData
)

gxNode.isIconFontType() -> bindIconFont(view, gxNode.templateNode, templateData)
gxNode.isImageType() -> bindImage(view, gxNode.templateNode, templateData)
gxNode.isProgressType() -> bindProgress(view, gxNode.templateNode, templateData)
gxNode.isScrollType() || gxNode.isGridType() -> bindScrollAndGrid(
gxTemplateContext, view, gxNode, gxNode.templateNode, templateData
)

gxNode.isSliderType() -> bindSlider(
gxTemplateContext, view, gxNode, gxNode.templateNode, templateData
)

gxNode.isViewType() || gxNode.isGaiaTemplateType() -> bindView(
view, gxNode.templateNode, templateData
)
Expand Down
Loading

0 comments on commit 5c844a4

Please sign in to comment.