You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by mi...@apache.org on 2017/08/15 09:51:27 UTC
[02/16] incubator-weex git commit: + [android] tracing
+ [android] tracing
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/38bffdf3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/38bffdf3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/38bffdf3
Branch: refs/heads/0.16-dev
Commit: 38bffdf3654859ab5687e5db866d5962be1c5929
Parents: 6ae8f8d
Author: moxun.ljf <fu...@foxmail.com>
Authored: Mon Jun 12 15:35:50 2017 +0800
Committer: moxun.ljf <fu...@foxmail.com>
Committed: Mon Jun 12 15:35:50 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/common/WXTracing.java | 33 ++++++++++++++++++++
.../taobao/weex/dom/DOMActionContextImpl.java | 10 +++++-
.../java/com/taobao/weex/dom/WXDomHandler.java | 9 ++++++
.../java/com/taobao/weex/dom/WXDomModule.java | 2 --
.../java/com/taobao/weex/dom/WXDomTask.java | 1 +
.../dom/action/AbstractAddElementAction.java | 8 +++++
.../weex/dom/action/AddElementAction.java | 6 +++-
.../taobao/weex/dom/action/AddEventAction.java | 5 +++
.../com/taobao/weex/ui/WXRenderManager.java | 8 ++++-
9 files changed, 77 insertions(+), 5 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/common/WXTracing.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXTracing.java b/android/sdk/src/main/java/com/taobao/weex/common/WXTracing.java
index 49fbe4b..bc37386 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXTracing.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXTracing.java
@@ -1,5 +1,10 @@
package com.taobao.weex.common;
+import android.os.Message;
+
+import com.taobao.weex.dom.WXDomHandler;
+import com.taobao.weex.dom.WXDomTask;
+import com.taobao.weex.dom.action.Action;
import com.taobao.weex.utils.WXLogUtils;
import java.util.concurrent.atomic.AtomicInteger;
@@ -40,4 +45,32 @@ public class WXTracing {
return sb.toString();
}
}
+
+ public static String getFunctionName(Message msg) {
+ Object obj = msg.obj;
+ if (obj != null && obj instanceof WXDomTask) {
+ Object action = ((WXDomTask) obj).args.get(0);
+ if (action instanceof Action) {
+ return getFunctionName(action.getClass());
+ }
+ }
+
+ String actionName = "unknown";
+ int what = msg.what;
+ if (what == WXDomHandler.MsgType.WX_DOM_BATCH) {
+ actionName = "domBatch";
+ } else if (what == WXDomHandler.MsgType.WX_DOM_UPDATE_STYLE) {
+ actionName = "updateStyle";
+ } else if (what == WXDomHandler.MsgType.WX_CONSUME_RENDER_TASKS) {
+ actionName = "consumeRenderTasks";
+ }
+ return actionName;
+ }
+
+ public static String getFunctionName(Class clazz) {
+ String simpleName = clazz.getSimpleName();
+ char[] chars = simpleName.replace("Action", "").toCharArray();
+ chars[0] = Character.toLowerCase(chars[0]);
+ return new String(chars);
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java
index c30ba13..6e1e385 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/DOMActionContextImpl.java
@@ -31,6 +31,7 @@ import com.taobao.weex.ui.WXRenderManager;
import com.taobao.weex.ui.animation.WXAnimationBean;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.Stopwatch;
import com.taobao.weex.utils.WXLogUtils;
import java.util.ArrayList;
@@ -181,8 +182,9 @@ class DOMActionContextImpl implements DOMActionContext {
return;
}
long start0 = System.currentTimeMillis();
-
+ Stopwatch.tick();
rebuildingFixedDomTree(rootDom);
+ WXLogUtils.e("Tracing", "rebuildingFixedDomTree " + Stopwatch.tackAndTick() + " ms");
rootDom.traverseTree( new WXDomObject.Consumer() {
@Override
@@ -193,10 +195,13 @@ class DOMActionContextImpl implements DOMActionContext {
dom.layoutBefore();
}
});
+ WXLogUtils.e("Tracing", "layoutBefore " + Stopwatch.tackAndTick() + " ms");
long start = System.currentTimeMillis();
+ long s = System.nanoTime();
rootDom.calculateLayout(mLayoutContext);
+ WXLogUtils.e("Tracing", "layout " + Stopwatch.tackAndTick() + " ms");
WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(mInstanceId);
if (instance != null) {
@@ -212,9 +217,11 @@ class DOMActionContextImpl implements DOMActionContext {
dom.layoutAfter();
}
});
+ WXLogUtils.e("Tracing", "layoutAfter " + Stopwatch.tackAndTick() + " ms");
start = System.currentTimeMillis();
rootDom.traverseTree(new ApplyUpdateConsumer());
+ WXLogUtils.e("Tracing", "applyUpdateConsumer " + Stopwatch.tackAndTick() + " ms");
if (instance != null) {
instance.applyUpdateTime(System.currentTimeMillis() - start);
@@ -225,6 +232,7 @@ class DOMActionContextImpl implements DOMActionContext {
if (instance != null) {
instance.updateDomObjTime(System.currentTimeMillis() - start);
}
+ WXLogUtils.e("Tracing", "updateDomObj " + Stopwatch.tack() + " ms");
parseAnimation();
boolean isPreRenderMode = instance != null && instance.isPreRenderMode();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java
index eec3d0b..03f6940 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomHandler.java
@@ -20,9 +20,12 @@ package com.taobao.weex.dom;
import android.os.Handler;
import android.os.Message;
+import android.os.SystemClock;
import com.alibaba.fastjson.JSONObject;
+import com.taobao.weex.common.WXTracing;
import com.taobao.weex.dom.action.Actions;
+import com.taobao.weex.utils.WXLogUtils;
/**
* Handler for dom operations.
@@ -42,6 +45,8 @@ public class WXDomHandler implements Handler.Callback {
@Override
public boolean handleMessage(Message msg) {
+ long s = System.nanoTime();
+ String actionName = WXTracing.getFunctionName(msg);
if (msg == null) {
return false;
}
@@ -51,6 +56,9 @@ public class WXDomHandler implements Handler.Callback {
if (obj instanceof WXDomTask) {
task = (WXDomTask) obj;
+ WXLogUtils.e("Tracing", "Method " + actionName + ", Queue time " + ((s - task.startTime) / 1000000.0) + " ms");
+ } else {
+ WXLogUtils.e("Tracing", "Method " + actionName + ", Queue time " + (SystemClock.uptimeMillis() - msg.getWhen()) + " ms");
}
if (!mHasBatch) {
@@ -78,6 +86,7 @@ public class WXDomHandler implements Handler.Callback {
default:
break;
}
+ WXLogUtils.e("Tracing", "Method " + actionName + ", Dom execute time " + ((System.nanoTime() - s) / 1000000.0) + " ms");
return true;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
index 192481f..7d63c39 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
@@ -18,8 +18,6 @@
*/
package com.taobao.weex.dom;
-import android.os.Message;
-
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.taobao.weex.WXSDKInstance;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java
index df5943b..140b668 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomTask.java
@@ -30,4 +30,5 @@ public class WXDomTask implements IWXTask {
public String instanceId;
public List<Object> args;
+ public long startTime = System.nanoTime();
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
index fa017cb..b3b27a6 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
@@ -31,6 +31,7 @@ import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXComponentFactory;
import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.Stopwatch;
import com.taobao.weex.utils.WXLogUtils;
/**
@@ -80,7 +81,9 @@ abstract class AbstractAddElementAction implements DOMAction, RenderAction {
}
//only non-root has parent.
+ Stopwatch.tick();
WXDomObject domObject = WXDomObject.parse(dom, instance);
+ WXLogUtils.e("Tracing", "Component " + domObject.getRef() + " parseDomObject " + Stopwatch.tackAndTick() + " ms");
if (domObject == null || context.getDomByRef(domObject.getRef()) != null) {
if (WXEnvironment.isApkDebugable()) {
@@ -90,11 +93,14 @@ abstract class AbstractAddElementAction implements DOMAction, RenderAction {
return;
}
appendDomToTree(context, domObject);
+ WXLogUtils.e("Tracing", "Component " + domObject.getRef() + " appendDomToTree " + Stopwatch.tackAndTick() + " ms");
domObject.traverseTree(
context.getAddDOMConsumer(),
context.getApplyStyleConsumer()
);
+ WXLogUtils.e("Tracing", "Component " + domObject.getRef() + " traverseTree " + Stopwatch.tackAndTick() + " ms");
+
//Create component in dom thread
WXComponent component = createComponent(context, domObject);
@@ -103,6 +109,8 @@ abstract class AbstractAddElementAction implements DOMAction, RenderAction {
//stop redner, some fatal happened.
return;
}
+ WXLogUtils.e("Tracing", "Component " + domObject.getRef() + " createComponent " + Stopwatch.tackAndTick() + " ms");
+
context.addDomInfo(domObject.getRef(), component);
context.postRenderTask(this);
addAnimationForDomTree(context, domObject);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java
index a5e1254..a4b3adf 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddElementAction.java
@@ -27,6 +27,7 @@ import com.taobao.weex.dom.RenderActionContext;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.Stopwatch;
import com.taobao.weex.utils.WXLogUtils;
/**
@@ -97,11 +98,14 @@ final class AddElementAction extends AbstractAddElementAction {
if (parent == null || component == null) {
return;
}
-
+ Stopwatch.tick();
parent.addChild(component, mAddIndex);
parent.createChildViewAt(mAddIndex);
+ WXLogUtils.e("Tracing", "Component " + mRef + " createViewTree " + Stopwatch.tackAndTick() + " ms");
component.applyLayoutAndEvent(component);
+ WXLogUtils.e("Tracing", "Component " + mRef + " applyLayoutAndEvent " + Stopwatch.tackAndTick() + " ms");
component.bindData(component);
+ WXLogUtils.e("Tracing", "Component " + mRef + " bindData " + Stopwatch.tackAndTick() + " ms");
} catch (Exception e) {
WXLogUtils.e("add component failed.", e);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java
index 13dac2f..e051917 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AddEventAction.java
@@ -27,6 +27,8 @@ import com.taobao.weex.dom.RenderAction;
import com.taobao.weex.dom.RenderActionContext;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.utils.Stopwatch;
+import com.taobao.weex.utils.WXLogUtils;
/**
* Created by sospartan on 01/03/2017.
@@ -69,8 +71,11 @@ class AddEventAction implements DOMAction, RenderAction {
WXComponent comp = context.getComponent(mRef);
if(comp != null){
//sync dom change to component
+ Stopwatch.tick();
comp.updateDom(mUpdatedDom);
+ WXLogUtils.e("Tracing", "updateDom " + Stopwatch.tackAndTick() + " ms");
comp.addEvent(mEvent);
+ WXLogUtils.e("Tracing", "addEvent " + Stopwatch.tackAndTick() + " ms");
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/38bffdf3/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
index 9c74b36..77e1b1b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java
@@ -24,10 +24,12 @@ import android.text.TextUtils;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.common.WXRuntimeException;
import com.taobao.weex.common.WXThread;
+import com.taobao.weex.common.WXTracing;
import com.taobao.weex.dom.RenderAction;
import com.taobao.weex.dom.RenderActionContext;
import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.ui.component.WXComponent;
+import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import java.util.ArrayList;
@@ -102,14 +104,18 @@ public class WXRenderManager {
}
public void runOnThread(final String instanceId, final RenderAction action) {
+ final long start = System.nanoTime();
+ final String actionName = WXTracing.getFunctionName(action.getClass());
mWXRenderHandler.post(WXThread.secure(new Runnable() {
-
@Override
public void run() {
+ long s = System.nanoTime();
+ WXLogUtils.e("Tracing", "Method " + actionName + ", Queue time " + (s - start) + " ns");
if (mRegistries.get(instanceId) == null) {
return;
}
action.executeRender(getRenderContext(instanceId));
+ WXLogUtils.e("Tracing", "Method " + actionName + ", Render time " + (System.nanoTime() - s) + " ns");
}
}));
}