* [android] add TraceInfo on every component
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/afeedd92 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/afeedd92 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/afeedd92 Branch: refs/heads/0.16-dev Commit: afeedd922c81f16c0bc1cf8907a984efcd5da25f Parents: 4bb0f14 Author: misakuo <misa...@apache.org> Authored: Tue Jul 25 16:06:18 2017 +0800 Committer: misakuo <misa...@apache.org> Committed: Tue Jul 25 16:06:18 2017 +0800 ---------------------------------------------------------------------- .../taobao/weex/ui/component/WXComponent.java | 27 +++++++++++++++++++- .../ui/component/list/BasicListComponent.java | 1 + 2 files changed, 27 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/afeedd92/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java index 985b616..cc44e79 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java @@ -39,6 +39,7 @@ import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; + import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.taobao.weex.ComponentObserver; @@ -57,6 +58,8 @@ import com.taobao.weex.dom.WXDomTask; import com.taobao.weex.dom.WXStyle; import com.taobao.weex.dom.action.Actions; import com.taobao.weex.dom.flex.Spacing; +import com.taobao.weex.tracing.Stopwatch; +import com.taobao.weex.tracing.WXTracing; import com.taobao.weex.ui.IFComponentHolder; import com.taobao.weex.ui.animation.WXAnimationModule; import com.taobao.weex.ui.component.pesudo.OnActivePseudoListner; @@ -72,6 +75,7 @@ import com.taobao.weex.utils.WXReflectionUtils; import com.taobao.weex.utils.WXResourceUtils; import com.taobao.weex.utils.WXUtils; import com.taobao.weex.utils.WXViewUtils; + import java.lang.reflect.Type; import java.util.ArrayList; import java.util.HashMap; @@ -123,6 +127,8 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi private int mType = TYPE_COMMON; private boolean mNeedLayoutOnAnimation = false; + public WXTracing.TraceInfo mTraceInfo = new WXTracing.TraceInfo(); + public static final int TYPE_COMMON = 0; public static final int TYPE_VIRTUAL = 1; @@ -286,6 +292,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi } public void applyLayoutAndEvent(WXComponent component) { + long startNanos = System.nanoTime(); if(!isLazy()) { if (component == null) { component = this; @@ -293,8 +300,8 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi setLayout(component.getDomObject()); setPadding(component.getDomObject().getPadding(), component.getDomObject().getBorder()); addEvents(); - } + mTraceInfo.uiThreadNanos += (System.nanoTime() - startNanos); } protected final void addFocusChangeListener(OnFocusChangeListener l){ @@ -348,6 +355,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi } public void bindData(WXComponent component){ + long startNanos = System.nanoTime(); if(!isLazy()) { if (component == null) { component = this; @@ -357,6 +365,7 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi updateAttrs(component); updateExtra(component.getDomObject().getExtra()); } + mTraceInfo.uiThreadNanos += (System.nanoTime() - startNanos); } public void updateStyle(WXComponent component){ @@ -893,9 +902,12 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi * */ public final void createView() { + long startNanos = System.nanoTime(); if(!isLazy()) { createViewImpl(); } + mTraceInfo.uiThreadStart = System.currentTimeMillis(); + mTraceInfo.uiThreadNanos += (System.nanoTime() - startNanos); } protected void createViewImpl() { @@ -1543,4 +1555,17 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi message.what = WXDomHandler.MsgType.WX_DOM_UPDATE_STYLE; WXSDKManager.getInstance().getWXDomManager().sendMessage(message); } + + public void onRenderFinish() { + if (isLazy()) { + return; + } + double domTime = Stopwatch.nanosToMillis(((WXDomObject) mDomObj).mDomThreadNanos + mTraceInfo.domThreadNanos); + double uiTime = Stopwatch.nanosToMillis(mTraceInfo.uiThreadNanos); + WXLogUtils.e("RenderFinish", "Ref: " + getRef() + ", type: " + mDomObj.getType() + ", dom: " + mTraceInfo.domQueueTime + "/" + domTime + ", ui: " + mTraceInfo.uiQueueTime + "/" + uiTime); + WXTracing.TraceEvent domEvent = WXTracing.measureAndSubmit("dom " + mDomObj.getType() + "@" + getRef(), "X", mTraceInfo.rootEventId, getInstanceId(), domTime); + domEvent.ts = mTraceInfo.domThreadStart; + domEvent.tname = "DOMThread"; + WXTracing.measureAndSubmit("ui " + mDomObj.getType() + "@" + getRef(), "X", mTraceInfo.rootEventId, getInstanceId(), uiTime).ts = mTraceInfo.uiThreadStart; + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/afeedd92/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java index 306be55..9418a1f 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java @@ -850,6 +850,7 @@ public abstract class BasicListComponent<T extends ViewGroup & ListComponentView if (holder.getComponent() != null && holder.getComponent() instanceof WXCell) { if(holder.isRecycled()) { holder.bindData(component); + component.onRenderFinish(); } if (mDragHelper == null || !mDragHelper.isDraggable()) { return;