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");
       }
     }));
   }