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:26 UTC
[01/16] incubator-weex git commit: + [android] tracing
Repository: incubator-weex
Updated Branches:
refs/heads/0.16-dev 57802c0ae -> 207415679
+ [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/6ae8f8d1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/6ae8f8d1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/6ae8f8d1
Branch: refs/heads/0.16-dev
Commit: 6ae8f8d1541c706e5be5be4f08710d1225229702
Parents: d3a1e1d
Author: moxun.ljf <fu...@foxmail.com>
Authored: Wed Jun 7 11:23:08 2017 +0800
Committer: moxun.ljf <fu...@foxmail.com>
Committed: Wed Jun 7 11:23:08 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/common/WXTracing.java | 43 ++++++++++++++++++++
1 file changed, 43 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/6ae8f8d1/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
new file mode 100644
index 0000000..49fbe4b
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXTracing.java
@@ -0,0 +1,43 @@
+package com.taobao.weex.common;
+
+import com.taobao.weex.utils.WXLogUtils;
+
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Created by moxun on 2017/6/6.
+ */
+
+public class WXTracing {
+ private static final AtomicInteger sIdGenerator = new AtomicInteger(0);
+
+ public static int nextId() {
+ return sIdGenerator.getAndIncrement();
+ }
+
+ public static void submit(TraceEvent event) {
+ WXLogUtils.d("WXTracing", event.toString());
+ }
+
+ public static class TraceEvent {
+ public String name;
+ public String phase;
+ public String threadName;
+ public long timestamp;
+ public long nanoTime;
+ public long duration;
+
+ @Override
+ public String toString() {
+ final StringBuffer sb = new StringBuffer("TraceEvent{");
+ sb.append("name='").append(name).append('\'');
+ sb.append(", threadName='").append(threadName).append('\'');
+ sb.append(", phase='").append(phase).append('\'');
+ sb.append(", timestamp=").append(timestamp);
+ sb.append(", nanoTime=").append(nanoTime);
+ sb.append(", duration=").append(duration);
+ sb.append('}');
+ return sb.toString();
+ }
+ }
+}
[09/16] incubator-weex git commit: Merge remote-tracking branch
'remotes/upstream/0.16-dev' into android-feature-tracing
Posted by mi...@apache.org.
Merge remote-tracking branch 'remotes/upstream/0.16-dev' into android-feature-tracing
# Conflicts:
# android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
# android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/288d8b5b
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/288d8b5b
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/288d8b5b
Branch: refs/heads/0.16-dev
Commit: 288d8b5b1b22539c3b72098a1096e59df948074f
Parents: 4fa0a2c 8b9845e
Author: misakuo <mi...@apache.org>
Authored: Thu Aug 10 14:50:43 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Thu Aug 10 14:50:43 2017 +0800
----------------------------------------------------------------------
.../java/com/taobao/weex/bridge/WXBridge.java | 8 +-
.../com/taobao/weex/bridge/WXBridgeManager.java | 36 ++++-
.../taobao/weex/bridge/WXValidateProcessor.java | 7 +-
.../java/com/taobao/weex/dom/WXDomObject.java | 16 +-
.../dom/action/AbstractAddElementAction.java | 2 +-
html5/render/vue/README.md | 15 ++
html5/render/vue/components/image.js | 58 ++++++-
html5/render/vue/config.js | 10 +-
html5/render/vue/core/node.js | 27 ++--
html5/render/vue/lib/gesture.js | 6 +
html5/render/vue/modules/modal/toast.js | 23 +--
html5/test/render/vue/core/node.js | 2 +
ios/.gitignore | 1 +
.../WeexDemo.xcodeproj/project.pbxproj | 24 ++-
ios/playground/WeexDemo/AppDelegate.m | 8 +-
ios/playground/WeexDemo/WXDemoViewController.m | 2 -
ios/playground/WeexDemo/WXExtModule.h | 26 +++
ios/playground/WeexDemo/WXExtModule.m | 43 +++++
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 8 +
.../Sources/Component/WXImageComponent.m | 150 +++++++++--------
ios/sdk/WeexSDK/Sources/WeexSDK.h | 1 +
package.json | 9 +-
packages/weex-vue-render/README.md | 15 ++
packages/weex-vue-render/package.json | 2 +-
test/pages/components/iconfont.vue | 71 ++++++++
test/pages/components/input-event.vue | 65 ++++++++
test/pages/components/refresh-loading.vue | 115 +++++++++++++
test/pages/components/switch-event.vue | 60 +++++++
test/pages/components/web-event.vue | 56 +++++++
test/pages/include/button.vue | 162 +++++++++++++++++++
test/pages/include/h1.vue | 13 ++
test/pages/include/h2.vue | 13 ++
test/pages/include/h3.vue | 13 ++
test/pages/include/hn.vue | 47 ++++++
test/pages/include/panel.vue | 141 ++++++++++++++++
test/pages/include/wxc-desc.vue | 66 ++++++++
test/pages/modules/animation-translate.vue | 129 +++++++++++++++
test/pages/modules/clipboard-event.vue | 57 +++++++
test/pages/modules/cover-generate.vue | 53 ++++++
test/pages/modules/downgrade-event.vue | 74 +++++++++
test/pages/modules/gesture-longpress.vue | 75 +++++++++
test/pages/modules/modal-event.vue | 61 +++++++
test/pages/modules/picker-event.vue | 63 ++++++++
test/pages/modules/storage-event.vue | 59 +++++++
test/pages/modules/stream-result.vue | 85 ++++++++++
test/run.sh | 30 +++-
test/screenshot/border-android.png | Bin 156247 -> 158634 bytes
test/scripts/components/iconfont.test.js | 34 ++++
test/scripts/components/input-event.test.js | 36 +++++
test/scripts/components/refresh-loading.test.js | 38 +++++
test/scripts/components/switch-event.test.js | 38 +++++
test/scripts/components/web-event.test.js | 30 ++++
.../scripts/modules/animation-translate.test.js | 40 +++++
test/scripts/modules/clipboard-event.test.js | 35 ++++
test/scripts/modules/downgrade-event.test.js | 30 ++++
test/scripts/modules/gesture-longpress.test.js | 37 +++++
test/scripts/modules/modal-event.test.js | 35 ++++
test/scripts/modules/picker-event.test.js | 41 +++++
test/scripts/modules/storage-event.test.js | 36 +++++
test/scripts/modules/stream-result.test.js | 34 ++++
test/scripts/util.js | 41 +++++
test/scripts/zcover-generate.js | 32 ++++
test/serve.sh | 2 +-
63 files changed, 2405 insertions(+), 141 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/288d8b5b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 8a2882c,5475e0d..0b3f8e4
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@@ -417,10 -442,11 +448,11 @@@ public class WXBridgeManager implement
if(target != null){
if(WXDomModule.WXDOM.equals(target)){
WXDomModule dom = getDomModule(instanceId);
- dom.callDomMethod(task);
+ dom.callDomMethod(task,parseNanos);
}else {
+ JSONObject optionObj = task.getJSONObject(OPTIONS);
callModuleMethod(instanceId, (String) target,
- (String) task.get(METHOD), (JSONArray) task.get(ARGS));
+ (String) task.get(METHOD), (JSONArray) task.get(ARGS), optionObj);
}
}else if(task.get(COMPONENT) != null){
//call component
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/288d8b5b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index 258df2b,9643abd..77969ee
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@@ -632,9 -627,11 +632,14 @@@ public class WXDomObject extends CSSNod
* @param json the original JSONObject
* @return Dom Object corresponding to the JSONObject.
*/
+ public static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance) {
+ return parse(json, wxsdkInstance, null);
+ }
+
+ public static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance, WXDomObject parentDomObject){
+ public static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance){
+ long startNanos = System.nanoTime();
+ long timestamp = System.currentTimeMillis();
if (json == null || json.size() <= 0) {
return null;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/288d8b5b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
----------------------------------------------------------------------
diff --cc android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
index 3b2d964,eafa552..3d026ee
--- 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
@@@ -87,9 -80,7 +87,9 @@@ public abstract class AbstractAddElemen
}
//only non-root has parent.
+ Stopwatch.tick();
- WXDomObject domObject = WXDomObject.parse(dom, instance);
+ WXDomObject domObject = WXDomObject.parse(dom, instance, null);
+ Stopwatch.split("parseDomObject");
if (domObject == null || context.getDomByRef(domObject.getRef()) != null) {
if (WXEnvironment.isApkDebugable()) {
[02/16] incubator-weex git commit: + [android] tracing
Posted by mi...@apache.org.
+ [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");
}
}));
}
[07/16] incubator-weex git commit: Merge remote-tracking branch
'remotes/upstream/0.15-dev' into android-feature-tracing
Posted by mi...@apache.org.
Merge remote-tracking branch 'remotes/upstream/0.15-dev' into android-feature-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/2e44c5f5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/2e44c5f5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/2e44c5f5
Branch: refs/heads/0.16-dev
Commit: 2e44c5f5f68ea7825cc5f6a3ca23485c1e4bfb5e
Parents: 102f2ed 43c5fdf
Author: misakuo <mi...@apache.org>
Authored: Thu Aug 10 14:36:58 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Thu Aug 10 14:36:58 2017 +0800
----------------------------------------------------------------------
README.md | 51 +-
.../weex/extend/component/WXParallax.java | 4 +-
android/sdk/libs/armeabi/libweexjsc.so | Bin 7570504 -> 7570392 bytes
android/sdk/libs/x86/libweexjsc.so | Bin 12121924 -> 7570392 bytes
.../java/com/taobao/weex/WXEnvironment.java | 4 +
.../java/com/taobao/weex/WXSDKInstance.java | 11 +-
.../com/taobao/weex/bridge/WXBridgeManager.java | 12 +-
.../java/com/taobao/weex/common/WXConfig.java | 1 +
.../java/com/taobao/weex/dom/WXDomModule.java | 1 -
.../taobao/weex/dom/WXRecyclerDomObject.java | 4 +
.../com/taobao/weex/dom/WXTextDomObject.java | 4 +-
.../com/taobao/weex/dom/action/Actions.java | 4 +-
.../taobao/weex/ui/component/WXComponent.java | 12 +-
.../taobao/weex/ui/component/WXScroller.java | 79 ++-
.../com/taobao/weex/ui/component/WXSlider.java | 12 +-
.../ui/component/list/BasicListComponent.java | 114 ++--
.../taobao/weex/ui/component/list/WXCell.java | 1 -
.../weex/ui/component/list/WXListComponent.java | 9 +-
.../weex/ui/view/WXHorizontalScrollView.java | 27 +
.../com/taobao/weex/ui/view/WXScrollView.java | 1 -
build/config.js | 1 +
build/karma.vue.conf.js | 16 +-
build/webpack.examples.web.config.js | 1 +
build/webpack.test.web.config.js | 1 +
doc/source/cn/references/modules/meta.md | 96 +++
doc/source/cn/references/modules/timer.md | 47 ++
doc/source/cn/references/weex-variable.md | 1 +
doc/source/references/modules/meta.md | 97 +++
doc/source/references/modules/timer.md | 58 ++
doc/source/references/weex-variable.md | 1 +
examples/vue/components/input.vue | 17 +
examples/vue/hello.vue | 2 +-
examples/vue/market/gcanvas.vue | 36 +-
.../vue/components/scrollable/list/index.js | 3 +-
.../vue/components/scrollable/scroller.js | 3 +-
.../vue/components/scrollable/waterfall.js | 3 +-
.../render/vue/components/slider/slideMixin.js | 17 +-
html5/render/vue/core/node.js | 172 +++--
html5/render/vue/core/style.js | 26 +-
html5/render/vue/env/global.js | 2 +
html5/render/vue/env/weex.js | 3 +
html5/render/vue/env/wx-env.js | 2 +-
html5/render/vue/mixins/base.js | 16 +-
html5/render/vue/mixins/scrollable.js | 18 +-
html5/render/vue/mixins/style.js | 58 +-
html5/render/vue/modules/websocket/websocket.js | 2 +
html5/render/vue/utils/event.js | 6 +-
html5/render/vue/utils/func.js | 136 +++-
html5/render/vue/utils/index.js | 104 ---
html5/render/vue/utils/perf.js | 3 +-
html5/render/vue/utils/style.js | 30 +-
html5/test/render/vue/core/node.js | 32 +-
html5/test/render/vue/core/scope-style-map.js | 4 +
.../render/vue/data/dotvue/event-bubble-bar.vue | 11 -
.../render/vue/data/dotvue/event-bubble.vue | 11 -
html5/test/render/vue/helper/utils.js | 10 +-
html5/test/render/vue/modules/modal.js | 225 +++++++
html5/test/render/vue/modules/websocket.js | 83 ++-
html5/test/render/vue/utils/component.js | 50 +-
html5/test/render/vue/utils/event.js | 78 +++
html5/test/render/vue/utils/func.js | 278 +++++++-
html5/test/render/vue/utils/lazyload.js | 106 +++
html5/test/render/vue/utils/perf.js | 132 ++++
html5/test/render/vue/utils/style.js | 157 ++++-
html5/test/render/vue/utils/type.js | 49 ++
html5/test/render/vue/validator/index.js | 31 +-
ios/playground/Podfile | 2 +-
.../WeexDemo.xcodeproj/project.pbxproj | 4 +
ios/playground/WeexDemo/WXDemoViewController.m | 2 +-
ios/sdk/WeexSDK-Dynamic/Info.plist | 24 +
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 642 ++++++++++++++++++-
.../xcschemes/WeexSDK-Dynamic.xcscheme | 80 +++
.../WeexSDK/Sources/Bridge/WXBridgeContext.h | 2 +-
.../WeexSDK/Sources/Bridge/WXBridgeContext.m | 74 ++-
ios/sdk/WeexSDK/Sources/Bridge/WXBridgeMethod.m | 16 +-
ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 35 +-
.../Component/Recycler/WXRecyclerComponent.h | 3 +-
.../Component/Recycler/WXRecyclerComponent.m | 5 +-
.../Recycler/WXSectionDataController.h | 2 +
.../WeexSDK/Sources/Component/WXAComponent.m | 2 +-
.../Sources/Component/WXCanvasComponent.h | 2 +-
.../Sources/Component/WXCycleSliderComponent.m | 6 +
.../WeexSDK/Sources/Component/WXEditComponent.m | 4 +-
.../Sources/Component/WXFooterComponent.h | 2 +-
.../Sources/Component/WXHeaderComponent.h | 3 +-
.../Sources/Component/WXImageComponent.m | 5 +-
.../WeexSDK/Sources/Component/WXListComponent.m | 57 +-
.../Sources/Component/WXScrollerComponent.m | 1 +
.../WeexSDK/Sources/Component/WXTextComponent.m | 61 +-
ios/sdk/WeexSDK/Sources/Component/WXTransform.m | 24 +-
.../Sources/Component/WXVideoComponent.m | 2 +-
.../WeexSDK/Sources/Component/WXWebComponent.m | 2 +-
.../Sources/Controller/WXRootViewController.m | 1 +
.../Sources/Display/WXComponent+BoxShadow.h | 4 -
ios/sdk/WeexSDK/Sources/Display/WXInnerLayer.h | 1 +
ios/sdk/WeexSDK/Sources/Display/WXRoundedRect.h | 2 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 10 +-
.../Sources/Handler/WXURLRewriteDefaultImpl.m | 2 +-
.../WeexSDK/Sources/Layout/WXComponent+Layout.m | 3 +-
.../Sources/Manager/WXComponentManager.h | 3 +
.../Sources/Manager/WXComponentManager.m | 6 +-
ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m | 2 +-
.../WeexSDK/Sources/Manager/WXServiceFactory.h | 2 +-
.../WeexSDK/Sources/Manager/WXTracingManager.h | 126 ++++
.../WeexSDK/Sources/Manager/WXTracingManager.m | 384 +++++++++++
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 5 +-
.../WeexSDK/Sources/Model/WXJSExceptionInfo.h | 1 +
.../WeexSDK/Sources/Model/WXJSExceptionInfo.m | 1 +
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 13 +-
.../WeexSDK/Sources/Module/WXAnimationModule.m | 15 +-
ios/sdk/WeexSDK/Sources/Module/WXDomModule.m | 12 +-
ios/sdk/WeexSDK/Sources/Module/WXPickerModule.m | 11 +-
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m | 2 +-
.../WeexSDK/Sources/Module/WXWebSocketModule.h | 1 -
.../WeexSDK/Sources/Module/WXWebSocketModule.m | 1 +
.../WeexSDK/Sources/Protocol/WXBridgeProtocol.h | 5 +
.../Sources/Protocol/WXURLRewriteProtocol.h | 2 +-
ios/sdk/WeexSDK/Sources/Utility/WXLog.m | 8 +
ios/sdk/WeexSDK/Sources/Utility/WXUtility.m | 1 +
.../View/WXComponent+PseudoClassManagement.h | 4 +-
.../Sources/View/WXComponent+ViewManagement.m | 7 +-
ios/sdk/WeexSDK/Sources/WeexSDK.h | 1 +
ios/sdk/WeexSDKTests/WXAnimationModuleTests.m | 29 +
ios/sdk/buildScripts.sh | 2 +
package.json | 8 +-
packages/weex-vue-render/package.json | 8 +-
pre-build/native-bundle-main.js | 16 +-
127 files changed, 3738 insertions(+), 609 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2e44c5f5/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2e44c5f5/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2e44c5f5/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2e44c5f5/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/2e44c5f5/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
[10/16] incubator-weex git commit: Merge remote-tracking branch
'remotes/upstream/0.16-dev' into android-feature-tracing
Posted by mi...@apache.org.
Merge remote-tracking branch 'remotes/upstream/0.16-dev' into android-feature-tracing
# Conflicts:
# android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
# android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractAddElementAction.java
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/d2587364
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d2587364
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d2587364
Branch: refs/heads/0.16-dev
Commit: d2587364e2fa97023891aa4042608828d00ce90f
Parents: 288d8b5
Author: misakuo <mi...@apache.org>
Authored: Thu Aug 10 14:53:07 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Thu Aug 10 14:53:07 2017 +0800
----------------------------------------------------------------------
android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java | 1 -
1 file changed, 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d2587364/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index 77969ee..98ad680 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -637,7 +637,6 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
}
public static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance, WXDomObject parentDomObject){
- public static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance){
long startNanos = System.nanoTime();
long timestamp = System.currentTimeMillis();
if (json == null || json.size() <= 0) {
[14/16] incubator-weex git commit: * [android] disable debug server
connect by default
Posted by mi...@apache.org.
* [android] disable debug server connect by default
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/67432568
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/67432568
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/67432568
Branch: refs/heads/0.16-dev
Commit: 6743256804249ef8fdb730c2f01c398790dc419c
Parents: 1f028a6
Author: misakuo <mi...@apache.org>
Authored: Mon Aug 14 16:37:46 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Mon Aug 14 16:37:46 2017 +0800
----------------------------------------------------------------------
android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/67432568/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
index 2923dd8..bb19b66 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java
@@ -65,7 +65,7 @@ public class WXEnvironment {
*/
public static boolean sDebugMode = false;
public static String sDebugWsUrl = "";
- public static boolean sDebugServerConnectable = true;
+ public static boolean sDebugServerConnectable = false;
public static boolean sRemoteDebugMode = false;
public static String sRemoteDebugProxyUrl = "";
public static long sJSLibInitTime = 0;
[03/16] incubator-weex git commit: Merge remote-tracking branch
'remotes/upstream/0.15-dev' into android-feature-tracing
Posted by mi...@apache.org.
Merge remote-tracking branch 'remotes/upstream/0.15-dev' into android-feature-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/4bb0f141
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4bb0f141
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4bb0f141
Branch: refs/heads/0.16-dev
Commit: 4bb0f14144f849f5cdb994a5c8db4866d47415d6
Parents: 38bffdf db64076
Author: moxun.ljf <fu...@foxmail.com>
Authored: Fri Jun 30 11:28:11 2017 +0800
Committer: moxun.ljf <fu...@foxmail.com>
Committed: Fri Jun 30 11:28:11 2017 +0800
----------------------------------------------------------------------
.travis.yml | 91 ++-
HOW-TO-BUILD.md | 80 +++
LICENSE | 22 +-
POSSIBLE-NOTICES-FOR-BIN-DIST | 3 +
README.md | 2 +-
README_RELEASE.md | 74 ---
RUN-RAT.md | 12 +
WeexSDK.podspec | 4 +-
.../java/com/alibaba/weex/WXApplication.java | 2 +
.../weex/extend/component/WXParallax.java | 345 ++++++++++
android/run-ci.sh | 7 -
android/sdk/build.gradle | 21 +-
android/sdk/libs/armeabi/libweexjsc.so | Bin 7566292 -> 7570504 bytes
android/sdk/libs/x86/libweexjsc.so | Bin 4545544 -> 12121924 bytes
.../java/com/taobao/weex/ComponentObserver.java | 50 ++
.../com/taobao/weex/LayoutFinishListener.java | 18 +
.../java/com/taobao/weex/WXSDKInstance.java | 43 +-
.../taobao/weex/adapter/ICrashInfoReporter.java | 18 +
.../java/com/taobao/weex/bridge/WXBridge.java | 299 ++++++++-
.../com/taobao/weex/bridge/WXBridgeManager.java | 364 +++++++++-
.../java/com/taobao/weex/common/Constants.java | 2 +
.../weex/common/ICheckBindingScroller.java | 27 +
.../java/com/taobao/weex/common/IWXBridge.java | 21 +
.../com/taobao/weex/common/WXImageStrategy.java | 9 +-
.../main/java/com/taobao/weex/dom/WXAttr.java | 38 +-
.../java/com/taobao/weex/dom/WXDomModule.java | 3 +-
.../com/taobao/weex/dom/WXImageQuality.java | 4 +-
.../com/taobao/weex/dom/action/Actions.java | 58 +-
.../taobao/weex/dom/action/AnimationAction.java | 37 +-
.../weex/dom/action/ExecutableRenderAction.java | 18 +
.../weex/dom/action/ModuleInvocationAction.java | 18 +
.../weex/dom/action/UpdateStyleAction.java | 4 +-
.../ui/animation/DimensionUpdateListener.java | 88 ---
.../weex/ui/animation/HeightProperty.java | 35 +
.../weex/ui/animation/LayoutParamsProperty.java | 64 ++
.../weex/ui/animation/WXAnimationBean.java | 72 +-
.../taobao/weex/ui/animation/WidthProperty.java | 35 +
.../ui/component/AbstractEditComponent.java | 45 +-
.../com/taobao/weex/ui/component/Textarea.java | 6 +
.../taobao/weex/ui/component/WXComponent.java | 43 +-
.../taobao/weex/ui/component/WXScroller.java | 9 +-
.../com/taobao/weex/ui/component/WXSlider.java | 4 +-
.../taobao/weex/ui/component/WXVContainer.java | 13 +
.../ui/component/list/BasicListComponent.java | 208 +++++-
.../ui/component/list/DefaultDragHelper.java | 173 +++++
.../weex/ui/component/list/DragHelper.java | 57 ++
.../ui/component/list/DragSupportCallback.java | 146 ++++
.../weex/ui/component/list/EventTrigger.java | 25 +
.../taobao/weex/ui/module/WXTimerModule.java | 87 +--
.../com/taobao/weex/ui/view/WXEditText.java | 9 +-
.../ExtendedStaggeredGridLayoutManager.java | 18 +
.../taobao/weex/utils/WXDataStructureUtil.java | 21 +-
.../com/taobao/weex/utils/WXResourceUtils.java | 2 +-
.../java/com/taobao/weex/WXSDKInstanceTest.java | 26 +-
.../weex/adapter/DefaultUriAdapterTest.java | 4 +-
.../clipboard/WXClipboardModuleTest.java | 4 +-
.../navigator/WXNavigatorModuleTest.java | 4 +-
.../appfram/storage/DefaultWXStorageTest.java | 32 +-
.../appfram/storage/WXStorageModuleTest.java | 16 +-
.../taobao/weex/bridge/WXBridgeManagerTest.java | 14 +-
.../com/taobao/weex/bridge/WXBridgeTest.java | 4 +-
.../com/taobao/weex/bridge/WXHashMapTest.java | 4 +-
.../taobao/weex/bridge/WXModuleManagerTest.java | 4 +-
.../java/com/taobao/weex/dom/WXAttrTest.java | 23 +-
.../com/taobao/weex/dom/WXDomModuleTest.java | 4 +-
.../com/taobao/weex/dom/WXDomObjectTest.java | 4 +-
.../com/taobao/weex/dom/WXDomStatementTest.java | 4 +-
.../taobao/weex/dom/WXTextDomObjectTest.java | 4 +-
.../ui/animation/WXAnimationModuleTest.java | 4 +-
.../weex/ui/component/EditComponentTest.java | 4 +-
.../taobao/weex/ui/component/TextareaTest.java | 4 +-
.../weex/ui/component/WXComponentTest.java | 4 +-
.../com/taobao/weex/ui/component/WXDivTest.java | 4 +-
.../taobao/weex/ui/component/WXEmbedTest.java | 4 +-
.../taobao/weex/ui/component/WXImageTest.java | 14 +-
.../taobao/weex/ui/component/WXLoadingTest.java | 4 +-
.../taobao/weex/ui/component/WXRefreshTest.java | 4 +-
.../weex/ui/component/WXScrollerTest.java | 4 +-
.../weex/ui/component/WXSliderNeighborTest.java | 4 +-
.../taobao/weex/ui/component/WXSliderTest.java | 4 +-
.../taobao/weex/ui/component/WXSwitchTest.java | 4 +-
.../taobao/weex/ui/component/WXVideoTest.java | 4 +-
.../com/taobao/weex/ui/component/WXWebTest.java | 4 +-
.../component/helper/WXTimeInputHelperTest.java | 4 +-
.../component/list/DefaultDragHelperTest.java | 132 ++++
.../ui/component/list/WXListComponentTest.java | 4 +-
.../taobao/weex/ui/module/WXMetaModuleTest.java | 4 +-
.../weex/ui/module/WXModalUIModuleTest.java | 4 +-
.../weex/ui/module/WXTimerModuleTest.java | 48 +-
.../weex/ui/module/WXWebViewModuleTest.java | 4 +-
.../weex/ui/view/WXCirclePageAdapterTest.java | 4 +-
.../taobao/weex/ui/view/WXScrollViewTest.java | 4 +-
.../com/taobao/weex/ui/view/WXWebViewTest.java | 9 +-
.../weex/ui/view/gesture/WXGestureTest.java | 4 +-
.../com/taobao/weex/utils/TypefaceUtilTest.java | 4 +-
.../com/taobao/weex/utils/WXFileUtilsTest.java | 17 +-
.../com/taobao/weex/utils/WXLogUtilsTest.java | 7 +-
.../weex/utils/WXReflectionUtilsTest.java | 4 +-
.../taobao/weex/bridge/WXWebsocketBridge.java | 88 +++
dangerfile.js | 164 +++--
doc/_config.yml | 7 +
doc/_config_cn.yml | 333 ++++++++++
doc/source/cn/references/components/input.md | 241 +++++--
doc/source/cn/references/components/list.md | 2 +-
doc/source/cn/references/components/text.md | 64 +-
doc/source/cn/references/modules/animation.md | 4 +-
doc/source/cn/references/modules/dom.md | 2 +-
doc/source/cn/references/modules/picker.md | 2 +-
doc/source/cn/references/modules/websocket.md | 2 +-
doc/source/cn/references/weex-variable.md | 4 +-
doc/source/cn/releasenote.md | 663 ++----------------
.../cn/v-0.10/references/components/input.md | 216 +++++-
doc/source/faq.md | 6 +-
doc/source/guide/index.md | 26 +-
doc/source/guide/intro/using-vue.md | 6 +-
doc/source/references/components/input.md | 233 +++++--
doc/source/references/components/list.md | 2 +-
doc/source/references/components/text.md | 69 +-
doc/source/references/modules/animation.md | 12 +-
doc/source/references/modules/dom.md | 2 +-
doc/source/references/modules/websocket.md | 2 +-
doc/source/references/weex-variable.md | 4 +-
doc/source/releasenote.md | 663 ++----------------
doc/themes/weex/languages/cn.yml | 12 +
doc/themes/weex/languages/en.yml | 13 +-
doc/themes/weex/layout/_partial/head.ejs | 3 +
doc/themes/weex/layout/index.ejs | 28 +
doc/themes/weex/layout/layout.ejs | 15 +
doc/themes/weex/layout/post.ejs | 7 -
doc/themes/weex/source/css/common.scss | 14 +-
doc/themes/weex/source/css/docsearch.min.css | 2 +
doc/themes/weex/source/css/index.scss | 19 +-
doc/themes/weex/source/css/media-queries.scss | 2 +-
.../weex/source/css/partial/highlight.scss | 7 +-
.../weex/source/css/partial/search-form.scss | 44 +-
doc/themes/weex/source/css/variable.scss | 4 +-
doc/themes/weex/source/images/fliggy.png | Bin 0 -> 19329 bytes
doc/themes/weex/source/images/juhuasuan.png | Bin 0 -> 46340 bytes
doc/themes/weex/source/images/qianniu.png | Bin 0 -> 19852 bytes
doc/themes/weex/source/images/taopiaopiao.png | Bin 0 -> 12460 bytes
doc/themes/weex/source/js/docsearch.min.js | 7 +
examples/vue/components/waterfall.vue | 165 +++--
examples/vue/index.vue | 1 +
examples/vue/modules/websocket.vue | 116 ++++
html5/render/vue/README.md | 42 +-
html5/render/vue/components/index.js | 7 +-
html5/render/vue/components/input.js | 52 +-
.../render/vue/components/scrollable/header.js | 2 +-
.../vue/components/scrollable/list/index.js | 10 -
.../components/scrollable/loading-indicator.js | 145 +++-
.../render/vue/components/scrollable/loading.js | 4 +-
.../render/vue/components/scrollable/refresh.js | 4 +-
.../vue/components/scrollable/scroller.js | 15 -
.../vue/components/scrollable/waterfall.js | 338 ++++++++++
html5/render/vue/components/slider/index.js | 137 +---
html5/render/vue/components/slider/indicator.js | 8 +-
.../render/vue/components/slider/slideMixin.js | 666 ++++++++++++++-----
.../vue/components/slider/slider-neighbor.css | 19 -
.../vue/components/slider/slider-neighbor.js | 116 +---
html5/render/vue/components/slider/slider.css | 34 +
html5/render/vue/config.js | 21 +
html5/render/vue/core/style.js | 137 +++-
html5/render/vue/env/viewport.js | 6 +-
html5/render/vue/env/weex.js | 3 +
html5/render/vue/env/wx-env.js | 12 +-
html5/render/vue/index.js | 9 +-
html5/render/vue/mixins/base.js | 15 +-
html5/render/vue/mixins/index.js | 4 +-
html5/render/vue/mixins/scrollable.js | 108 ++-
html5/render/vue/mixins/sticky.js | 65 ++
html5/render/vue/mixins/style.js | 11 +-
html5/render/vue/modules/dom.js | 34 +-
html5/render/vue/modules/globalEvent.js | 69 ++
html5/render/vue/modules/index.js | 4 +
html5/render/vue/modules/websocket/index.js | 26 +
html5/render/vue/modules/websocket/websocket.js | 60 ++
html5/render/vue/styles/base.css | 86 +--
html5/render/vue/styles/reset.css | 5 +
html5/render/vue/utils/component.js | 187 ++++--
html5/render/vue/utils/func.js | 30 +
html5/render/vue/utils/style.js | 162 ++++-
html5/shared/console.js | 10 +-
html5/test/render/vue/modules/websocket.js | 11 +
ios/playground/WeexDemo/WXDemoViewController.m | 6 -
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 4 -
.../WeexSDK/Sources/Bridge/WXBridgeContext.m | 154 +++++
ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 111 ++++
.../Sources/Component/WXComponent_internal.h | 1 +
.../Sources/Component/WXCycleSliderComponent.m | 23 +-
.../WeexSDK/Sources/Component/WXEditComponent.m | 7 +-
.../Sources/Component/WXImageComponent.m | 7 +-
.../WeexSDK/Sources/Component/WXListComponent.m | 3 +
.../Sources/Component/WXLoadingComponent.m | 7 -
.../Sources/Component/WXScrollerComponent.m | 5 +-
.../WeexSDK/Sources/Component/WXTextComponent.m | 68 +-
ios/sdk/WeexSDK/Sources/Component/WXTransform.h | 5 +-
ios/sdk/WeexSDK/Sources/Component/WXTransform.m | 109 ++-
.../WeexSDK/Sources/Events/WXComponent+Events.m | 42 +-
.../WeexSDK/Sources/Layout/WXComponent+Layout.m | 1 -
.../Sources/Manager/WXComponentManager.m | 5 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 49 +-
.../WeexSDK/Sources/Module/WXAnimationModule.m | 24 +
ios/sdk/WeexSDK/Sources/Module/WXDomModule.m | 16 +-
.../WeexSDK/Sources/Module/WXNavigatorModule.m | 7 -
ios/sdk/WeexSDK/Sources/Module/WXTimerModule.m | 4 +-
.../WeexSDK/Sources/Protocol/WXBridgeProtocol.h | 38 ++
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 2 +-
ios/sdk/WeexSDK/Sources/Utility/WXUtility.h | 2 -
ios/sdk/WeexSDK/Sources/Utility/WXUtility.m | 19 +-
.../Sources/View/WXComponent+ViewManagement.m | 1 -
ios/sdk/WeexSDK/dependency/SRWebSocket.h | 17 +-
ios/sdk/WeexSDK/dependency/SRWebSocket.m | 18 +-
ios/sdk/WeexSDKTests/WXURLRewriteTests.m | 21 -
ios/sdk/WeexSDKTests/dependency/libOCMock.a | Bin 2098920 -> 0 bytes
package.json | 4 +-
packages/weex-vue-render/README.md | 42 +-
packages/weex-vue-render/package.json | 2 +-
scripts/release_files.rules | 3 +-
test/ci-funcs.sh | 18 -
test/pages/components/textarea-maxlength.vue | 10 +-
test/pages/css/border.vue | 16 +-
test/run.sh | 4 +-
test/screenshot/border-android.png | Bin 196752 -> 156247 bytes
test/screenshot/border-ios.png | Bin 161202 -> 126185 bytes
.../components/textarea-maxlength.test.js | 6 +-
test/scripts/util.js | 7 +-
test/serve.sh | 3 +-
227 files changed, 7104 insertions(+), 3065 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4bb0f141/android/sdk/src/main/java/com/taobao/weex/dom/WXDomModule.java
----------------------------------------------------------------------
[08/16] incubator-weex git commit: Merge remote-tracking branch
'remotes/upstream/0.16-dev' into android-feature-tracing
Posted by mi...@apache.org.
Merge remote-tracking branch 'remotes/upstream/0.16-dev' into android-feature-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/4fa0a2c6
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4fa0a2c6
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4fa0a2c6
Branch: refs/heads/0.16-dev
Commit: 4fa0a2c62ab5f587a05f71ede5f857750819497a
Parents: 2e44c5f f82e311
Author: misakuo <mi...@apache.org>
Authored: Thu Aug 10 14:37:21 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Thu Aug 10 14:37:21 2017 +0800
----------------------------------------------------------------------
.gitignore | 5 +-
WeexSDK.podspec | 2 +-
.../java/com/alibaba/weex/IndexActivity.java | 14 +
.../java/com/taobao/weex/WXSDKInstance.java | 6 +-
.../main/java/com/taobao/weex/WXSDKManager.java | 10 +
.../taobao/weex/common/WXWorkThreadManager.java | 48 +
.../com/taobao/weex/ui/component/WXImage.java | 68 +
.../taobao/weex/utils/WXViewToImageUtil.java | 151 +
build/build.js | 106 +-
build/config.js | 54 +-
build/karma.vue.conf.js | 2 +-
dangerfile.js | 87 +-
doc/_config.yml | 6 +-
doc/_config_cn.yml | 6 +-
doc/source/_posts/coreml.md | 79 +
doc/source/_posts/hello_world.md | 3 +-
doc/source/_posts/test.md | 14 +
.../cn/references/advanced/extend-to-android.md | 15 +-
doc/source/cn/references/bubble.md | 4 +-
doc/source/cn/references/common-style.md | 4 +-
doc/source/cn/references/components/image.md | 2 +-
doc/source/cn/references/components/input.md | 34 +-
doc/source/cn/references/components/list.md | 8 +-
doc/source/cn/references/components/scroller.md | 2 +-
doc/source/cn/references/weex-variable.md | 2 +-
doc/source/cn/v-0.10/references/bubble.md | 6 +-
doc/source/guide/intro/write-once.md | 14 +-
doc/source/guide/set-up-env.md | 22 +-
.../references/advanced/extend-to-android.md | 14 +
doc/source/references/bubble.md | 4 +-
doc/source/references/components/image.md | 2 +-
doc/source/references/components/input.md | 34 +-
doc/source/references/components/list.md | 7 +-
doc/source/references/components/scroller.md | 4 +-
doc/source/v-0.10/references/bubble.md | 8 +-
doc/themes/weex/languages/cn.yml | 5 +-
doc/themes/weex/languages/en.yml | 3 +-
doc/themes/weex/layout/_partial/footer.ejs | 2 +-
doc/themes/weex/layout/_partial/header.ejs | 23 +-
.../weex/layout/_partial/post/summary.ejs | 6 +
doc/themes/weex/layout/_partial/slider.ejs | 2 +-
doc/themes/weex/layout/layout.ejs | 6 +-
doc/themes/weex/source/css/index.scss | 2 +
doc/themes/weex/source/css/partial/footer.scss | 5 +-
doc/themes/weex/source/css/partial/summary.scss | 6 +
doc/themes/weex/source/js/common.js | 38 +
entry.js | 11 +
examples/vue/components/scroller.vue | 9 +-
examples/vue/index.vue | 1 +
examples/vue/modules/picker.vue | 64 +
html5/frameworks/legacy/core/array.js | 4 +
html5/frameworks/legacy/core/object.js | 6 +
html5/frameworks/legacy/static/create.js | 7 +-
html5/frameworks/legacy/vm/directive.js | 6 +
html5/frameworks/vanilla/index.js | 35 +-
html5/render/vue/README.md | 77 +
html5/render/vue/components/a.js | 90 +-
html5/render/vue/components/div.js | 43 +-
html5/render/vue/components/image.js | 18 +-
html5/render/vue/components/index.js | 37 +-
html5/render/vue/components/input.js | 130 +-
html5/render/vue/components/scrollable/cell.js | 39 +
.../render/vue/components/scrollable/header.js | 102 +-
html5/render/vue/components/scrollable/index.js | 48 +
html5/render/vue/components/scrollable/list.js | 82 +
.../vue/components/scrollable/list/cell.js | 36 -
.../vue/components/scrollable/list/index.js | 77 -
.../vue/components/scrollable/list/listMixin.js | 47 -
.../vue/components/scrollable/list/style.js | 34 -
.../components/scrollable/loading-indicator.js | 17 +-
.../render/vue/components/scrollable/loading.js | 141 +-
.../vue/components/scrollable/mixins/index.js | 26 +
.../vue/components/scrollable/mixins/list.js | 46 +
.../components/scrollable/mixins/scrollable.js | 267 +
.../render/vue/components/scrollable/refresh.js | 157 +-
.../vue/components/scrollable/scroller.js | 143 +-
.../render/vue/components/scrollable/style.css | 90 +
.../vue/components/scrollable/waterfall.js | 573 +-
html5/render/vue/components/slider/index.js | 52 +-
html5/render/vue/components/slider/indicator.js | 18 +-
.../render/vue/components/slider/slideMixin.js | 46 +-
.../vue/components/slider/slider-neighbor.js | 12 +-
html5/render/vue/components/slider/slider.css | 19 +
html5/render/vue/components/slider/slider.js | 75 +
html5/render/vue/components/switch.js | 114 +-
html5/render/vue/components/text.js | 52 +-
html5/render/vue/components/textarea.js | 104 +-
html5/render/vue/components/video.js | 107 +-
html5/render/vue/components/web.js | 98 +-
html5/render/vue/core/style.js | 35 -
html5/render/vue/env/global.js | 6 +
html5/render/vue/env/index.js | 5 -
html5/render/vue/index.js | 25 -
html5/render/vue/mixins/base.js | 71 -
html5/render/vue/mixins/index.js | 2 -
html5/render/vue/mixins/scrollable.js | 233 -
html5/render/vue/mixins/style.js | 4 +-
html5/render/vue/modules/animation.js | 36 +-
html5/render/vue/modules/dom.js | 96 +-
html5/render/vue/modules/globalEvent.js | 8 +-
html5/render/vue/modules/index.js | 36 +-
html5/render/vue/modules/navigator.js | 10 +-
html5/render/vue/modules/webview.js | 18 +-
html5/render/vue/styles/base.css | 86 +-
html5/render/vue/styles/reset.css | 19 +
html5/render/vue/utils/lazyload.js | 24 +-
html5/render/vue/utils/perf.js | 283 +-
html5/runtime/callback-manager.js | 12 +-
html5/runtime/config.js | 5 +-
html5/runtime/normalize.js | 107 +
html5/runtime/task-center.js | 61 +-
html5/runtime/vdom/document.js | 2 +
html5/runtime/vdom/element.js | 15 +-
html5/test/render/vue/components/list.js | 2 +-
html5/test/render/vue/components/switch.js | 5 +-
html5/test/render/vue/core/node.js | 5 +-
.../render/vue/data/dotvue/event-bubble-bar.vue | 8 +-
.../render/vue/data/dotvue/event-bubble.vue | 4 +-
html5/test/render/vue/examples/list-cell.js | 2 +-
html5/test/render/vue/helper/index.js | 2 +-
html5/test/render/vue/helper/main.js | 3 +-
html5/test/render/vue/helper/utils.js | 4 +
html5/test/render/vue/modules/animation.js | 61 +
html5/test/render/vue/modules/dom.js | 126 +
html5/test/render/vue/modules/globalEvent.js | 47 +
html5/test/render/vue/modules/navigator.js | 46 +
html5/test/render/vue/modules/webview.js | 55 +
html5/test/render/vue/utils/lazyload.js | 59 +-
html5/test/render/vue/utils/perf.js | 94 +-
html5/test/render/vue/utils/style.js | 50 +-
ios/playground/Podfile | 2 +-
ios/playground/WeexDemo/Info.plist | 4 +
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 4 +-
.../WeexSDK/Sources/Bridge/WXBridgeContext.m | 5 +-
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.h | 2 +
ios/sdk/WeexSDK/Sources/Bridge/WXModuleMethod.m | 11 +-
.../Component/Recycler/WXRecyclerComponent.m | 58 +-
.../Recycler/WXRecyclerDragController.h | 52 +
.../Recycler/WXRecyclerDragController.m | 208 +
.../WeexSDK/Sources/Component/WXAComponent.m | 1 +
.../WeexSDK/Sources/Component/WXEditComponent.m | 11 +-
.../Sources/Component/WXImageComponent.m | 119 +-
.../WeexSDK/Sources/Component/WXListComponent.m | 2 +-
.../Sources/Component/WXTextAreaComponent.m | 2 +-
ios/sdk/WeexSDK/Sources/Component/WXTransform.h | 1 +
ios/sdk/WeexSDK/Sources/Component/WXTransform.m | 33 +-
.../Sources/Component/WXVideoComponent.m | 1 +
.../WeexSDK/Sources/Component/WXWebComponent.m | 1 +
.../WeexSDK/Sources/Loader/WXResourceLoader.m | 2 +-
.../Sources/Manager/WXComponentManager.m | 13 +-
ios/sdk/WeexSDK/Sources/Manager/WXRuleManager.m | 1 +
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 3 +
.../WeexSDK/Sources/Module/WXAnimationModule.m | 5 +
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m | 1 +
.../Sources/Network/WXResourceResponse.h | 2 +-
.../Sources/Protocol/WXURLRewriteProtocol.h | 2 +-
.../Sources/Protocol/WXValidateProtocol.h | 4 +-
ios/sdk/WeexSDK/Sources/Utility/WXDefine.h | 4 +-
package.json | 30 +-
packages/weex-js-framework/.npmignore | 4 +
packages/weex-js-framework/index.js | 25150 +++++++++++++++++
packages/weex-js-framework/index.min.js | 1 +
packages/weex-js-framework/package.json | 22 +
packages/weex-js-runtime/.npmignore | 4 +
packages/weex-js-runtime/index.js | 3906 +++
packages/weex-js-runtime/index.min.js | 1 +
packages/weex-js-runtime/index.min.js.gz | Bin 0 -> 12588 bytes
packages/weex-js-runtime/package.json | 22 +
packages/weex-legacy-framework/.npmignore | 4 +
packages/weex-legacy-framework/index.js | 5770 ++++
packages/weex-legacy-framework/index.min.js | 1 +
packages/weex-legacy-framework/package.json | 22 +
packages/weex-vue-plugins/weex-vue-a/README.md | 3 +
.../weex-vue-plugins/weex-vue-a/package.json | 26 +
.../weex-vue-plugins/weex-vue-a/src/index.js | 2 +
.../weex-vue-animation/README.md | 3 +
.../weex-vue-animation/package.json | 27 +
.../weex-vue-animation/src/index.js | 2 +
.../weex-vue-clipboard/README.md | 3 +
.../weex-vue-clipboard/package.json | 27 +
.../weex-vue-clipboard/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-dom/README.md | 3 +
.../weex-vue-plugins/weex-vue-dom/package.json | 27 +
.../weex-vue-plugins/weex-vue-dom/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-event/README.md | 3 +
.../weex-vue-event/package.json | 27 +
.../weex-vue-event/src/index.js | 2 +
.../weex-vue-geolocation/README.md | 3 +
.../weex-vue-geolocation/package.json | 27 +
.../weex-vue-geolocation/src/index.js | 2 +
.../weex-vue-global-event/README.md | 3 +
.../weex-vue-global-event/package.json | 27 +
.../weex-vue-global-event/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-input/README.md | 3 +
.../weex-vue-input/package.json | 26 +
.../weex-vue-input/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-modal/README.md | 3 +
.../weex-vue-modal/package.json | 27 +
.../weex-vue-modal/src/index.js | 2 +
.../weex-vue-navigator/README.md | 3 +
.../weex-vue-navigator/package.json | 27 +
.../weex-vue-navigator/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-slider/README.md | 3 +
.../weex-vue-slider/package.json | 27 +
.../weex-vue-slider/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-storage/README.md | 3 +
.../weex-vue-storage/package.json | 27 +
.../weex-vue-storage/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-stream/README.md | 3 +
.../weex-vue-stream/package.json | 27 +
.../weex-vue-stream/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-switch/README.md | 3 +
.../weex-vue-switch/package.json | 26 +
.../weex-vue-switch/src/index.js | 2 +
.../weex-vue-textarea/.DS_Store | Bin 0 -> 6148 bytes
.../weex-vue-textarea/README.md | 3 +
.../weex-vue-textarea/package.json | 26 +
.../weex-vue-textarea/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-video/README.md | 3 +
.../weex-vue-video/package.json | 26 +
.../weex-vue-video/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-web/README.md | 3 +
.../weex-vue-plugins/weex-vue-web/package.json | 26 +
.../weex-vue-plugins/weex-vue-web/src/index.js | 2 +
.../weex-vue-websocket/README.md | 3 +
.../weex-vue-websocket/package.json | 27 +
.../weex-vue-websocket/src/index.js | 2 +
.../weex-vue-plugins/weex-vue-webview/README.md | 3 +
.../weex-vue-webview/package.json | 27 +
.../weex-vue-webview/src/index.js | 2 +
packages/weex-vue-render/README.md | 77 +
packages/weex-vue-render/package.json | 9 +-
packages/weex-vue-render/src/index.core.js | 13 +
packages/weex-vue-render/src/index.js | 12 +
pre-build/native-bundle-main.js | 16 +-
scripts/commit-msg.sh | 2 +-
scripts/dist-vue.sh | 2 +-
test/pages/components/hyperlink_target.vue | 1 +
test/pages/image-onload.vue | 14 +-
test/scripts/components/image-onload.test.js | 10 +
vue.html | 11 +-
241 files changed, 39650 insertions(+), 2487 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4fa0a2c6/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4fa0a2c6/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
[12/16] incubator-weex git commit: * [android] invoke callbacks when
instance will be destroy
Posted by mi...@apache.org.
* [android] invoke callbacks when instance will be destroy
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/b80a7b59
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/b80a7b59
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/b80a7b59
Branch: refs/heads/0.16-dev
Commit: b80a7b5999a5f69a1744f2d1043fbf0cdfe7f565
Parents: 4b0a600
Author: misakuo <mi...@apache.org>
Authored: Mon Aug 14 12:02:29 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Mon Aug 14 12:02:29 2017 +0800
----------------------------------------------------------------------
.../main/java/com/taobao/weex/WXSDKManager.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/b80a7b59/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index fc3fe75..10b1873 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -53,6 +53,7 @@ import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import java.io.File;
+import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -91,6 +92,8 @@ public class WXSDKManager {
// Tell weexv8 to initialize v8, default is true.
private boolean mNeedInitV8 = true;
+ private List<InstanceLifeCycleCallbacks> mLifeCycleCallbacks;
+
private static final int DEFAULT_VIEWPORT_WIDTH = 750;
private WXSDKManager() {
@@ -288,6 +291,11 @@ public class WXSDKManager {
if (!WXUtils.isUiThread()) {
throw new WXRuntimeException("[WXSDKManager] destroyInstance error");
}
+ if (mLifeCycleCallbacks != null) {
+ for (InstanceLifeCycleCallbacks callbacks : mLifeCycleCallbacks) {
+ callbacks.onInstanceDestroyed(instanceId);
+ }
+ }
mWXRenderManager.removeRenderStatement(instanceId);
mWXDomManager.removeDomStatement(instanceId);
mBridgeManager.destroyInstance(instanceId);
@@ -429,4 +437,15 @@ public class WXSDKManager {
public ITracingAdapter getTracingAdapter() {
return mTracingAdapter;
}
+
+ public void registerInstanceLifeCycleCallbacks(InstanceLifeCycleCallbacks callbacks) {
+ if (mLifeCycleCallbacks == null) {
+ mLifeCycleCallbacks = new ArrayList<>();
+ }
+ mLifeCycleCallbacks.add(callbacks);
+ }
+
+ public interface InstanceLifeCycleCallbacks {
+ void onInstanceDestroyed(String instanceId);
+ }
}
[04/16] incubator-weex git commit: * [android] add TraceInfo on every
component
Posted by mi...@apache.org.
* [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 <mi...@apache.org>
Authored: Tue Jul 25 16:06:18 2017 +0800
Committer: misakuo <mi...@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;
[06/16] incubator-weex git commit: + [android] batch modification for
tracing @notdanger
Posted by mi...@apache.org.
+ [android] batch modification for tracing @notdanger
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/102f2ed0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/102f2ed0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/102f2ed0
Branch: refs/heads/0.16-dev
Commit: 102f2ed0db66226aff309215acbd94472b77390b
Parents: e2d8a7b
Author: misakuo <mi...@apache.org>
Authored: Thu Aug 10 14:35:54 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Thu Aug 10 14:35:54 2017 +0800
----------------------------------------------------------------------
.../com/alibaba/weex/PerformanceActivity.java | 121 --------------
.../java/com/taobao/weex/WXSDKInstance.java | 37 ++++-
.../main/java/com/taobao/weex/WXSDKManager.java | 9 ++
.../taobao/weex/adapter/ITracingAdapter.java | 31 ++++
.../com/taobao/weex/bridge/WXBridgeManager.java | 66 +++++++-
.../java/com/taobao/weex/common/WXTracing.java | 76 ---------
.../taobao/weex/dom/DOMActionContextImpl.java | 23 +--
.../com/taobao/weex/dom/RenderActionTask.java | 26 +++-
.../java/com/taobao/weex/dom/WXDomHandler.java | 15 +-
.../java/com/taobao/weex/dom/WXDomManager.java | 16 +-
.../java/com/taobao/weex/dom/WXDomModule.java | 37 ++++-
.../java/com/taobao/weex/dom/WXDomObject.java | 9 ++
.../dom/action/AbstractAddElementAction.java | 28 +++-
.../dom/action/AbstractLayoutFinishAction.java | 3 +-
.../weex/dom/action/AddElementAction.java | 30 +++-
.../taobao/weex/dom/action/AddEventAction.java | 27 +++-
.../weex/dom/action/CreateBodyAction.java | 19 +++
.../weex/dom/action/CreateFinishAction.java | 6 +
.../weex/dom/action/RefreshFinishAction.java | 4 +
.../taobao/weex/dom/action/TraceableAction.java | 82 ++++++++++
.../weex/dom/action/UpdateAttributeAction.java | 2 +-
.../weex/dom/action/UpdateStyleAction.java | 2 +-
.../java/com/taobao/weex/tracing/Stopwatch.java | 132 ++++++++++++++++
.../java/com/taobao/weex/tracing/WXTracing.java | 156 +++++++++++++++++++
.../com/taobao/weex/ui/WXRenderManager.java | 32 +++-
.../taobao/weex/ui/component/WXComponent.java | 58 +++++--
.../taobao/weex/ui/component/WXVContainer.java | 18 +++
.../ui/component/list/BasicListComponent.java | 2 +-
.../java/com/taobao/weex/utils/WXLogUtils.java | 45 +++---
.../com/taobao/weex/utils/WXLogUtilsTest.java | 1 -
30 files changed, 826 insertions(+), 287 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java
deleted file mode 100644
index ad88546..0000000
--- a/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.alibaba.weex;
-
-
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Color;
-import android.os.Bundle;
-import android.support.v4.app.Fragment;
-import android.support.v4.app.FragmentManager;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.alibaba.weex.performance.EnvironmentFragment;
-import com.alibaba.weex.performance.EventOverviewFragment;
-
-public class PerformanceActivity extends WXBaseActivity {
-
- private LinearLayout segmentHost;
-
- public static void start(Context context, int instanceId) {
- Intent intent = new Intent(context, PerformanceActivity.class);
- intent.putExtra("instanceId", instanceId);
- context.startActivity(intent);
- }
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_performance);
- segmentHost = (LinearLayout) findViewById(R.id.segment_control);
- addTab("页面性能", true, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- switchFragment(EventOverviewFragment.getInstance(getIntent().getIntExtra("instanceId", -1)));
- }
- });
-
- addTab("DOM树", false, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- }
- });
-
- addTab("JS LOG", false, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
-
- }
- });
-
- addTab("环境变量", false, new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- switchFragment(new EnvironmentFragment());
- }
- });
- }
-
- private void switchFragment(Fragment fragment) {
- getSupportFragmentManager()
- .beginTransaction()
- .replace(R.id.fragment_container, fragment)
- .commitAllowingStateLoss();
- }
-
- @Override
- protected void onResumeFragments() {
- super.onResumeFragments();
- FragmentManager fragmentManager = getSupportFragmentManager();
-
- Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
- if (fragment == null) {
- fragmentManager
- .beginTransaction()
- .add(R.id.fragment_container, EventOverviewFragment.getInstance(getIntent().getIntExtra("instanceId", -1)))
- .commitAllowingStateLoss();
- }
- }
-
- private void addTab(String title, final boolean selected, final View.OnClickListener listener) {
- final TextView textView = new TextView(this);
- textView.setText(title);
- LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
- lp.weight = 1;
- lp.setMargins(1, 1, 1, 1);
- if (selected) {
- textView.setBackgroundColor(Color.TRANSPARENT);
- } else {
- textView.setBackgroundColor(Color.WHITE);
- }
- textView.setGravity(Gravity.CENTER);
- textView.setLayoutParams(lp);
- textView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- if (!v.isSelected() && v instanceof TextView) {
- listener.onClick(v);
- for (int i = 0; i < segmentHost.getChildCount(); i++) {
- segmentHost.getChildAt(i).setSelected(false);
- segmentHost.getChildAt(i).setBackgroundColor(Color.WHITE);
- ((TextView) segmentHost.getChildAt(i)).setTextColor(Color.parseColor("#1E90FF"));
- }
- v.setSelected(true);
- v.setBackgroundColor(Color.TRANSPARENT);
- ((TextView) v).setTextColor(Color.WHITE);
- }
- }
- });
- textView.setSelected(selected);
- if (selected) {
- textView.setTextColor(Color.WHITE);
- } else {
- textView.setTextColor(Color.parseColor("#1E90FF"));
- }
- segmentHost.addView(textView);
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index a8d8a60..d806148 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -61,6 +61,7 @@ import com.taobao.weex.dom.WXDomObject;
import com.taobao.weex.dom.WXDomTask;
import com.taobao.weex.dom.WXEvent;
import com.taobao.weex.http.WXHttpUtil;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.component.NestedContainer;
import com.taobao.weex.ui.component.WXBasicComponentType;
import com.taobao.weex.ui.component.WXComponent;
@@ -116,6 +117,9 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
private static volatile int mViewPortWidth = 750;
private int mInstanceViewPortWidth = 750;
+ public long mRenderStartNanos;
+ public int mExecJSTraceId = WXTracing.nextId();
+
/**
* Render strategy.
*/
@@ -415,6 +419,16 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
return;
}
+ if (WXTracing.isAvailable()) {
+ WXTracing.TraceEvent traceEvent = WXTracing.newEvent("executeBundleJS", mInstanceId, -1);
+ traceEvent.traceId = mExecJSTraceId;
+ traceEvent.iid = mInstanceId;
+ traceEvent.tname = "JSThread";
+ traceEvent.ph = "B";
+ traceEvent.submit();
+ mRenderStartNanos = System.nanoTime();
+ }
+
ensureRenderArchor();
Map<String, Object> renderOptions = options;
@@ -429,7 +443,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
}
mWXPerformance.pageName = pageName;
- mWXPerformance.JSTemplateSize = template.length() / 1024;
+ mWXPerformance.JSTemplateSize = template.length() / 1024f;
mRenderStartTime = System.currentTimeMillis();
mRenderStrategy = flag;
@@ -1480,6 +1494,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
private WXRenderStrategy flag;
private WXSDKInstance instance;
private long startRequestTime;
+ private int traceId;
private WXHttpListener(String pageName, Map<String, Object> options, String jsonInitData, WXRenderStrategy flag, long startRequestTime) {
this.pageName = pageName;
@@ -1487,6 +1502,16 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
this.jsonInitData = jsonInitData;
this.flag = flag;
this.startRequestTime = startRequestTime;
+ this.traceId = WXTracing.nextId();
+
+ if (WXTracing.isAvailable()) {
+ WXTracing.TraceEvent event = WXTracing.newEvent("downloadBundleJS", mInstanceId, -1);
+ event.iid = mInstanceId;
+ event.tname = "Network";
+ event.ph = "B";
+ event.traceId = traceId;
+ event.submit();
+ }
}
public void setSDKInstance(WXSDKInstance instance) {
@@ -1526,6 +1551,16 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View.
this.instance.getWXStatisticsListener().onHttpFinish();
}
+ if (WXTracing.isAvailable()) {
+ WXTracing.TraceEvent event = WXTracing.newEvent("downloadBundleJS", mInstanceId, -1);
+ event.traceId = traceId;
+ event.tname = "Network";
+ event.ph = "E";
+ event.extParams = new HashMap<>();
+ event.extParams.put("BundleSize", response.originalData.length);
+ event.submit();
+ }
+
mWXPerformance.networkTime = System.currentTimeMillis() - startRequestTime;
if(response.extendParams!=null){
Object actualNetworkTime=response.extendParams.get("actualNetworkTime");
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index 0b43fa6..84e5fa8 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -27,6 +27,7 @@ import com.taobao.weex.adapter.DefaultUriAdapter;
import com.taobao.weex.adapter.DefaultWXHttpAdapter;
import com.taobao.weex.adapter.ICrashInfoReporter;
import com.taobao.weex.adapter.IDrawableLoader;
+import com.taobao.weex.adapter.ITracingAdapter;
import com.taobao.weex.adapter.IWXDebugAdapter;
import com.taobao.weex.adapter.IWXHttpAdapter;
import com.taobao.weex.adapter.IWXImgLoaderAdapter;
@@ -83,6 +84,7 @@ public class WXSDKManager {
private IWXStatisticsListener mStatisticsListener;
private URIAdapter mURIAdapter;
private IWebSocketAdapterFactory mIWebSocketAdapterFactory;
+ private ITracingAdapter mTracingAdapter;
private WXValidateProcessor mWXValidateProcessor;
// Tell weexv8 to initialize v8, default is true.
private boolean mNeedInitV8 = true;
@@ -410,4 +412,11 @@ public class WXSDKManager {
}
}
+ public void setTracingAdapter(ITracingAdapter adapter) {
+ this.mTracingAdapter = adapter;
+ }
+
+ public ITracingAdapter getTracingAdapter() {
+ return mTracingAdapter;
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/adapter/ITracingAdapter.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/adapter/ITracingAdapter.java b/android/sdk/src/main/java/com/taobao/weex/adapter/ITracingAdapter.java
new file mode 100644
index 0000000..4acb23d
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/adapter/ITracingAdapter.java
@@ -0,0 +1,31 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.adapter;
+
+import com.taobao.weex.tracing.WXTracing;
+
+/**
+ * Created by moxun on 2017/7/6.
+ */
+
+public interface ITracingAdapter {
+ void enable();
+ void disable();
+ void submitTracingEvent(WXTracing.TraceEvent event);
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
index 2e8e928..2d533ea 100644
--- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java
@@ -51,6 +51,8 @@ import com.taobao.weex.dom.DOMAction;
import com.taobao.weex.dom.WXDomModule;
import com.taobao.weex.dom.action.Action;
import com.taobao.weex.dom.action.Actions;
+import com.taobao.weex.dom.action.TraceableAction;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.utils.WXFileUtils;
import com.taobao.weex.utils.WXJsonUtils;
import com.taobao.weex.utils.WXLogUtils;
@@ -157,6 +159,8 @@ public class WXBridgeManager implements Callback,BactchExecutor {
private Interceptor mInterceptor;
+ private WXParams mInitParams;
+
private WXBridgeManager() {
initWXBridge(WXEnvironment.sRemoteDebugMode);
mJSThread = new WXThread("WeexJSBridgeThread", this);
@@ -394,7 +398,9 @@ public class WXBridgeManager implements Callback,BactchExecutor {
long start = System.currentTimeMillis();
+ long parseNanos = System.nanoTime();
JSONArray array = JSON.parseArray(tasks);
+ parseNanos = System.nanoTime() - parseNanos;
if(WXSDKManager.getInstance().getSDKInstance(instanceId)!=null) {
WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
@@ -411,7 +417,7 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if(target != null){
if(WXDomModule.WXDOM.equals(target)){
WXDomModule dom = getDomModule(instanceId);
- dom.callDomMethod(task);
+ dom.callDomMethod(task,parseNanos);
}else {
callModuleMethod(instanceId, (String) target,
(String) task.get(METHOD), (JSONArray) task.get(ARGS));
@@ -463,10 +469,20 @@ public class WXBridgeManager implements Callback,BactchExecutor {
try {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
+ long start = System.currentTimeMillis();
+ long nanosTemp = System.nanoTime();
JSONObject domObject = JSON.parseObject(tasks);
+ nanosTemp = System.nanoTime() - nanosTemp;
+
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getCreateBody(domObject);
domModule.postAction((DOMAction)action, true);
+
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ ((TraceableAction) action).mParseJsonNanos = nanosTemp;
+ ((TraceableAction) action).mStartMillis = start;
+ ((TraceableAction) action).onStartDomExecute(instanceId, "createBody", "_root", domObject.getString("type"), tasks);
+ }
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e);
@@ -605,9 +621,19 @@ public class WXBridgeManager implements Callback,BactchExecutor {
try {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
+ long start = System.currentTimeMillis();
+ long parseNanos = System.nanoTime();
JSONObject domObject = JSON.parseObject(task);
+ parseNanos = System.nanoTime() - parseNanos;
+
Action action = Actions.getUpdateAttrs(ref, domObject);
domModule.postAction((DOMAction)action, false);
+
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ ((TraceableAction) action).mStartMillis = start;
+ ((TraceableAction) action).mParseJsonNanos = parseNanos;
+ ((TraceableAction) action).onStartDomExecute(instanceId, "updateAttrs", domObject.getString("ref"), domObject.getString("type"), task);
+ }
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callUpdateAttrs exception: ", e);
@@ -648,9 +674,19 @@ public class WXBridgeManager implements Callback,BactchExecutor {
try {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXDomModule domModule = getDomModule(instanceId);
+ long start = System.currentTimeMillis();
+ long nanosTemp = System.nanoTime();
JSONObject domObject = JSON.parseObject(task);
+ nanosTemp = System.nanoTime() - nanosTemp;
+
Action action = Actions.getUpdateStyle(ref, domObject, false);
domModule.postAction((DOMAction)action, false);
+
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ ((TraceableAction) action).mParseJsonNanos = nanosTemp;
+ ((TraceableAction) action).mStartMillis = start;
+ ((TraceableAction) action).onStartDomExecute(instanceId, "updateStyle", ref, domObject.getString("type"), domObject.toJSONString());
+ }
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callUpdateStyle exception: ", e);
@@ -684,6 +720,10 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getRemoveElement(ref);
domModule.postAction((DOMAction)action, false);
+
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ ((TraceableAction) action).onStartDomExecute(instanceId, "removeElement", ref, null, ref);
+ }
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callRemoveElement exception: ", e);
@@ -752,6 +792,10 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getAddEvent(ref, event);
domModule.postAction((DOMAction)action, false);
+
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ ((TraceableAction) action).onStartDomExecute(instanceId, "addEvent", ref, null, event);
+ }
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callAddEvent exception: ", e);
@@ -785,6 +829,10 @@ public class WXBridgeManager implements Callback,BactchExecutor {
WXDomModule domModule = getDomModule(instanceId);
Action action = Actions.getRemoveEvent(ref, event);
domModule.postAction((DOMAction)action, false);
+
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ ((TraceableAction) action).onStartDomExecute(instanceId, "removeEvent", ref, null, event);
+ }
}
} catch (Exception e) {
WXLogUtils.e("[WXBridgeManager] callRemoveEvent exception: ", e);
@@ -815,13 +863,22 @@ public class WXBridgeManager implements Callback,BactchExecutor {
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
long start = System.currentTimeMillis();
+ long nanosTemp = System.nanoTime();
JSONObject domObject = JSON.parseObject(dom);
+ nanosTemp = System.nanoTime() - nanosTemp;
if (WXSDKManager.getInstance().getSDKInstance(instanceId) != null) {
WXSDKManager.getInstance().getSDKInstance(instanceId).jsonParseTime(System.currentTimeMillis() - start);
}
WXDomModule domModule = getDomModule(instanceId);
- domModule.postAction(Actions.getAddElement(domObject, ref,Integer.parseInt(index)),false);
+ DOMAction addElementAction = Actions.getAddElement(domObject, ref,Integer.parseInt(index));
+ domModule.postAction(addElementAction, false);
+
+ if (WXTracing.isAvailable() && addElementAction instanceof TraceableAction) {
+ ((TraceableAction) addElementAction).mParseJsonNanos = nanosTemp;
+ ((TraceableAction) addElementAction).mStartMillis = start;
+ ((TraceableAction) addElementAction).onStartDomExecute(instanceId, "addElement", domObject.getString("ref"), domObject.getString("type"), dom);
+ }
}
if (UNDEFINED.equals(callback) || NON_CALLBACK.equals(callback)) {
@@ -1368,9 +1425,14 @@ public class WXBridgeManager implements Callback,BactchExecutor {
wxParams.setDeviceHeight(TextUtils.isEmpty(config.get("deviceHeight")) ? String.valueOf(WXViewUtils.getScreenHeight(WXEnvironment.sApplication)) : config.get("deviceHeight"));
wxParams.setOptions(WXEnvironment.getCustomOptions());
wxParams.setNeedInitV8(WXSDKManager.getInstance().needInitV8());
+ mInitParams = wxParams;
return wxParams;
}
+ public WXParams getInitParams() {
+ return mInitParams;
+ }
+
private void execRegisterFailTask() {
if (mRegisterModuleFailList.size() > 0) {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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
deleted file mode 100644
index bc37386..0000000
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXTracing.java
+++ /dev/null
@@ -1,76 +0,0 @@
-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;
-
-/**
- * Created by moxun on 2017/6/6.
- */
-
-public class WXTracing {
- private static final AtomicInteger sIdGenerator = new AtomicInteger(0);
-
- public static int nextId() {
- return sIdGenerator.getAndIncrement();
- }
-
- public static void submit(TraceEvent event) {
- WXLogUtils.d("WXTracing", event.toString());
- }
-
- public static class TraceEvent {
- public String name;
- public String phase;
- public String threadName;
- public long timestamp;
- public long nanoTime;
- public long duration;
-
- @Override
- public String toString() {
- final StringBuffer sb = new StringBuffer("TraceEvent{");
- sb.append("name='").append(name).append('\'');
- sb.append(", threadName='").append(threadName).append('\'');
- sb.append(", phase='").append(phase).append('\'');
- sb.append(", timestamp=").append(timestamp);
- sb.append(", nanoTime=").append(nanoTime);
- sb.append(", duration=").append(duration);
- sb.append('}');
- 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/102f2ed0/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 6e1e385..d18cea8 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
@@ -26,12 +26,13 @@ import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.dom.action.Actions;
import com.taobao.weex.dom.flex.CSSLayoutContext;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.IWXRenderTask;
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;
@@ -172,9 +173,18 @@ class DOMActionContextImpl implements DOMActionContext {
if (!mDirty || mDestroy) {
return;
}
-
+ long start = System.currentTimeMillis();
+ long startNanos = System.nanoTime();
WXDomObject rootDom = mRegistry.get(WXDomObject.ROOT);
layout(rootDom);
+
+ if (WXTracing.isAvailable()) {
+ WXTracing.TraceEvent batchEvent = WXTracing.newEvent("domBatch", mInstanceId, -1);
+ batchEvent.duration = Stopwatch.nanosToMillis(System.nanoTime() - startNanos);
+ batchEvent.ts = start;
+ batchEvent.ph = "X";
+ WXTracing.submit(batchEvent);
+ }
}
void layout(WXDomObject rootDom) {
@@ -182,9 +192,7 @@ 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
@@ -195,13 +203,9 @@ 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) {
@@ -217,11 +221,9 @@ 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);
@@ -232,7 +234,6 @@ 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/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java b/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java
index 28b487f..bac1574 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/RenderActionTask.java
@@ -18,6 +18,12 @@
*/
package com.taobao.weex.dom;
+import android.os.SystemClock;
+
+import com.taobao.weex.dom.action.AbstractAddElementAction;
+import com.taobao.weex.dom.action.TraceableAction;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.IWXRenderTask;
/**
@@ -27,15 +33,33 @@ import com.taobao.weex.ui.IWXRenderTask;
class RenderActionTask implements IWXRenderTask {
private final RenderAction mRenderTask;
private final RenderActionContext mContext;
+ private final long mStartMillis = SystemClock.uptimeMillis();
public RenderActionTask(RenderAction action, RenderActionContext context){
mRenderTask = action;
mContext = context;
}
-
@Override
public void execute() {
+ if (WXTracing.isAvailable() && mRenderTask instanceof TraceableAction) {
+ ((TraceableAction) mRenderTask).mUIQueueTime = SystemClock.uptimeMillis() - mStartMillis;
+ }
+ long start = System.currentTimeMillis();
+ long uiNanos = System.nanoTime();
mRenderTask.executeRender(mContext);
+
+ if (WXTracing.isAvailable()) {
+ uiNanos = System.nanoTime() - uiNanos;
+ if (mRenderTask instanceof TraceableAction) {
+ if (!(mRenderTask instanceof AbstractAddElementAction)) {
+ WXTracing.TraceEvent uiExecuteEvent = WXTracing.newEvent("UIExecute", mContext.getInstance().getInstanceId(), ((TraceableAction) mRenderTask).mTracingEventId);
+ uiExecuteEvent.duration = Stopwatch.nanosToMillis(uiNanos);
+ uiExecuteEvent.ts = start;
+ uiExecuteEvent.submit();
+ }
+ ((TraceableAction) mRenderTask).onFinishUIExecute();
+ }
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 03f6940..ca79066 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
@@ -23,9 +23,8 @@ 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;
+import com.taobao.weex.dom.action.TraceableAction;
/**
* Handler for dom operations.
@@ -45,8 +44,6 @@ 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;
}
@@ -54,11 +51,12 @@ public class WXDomHandler implements Handler.Callback {
Object obj = msg.obj;
WXDomTask task = null;
- if (obj instanceof WXDomTask) {
+ if (obj != null && 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");
+ Object action = ((WXDomTask) obj).args.get(0);
+ if (action != null && action instanceof TraceableAction) {
+ ((TraceableAction) action).mDomQueueTime = SystemClock.uptimeMillis() - msg.getWhen();
+ }
}
if (!mHasBatch) {
@@ -86,7 +84,6 @@ 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/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
index fe8866b..66fd56e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomManager.java
@@ -26,6 +26,10 @@ import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.common.WXRuntimeException;
import com.taobao.weex.common.WXThread;
+import com.taobao.weex.dom.action.AbstractAddElementAction;
+import com.taobao.weex.dom.action.TraceableAction;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.WXRenderManager;
import com.taobao.weex.utils.WXUtils;
@@ -160,8 +164,18 @@ public final class WXDomManager {
return;
}
}
+ long domStart = System.currentTimeMillis();
+ long domNanos = System.nanoTime();
action.executeDom(context);
-
+ if (WXTracing.isAvailable()) {
+ domNanos = System.nanoTime() - domNanos;
+ if (!(action instanceof AbstractAddElementAction) && action instanceof TraceableAction) {
+ WXTracing.TraceEvent domExecuteEvent = WXTracing.newEvent("DomExecute", context.getInstanceId(), ((TraceableAction) action).mTracingEventId);
+ domExecuteEvent.duration = Stopwatch.nanosToMillis(domNanos);
+ domExecuteEvent.ts = domStart;
+ domExecuteEvent.submit();
+ }
+ }
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 2d44561..399ab3a 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
@@ -26,6 +26,9 @@ import com.taobao.weex.bridge.WXBridgeManager;
import com.taobao.weex.common.WXModule;
import com.taobao.weex.dom.action.Action;
import com.taobao.weex.dom.action.Actions;
+import com.taobao.weex.dom.action.TraceableAction;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.utils.WXLogUtils;
@@ -76,16 +79,16 @@ public final class WXDomModule extends WXModule {
mWXSDKInstance = instance;
}
- public void callDomMethod(JSONObject task) {
+ public void callDomMethod(JSONObject task, long... parseNanos) {
if (task == null) {
return;
}
String method = (String) task.get(WXBridgeManager.METHOD);
JSONArray args = (JSONArray) task.get(WXBridgeManager.ARGS);
- callDomMethod(method,args);
+ callDomMethod(method,args,parseNanos);
}
- public Object callDomMethod(String method, JSONArray args) {
+ public Object callDomMethod(String method, JSONArray args, long... parseNanos) {
if (method == null) {
return null;
@@ -102,6 +105,34 @@ public final class WXDomModule extends WXModule {
}else {
postAction((RenderAction)action);
}
+
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ //TODO: CHECK AGAIN
+ String ref = null;
+ String type = null;
+ if (args.size() > 0) {
+ if (args.size() >= 1) {
+ if (args.get(0) instanceof String) {
+ ref = args.getString(0);
+ } else if (args.get(0) instanceof JSONObject) {
+ ref = ((JSONObject) args.get(0)).getString("ref");
+ type = ((JSONObject) args.get(0)).getString("type");
+ }
+ }
+
+ if (args.size() >= 2) {
+ if (args.get(1) instanceof JSONObject) {
+ ref = ((JSONObject) args.get(1)).getString("ref");
+ type = ((JSONObject) args.get(1)).getString("type");
+ }
+ }
+ }
+ if (parseNanos != null && parseNanos.length == 1) {
+ ((TraceableAction) action).mParseJsonNanos = parseNanos[0];
+ ((TraceableAction) action).mStartMillis -= Stopwatch.nanosToMillis(parseNanos[0]);
+ }
+ ((TraceableAction) action).onStartDomExecute(mWXSDKInstance.getInstanceId(), method, ref, type, args.toJSONString());
+ }
} catch (IndexOutOfBoundsException e) {
// no enougn args
e.printStackTrace();
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
index 641c95a..258df2b 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
@@ -86,7 +86,11 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
private boolean mYoung = false;
+ public long mDomThreadNanos;
+ public long mDomThreadTimestamp;
+
public void traverseTree(Consumer...consumers){
+ long startNanos = System.nanoTime();
if (consumers == null) {
return;
}
@@ -101,6 +105,7 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
child = getChild(i);
child.traverseTree(consumers);
}
+ mDomThreadNanos += (System.nanoTime() - startNanos);
}
@@ -628,6 +633,8 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
* @return Dom Object corresponding to the JSONObject.
*/
public static @Nullable WXDomObject parse(JSONObject json, WXSDKInstance wxsdkInstance){
+ long startNanos = System.nanoTime();
+ long timestamp = System.currentTimeMillis();
if (json == null || json.size() <= 0) {
return null;
}
@@ -671,6 +678,8 @@ public class WXDomObject extends CSSNode implements Cloneable,ImmutableDomObject
}
}
+ domObject.mDomThreadNanos = System.nanoTime() - startNanos;
+ domObject.mDomThreadTimestamp = timestamp;
return domObject;
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 b3b27a6..3b2d964 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
@@ -28,24 +28,30 @@ import com.taobao.weex.dom.DOMAction;
import com.taobao.weex.dom.DOMActionContext;
import com.taobao.weex.dom.RenderAction;
import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
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;
+import java.util.List;
+
/**
* Created by sospartan on 22/02/2017.
*/
-abstract class AbstractAddElementAction implements DOMAction, RenderAction {
-
+public abstract class AbstractAddElementAction extends TraceableAction implements DOMAction, RenderAction {
protected WXComponent generateComponentTree(DOMActionContext context, WXDomObject dom, WXVContainer parent) {
if (dom == null) {
return null;
}
+ long startNanos = System.nanoTime();
WXComponent component = WXComponentFactory.newInstance(context.getInstance(), dom, parent);
+ component.mTraceInfo.domThreadStart = dom.mDomThreadTimestamp;
+ component.mTraceInfo.rootEventId = mTracingEventId;
+ component.mTraceInfo.domQueueTime = mDomQueueTime;
context.registerComponent(dom.getRef(), component);
if (component instanceof WXVContainer) {
@@ -59,7 +65,7 @@ abstract class AbstractAddElementAction implements DOMAction, RenderAction {
}
}
}
-
+ component.mTraceInfo.domThreadNanos = System.nanoTime() - startNanos;
return component;
}
@@ -83,7 +89,7 @@ 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");
+ Stopwatch.split("parseDomObject");
if (domObject == null || context.getDomByRef(domObject.getRef()) != null) {
if (WXEnvironment.isApkDebugable()) {
@@ -93,13 +99,13 @@ abstract class AbstractAddElementAction implements DOMAction, RenderAction {
return;
}
appendDomToTree(context, domObject);
- WXLogUtils.e("Tracing", "Component " + domObject.getRef() + " appendDomToTree " + Stopwatch.tackAndTick() + " ms");
+ Stopwatch.split("appendDomToTree");
domObject.traverseTree(
context.getAddDOMConsumer(),
context.getApplyStyleConsumer()
);
- WXLogUtils.e("Tracing", "Component " + domObject.getRef() + " traverseTree " + Stopwatch.tackAndTick() + " ms");
+ Stopwatch.split("traverseTree");
//Create component in dom thread
@@ -109,13 +115,19 @@ abstract class AbstractAddElementAction implements DOMAction, RenderAction {
//stop redner, some fatal happened.
return;
}
- WXLogUtils.e("Tracing", "Component " + domObject.getRef() + " createComponent " + Stopwatch.tackAndTick() + " ms");
+ Stopwatch.split("createComponent");
context.addDomInfo(domObject.getRef(), component);
context.postRenderTask(this);
addAnimationForDomTree(context, domObject);
instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+ if (WXTracing.isAvailable()) {
+ List<Stopwatch.ProcessEvent> events = Stopwatch.getProcessEvents();
+ for (Stopwatch.ProcessEvent event : events) {
+ submitPerformance(event.fname, "X", context.getInstanceId(), event.duration, event.startMillis, true);
+ }
+ }
}
public void addAnimationForDomTree(DOMActionContext context, WXDomObject domObject) {
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java
index 120e56c..a16f27a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/AbstractLayoutFinishAction.java
@@ -21,7 +21,6 @@ package com.taobao.weex.dom.action;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.adapter.IWXUserTrackAdapter;
import com.taobao.weex.common.WXErrorCode;
-import com.taobao.weex.common.WXRenderStrategy;
import com.taobao.weex.dom.DOMAction;
import com.taobao.weex.dom.DOMActionContext;
import com.taobao.weex.dom.RenderAction;
@@ -30,7 +29,7 @@ import com.taobao.weex.dom.WXDomObject;
/**
* Created by sospartan on 02/03/2017.
*/
-abstract class AbstractLayoutFinishAction implements DOMAction, RenderAction {
+abstract class AbstractLayoutFinishAction extends TraceableAction implements DOMAction, RenderAction {
protected int mLayoutWidth;
protected int mLayoutHeight;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 a4b3adf..e8b3721 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
@@ -25,11 +25,14 @@ import com.taobao.weex.common.WXErrorCode;
import com.taobao.weex.dom.DOMActionContext;
import com.taobao.weex.dom.RenderActionContext;
import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
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.List;
+
/**
* Created by sospartan on 22/02/2017.
*/
@@ -59,6 +62,7 @@ final class AddElementAction extends AbstractAddElementAction {
@Override
protected void appendDomToTree(DOMActionContext context, WXDomObject domObject) {
+ long startNanos = System.nanoTime();
WXDomObject parent;
mRef = domObject.getRef();
if ((parent = context.getDomByRef(mParentRef)) == null) {
@@ -68,6 +72,7 @@ final class AddElementAction extends AbstractAddElementAction {
//non-root and parent exist
parent.add(domObject, mAddIndex);
}
+ domObject.mDomThreadNanos += (System.nanoTime() - startNanos);
}
@Override
@@ -98,14 +103,31 @@ 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");
+ Stopwatch.split("createViewTree");
+
component.applyLayoutAndEvent(component);
- WXLogUtils.e("Tracing", "Component " + mRef + " applyLayoutAndEvent " + Stopwatch.tackAndTick() + " ms");
+ Stopwatch.split("applyLayoutAndEvent");
+
component.bindData(component);
- WXLogUtils.e("Tracing", "Component " + mRef + " bindData " + Stopwatch.tackAndTick() + " ms");
+ Stopwatch.split("bindData");
+
+ if (WXTracing.isAvailable()) {
+ String instanceId = context.getInstance().getInstanceId();
+ List<Stopwatch.ProcessEvent> splits = Stopwatch.getProcessEvents();
+ for (Stopwatch.ProcessEvent event : splits) {
+ submitPerformance(event.fname, "X", instanceId, event.duration, event.startMillis, true);
+ }
+ }
+ component.mTraceInfo.uiQueueTime = mUIQueueTime;
+ if (component.isLazy()) {
+ component.onRenderFinish(WXComponent.STATE_DOM_FINISH);
+ } else {
+ component.onRenderFinish(WXComponent.STATE_ALL_FINISH);
+ }
} catch (Exception e) {
WXLogUtils.e("add component failed.", e);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 e051917..e0ee886 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
@@ -26,14 +26,16 @@ import com.taobao.weex.dom.DOMActionContext;
import com.taobao.weex.dom.RenderAction;
import com.taobao.weex.dom.RenderActionContext;
import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.component.WXComponent;
-import com.taobao.weex.utils.Stopwatch;
-import com.taobao.weex.utils.WXLogUtils;
+
+import java.util.List;
/**
* Created by sospartan on 01/03/2017.
*/
-class AddEventAction implements DOMAction, RenderAction {
+class AddEventAction extends TraceableAction implements DOMAction, RenderAction {
private final String mRef;
private final String mEvent;
@@ -49,6 +51,8 @@ class AddEventAction implements DOMAction, RenderAction {
if (context.isDestory()) {
return;
}
+
+ Stopwatch.tick();
WXSDKInstance instance = context.getInstance();
WXDomObject domObject = context.getDomByRef(mRef);
if (domObject == null) {
@@ -59,6 +63,11 @@ class AddEventAction implements DOMAction, RenderAction {
}
domObject.addEvent(mEvent);
mUpdatedDom = domObject;
+
+ if (WXTracing.isAvailable() && mBeginEvent != null) {
+ submitPerformance("addEventToDom", "X", instance.getInstanceId(), Stopwatch.tack(), Stopwatch.lastTickStamp(), true);
+ }
+
context.postRenderTask(this);
if (instance != null) {
@@ -73,9 +82,17 @@ class AddEventAction implements DOMAction, RenderAction {
//sync dom change to component
Stopwatch.tick();
comp.updateDom(mUpdatedDom);
- WXLogUtils.e("Tracing", "updateDom " + Stopwatch.tackAndTick() + " ms");
+ Stopwatch.split("updateDom");
+
comp.addEvent(mEvent);
- WXLogUtils.e("Tracing", "addEvent " + Stopwatch.tackAndTick() + " ms");
+ Stopwatch.split("addEventToComponent");
+
+ if (WXTracing.isAvailable() && mBeginEvent != null) {
+ List<Stopwatch.ProcessEvent> events = Stopwatch.getProcessEvents();
+ for (Stopwatch.ProcessEvent event : events) {
+ submitPerformance(event.fname, "X", comp.getInstanceId(), event.duration, event.startMillis, true);
+ }
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java
index c7ac391..8c4df7d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateBodyAction.java
@@ -30,6 +30,8 @@ import com.taobao.weex.common.WXRenderStrategy;
import com.taobao.weex.dom.DOMActionContext;
import com.taobao.weex.dom.RenderActionContext;
import com.taobao.weex.dom.WXDomObject;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXScroller;
import com.taobao.weex.utils.WXLogUtils;
@@ -48,6 +50,12 @@ class CreateBodyAction extends AbstractAddElementAction {
@Override
public void executeDom(DOMActionContext context) {
+ if (WXEnvironment.isApkDebugable()) {
+ WXTracing.TraceEvent execJsEndEvent = WXTracing.newEvent("executeBundleJS", context.getInstanceId(), -1);
+ execJsEndEvent.traceId = context.getInstance().mExecJSTraceId;
+ execJsEndEvent.ph = "E";
+ execJsEndEvent.submit();
+ }
addDomInternal(context, mData);
}
@@ -58,10 +66,12 @@ class CreateBodyAction extends AbstractAddElementAction {
@Override
protected void appendDomToTree(DOMActionContext context, WXDomObject domObject) {
+ long startNanos = System.nanoTime();
String instanceId = context.getInstanceId();
WXDomObject.prepareRoot(domObject,
WXViewUtils.getWebPxByWidth(WXViewUtils.getWeexHeight(instanceId), WXSDKManager.getInstanceViewPortWidth(instanceId)),
WXViewUtils.getWebPxByWidth(WXViewUtils.getWeexWidth(instanceId), WXSDKManager.getInstanceViewPortWidth(instanceId)));
+ domObject.mDomThreadNanos += (System.nanoTime() - startNanos);
}
@Override
@@ -84,17 +94,24 @@ class CreateBodyAction extends AbstractAddElementAction {
return;
}
try {
+ Stopwatch.tick();
long start = System.currentTimeMillis();
component.createView();
if (WXEnvironment.isApkDebugable()) {
WXLogUtils.renderPerformanceLog("createView", (System.currentTimeMillis() - start));
+ submitPerformance("createView", "X", instance.getInstanceId(), Stopwatch.tackAndTick(), start, true);
}
start = System.currentTimeMillis();
component.applyLayoutAndEvent(component);
+ if (WXTracing.isAvailable()) {
+ submitPerformance("applyLayoutAndEvent", "X", instance.getInstanceId(), Stopwatch.tackAndTick(), start, true);
+ }
+ start = System.currentTimeMillis();
component.bindData(component);
if (WXEnvironment.isApkDebugable()) {
WXLogUtils.renderPerformanceLog("bind", (System.currentTimeMillis() - start));
+ submitPerformance("bindData", "X", instance.getInstanceId(), Stopwatch.tack(), start, true);
}
if (component instanceof WXScroller) {
@@ -108,6 +125,8 @@ class CreateBodyAction extends AbstractAddElementAction {
instance.onCreateFinish();
}
instance.commitUTStab(IWXUserTrackAdapter.DOM_MODULE, WXErrorCode.WX_SUCCESS);
+ component.mTraceInfo.uiQueueTime = mUIQueueTime;
+ component.onRenderFinish(WXComponent.STATE_ALL_FINISH);
} catch (Exception e) {
WXLogUtils.e("create body failed.", e);
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java
index c92cf11..e581c4e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/CreateFinishAction.java
@@ -25,6 +25,8 @@ import com.taobao.weex.common.WXRenderStrategy;
import com.taobao.weex.common.WXThread;
import com.taobao.weex.dom.DOMActionContext;
import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
/**
* Created by sospartan on 02/03/2017.
@@ -54,5 +56,9 @@ final class CreateFinishAction extends AbstractLayoutFinishAction {
instance.onCreateFinish();
}
instance.onRenderSuccess(mLayoutWidth, mLayoutHeight);
+ if (WXTracing.isAvailable()) {
+ double renderTime = Stopwatch.millisUntilNow(context.getInstance().mRenderStartNanos);
+ submitPerformance("renderFinish", "X", instance.getInstanceId(), renderTime, System.currentTimeMillis());
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java
index c46b8d9..2d87d11 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/RefreshFinishAction.java
@@ -20,6 +20,7 @@ package com.taobao.weex.dom.action;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.dom.RenderActionContext;
+import com.taobao.weex.tracing.WXTracing;
/**
* Created by sospartan on 02/03/2017.
@@ -31,5 +32,8 @@ class RefreshFinishAction extends AbstractLayoutFinishAction {
public void executeRender(RenderActionContext context) {
WXSDKInstance instance = context.getInstance();
instance.onRefreshSuccess(mLayoutWidth, mLayoutHeight);
+ if (WXTracing.isAvailable()) {
+ submitPerformance("refreshFinish", "I", context.getInstance().getInstanceId(), 0, 0);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/action/TraceableAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/TraceableAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/TraceableAction.java
new file mode 100644
index 0000000..5bd2689
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/TraceableAction.java
@@ -0,0 +1,82 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.dom.action;
+
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
+
+/**
+ * Created by moxun on 2017/6/30.
+ */
+
+public class TraceableAction {
+ public int mTracingEventId;
+ public long mStartMillis;
+ public long mDomQueueTime;
+ public long mUIQueueTime;
+ public long mParseJsonNanos = -1;
+ protected WXTracing.TraceEvent mBeginEvent;
+
+ {
+ if (WXTracing.isAvailable()) {
+ mTracingEventId = WXTracing.nextId();
+ mStartMillis = System.currentTimeMillis();
+ }
+ }
+
+ protected WXTracing.TraceEvent submitPerformance(String fname, String ph, String instanceId, double duration, long ts, boolean... isSegment) {
+ if (WXTracing.isAvailable()) {
+ WXTracing.TraceEvent event = WXTracing.newEvent(fname, instanceId, mTracingEventId);
+ event.ts = ts;
+ event.ph = ph;
+ event.duration = duration;
+
+ if (isSegment != null && isSegment.length == 1) {
+ event.isSegment = isSegment[0];
+ }
+
+ event.submit();
+ return event;
+ }
+ return new WXTracing.TraceEvent();
+ }
+
+ public void onStartDomExecute(String instanceId, String fname, String ref, String type, String payload) {
+ if (WXTracing.isAvailable()) {
+ mBeginEvent = WXTracing.newEvent(fname, instanceId, -1);
+ mBeginEvent.traceId = mTracingEventId;
+ mBeginEvent.ts = mStartMillis;
+ mBeginEvent.ph = "B";
+ mBeginEvent.ref = ref;
+ mBeginEvent.name = type;
+ mBeginEvent.payload = payload;
+ mBeginEvent.parseJsonTime = Stopwatch.nanosToMillis(mParseJsonNanos);
+ mBeginEvent.submit();
+ }
+ }
+
+ public void onFinishUIExecute() {
+ if (WXTracing.isAvailable() && mBeginEvent != null) {
+ WXTracing.TraceEvent endEvent = WXTracing.newEvent(getClass().getSimpleName(), mBeginEvent.iid, -1);
+ endEvent.traceId = mBeginEvent.traceId;
+ endEvent.ph = "E";
+ endEvent.submit();
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java
index 3db776e..017bb53 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateAttributeAction.java
@@ -33,7 +33,7 @@ import com.taobao.weex.ui.component.WXComponent;
* Created by sospartan on 28/02/2017.
*/
-class UpdateAttributeAction implements DOMAction, RenderAction {
+class UpdateAttributeAction extends TraceableAction implements DOMAction, RenderAction {
private final String mRef;
private final JSONObject mData;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java
index aa56e70..a4dc8e9 100644
--- a/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java
+++ b/android/sdk/src/main/java/com/taobao/weex/dom/action/UpdateStyleAction.java
@@ -39,7 +39,7 @@ import java.util.Map;
* Created by sospartan on 28/02/2017.
*/
-class UpdateStyleAction implements DOMAction, RenderAction {
+class UpdateStyleAction extends TraceableAction implements DOMAction, RenderAction {
private final String mRef;
private final JSONObject mData;
private final boolean mIsCausedByPesudo;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/tracing/Stopwatch.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/tracing/Stopwatch.java b/android/sdk/src/main/java/com/taobao/weex/tracing/Stopwatch.java
new file mode 100644
index 0000000..10b8be2
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/tracing/Stopwatch.java
@@ -0,0 +1,132 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.tracing;
+
+import com.taobao.weex.utils.WXLogUtils;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+/**
+ * Created by moxun on 2017/6/2.
+ */
+
+public class Stopwatch {
+ private static final ThreadLocal<Stopwatch> sThreadLocal = new ThreadLocal<>();
+ private long startNanos;
+ private List<ProcessEvent> splits = new ArrayList<>();
+ private long startMillis;
+
+ private static void prepare() {
+ if (sThreadLocal.get() == null) {
+ sThreadLocal.set(new Stopwatch());
+ }
+ }
+
+ public static void tick() {
+ if (WXTracing.isAvailable()) {
+ try {
+ prepare();
+ if (sThreadLocal.get().startNanos != 0L) {
+ WXLogUtils.w("Stopwatch", "Stopwatch is not reset");
+ }
+ sThreadLocal.get().startNanos = System.nanoTime();
+ sThreadLocal.get().startMillis = System.currentTimeMillis();
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+ }
+
+ public static void split(String fname) {
+ if (WXTracing.isAvailable()) {
+ try {
+ ProcessEvent event = new ProcessEvent();
+ long start = sThreadLocal.get().startMillis;
+ double millis = tackAndTick();
+ event.fname = fname;
+ event.duration = millis;
+ event.startMillis = start;
+ sThreadLocal.get().splits.add(event);
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ }
+ }
+
+ public static List<ProcessEvent> getProcessEvents() {
+ if (WXTracing.isAvailable()) {
+ tack();
+ List<ProcessEvent> existedEvents = sThreadLocal.get().splits;
+ sThreadLocal.get().splits = new ArrayList<>();
+ return existedEvents;
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ public static double tack() {
+ if (WXTracing.isAvailable()) {
+ try {
+ long startNanos = sThreadLocal.get().startNanos;
+ if (startNanos == 0L) {
+ WXLogUtils.w("Stopwatch", "Should call Stopwatch.tick() before Stopwatch.tack() called");
+ }
+ long nanos = System.nanoTime() - startNanos;
+ sThreadLocal.get().startNanos = 0L;
+ return nanosToMillis(nanos);
+ } catch (Throwable throwable) {
+ throwable.printStackTrace();
+ }
+ }
+ return -1;
+ }
+
+ public static long lastTickStamp() {
+ if (WXTracing.isAvailable()) {
+ try {
+ return sThreadLocal.get().startMillis;
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ }
+ return -1;
+ }
+
+ public static double tackAndTick() {
+ double ms = tack();
+ tick();
+ return ms;
+ }
+
+ public static double nanosToMillis(long nanos) {
+ return nanos / 1000000.0;
+ }
+
+ public static double millisUntilNow(long startNanos) {
+ return nanosToMillis(System.nanoTime() - startNanos);
+ }
+
+ public static class ProcessEvent {
+ public String fname;
+ public double duration;
+ public long startMillis;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java b/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java
new file mode 100644
index 0000000..7530322
--- /dev/null
+++ b/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java
@@ -0,0 +1,156 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package com.taobao.weex.tracing;
+
+import android.os.Looper;
+import android.util.SparseArray;
+
+import com.taobao.weex.WXEnvironment;
+import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.adapter.ITracingAdapter;
+import com.taobao.weex.utils.WXLogUtils;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+
+/**
+ * Created by moxun on 2017/6/6.
+ */
+
+public class WXTracing {
+ private static final AtomicInteger sIdGenerator = new AtomicInteger(0);
+
+ public static int nextId() {
+ return sIdGenerator.getAndIncrement();
+ }
+
+ public static boolean isAvailable() {
+ return WXEnvironment.isApkDebugable();
+ }
+
+ public static synchronized void submit(TraceEvent event) {
+ ITracingAdapter tracingAdapter = WXSDKManager.getInstance().getTracingAdapter();
+ if (tracingAdapter != null) {
+ if (event.iid == null) {
+ WXLogUtils.w("WXTracing", "Event " + event.fname + " missing instance id");
+ }
+ tracingAdapter.submitTracingEvent(event);
+ }
+ }
+
+ public static class TraceEvent {
+ public String fname;
+ public String tname;
+ public String ph;
+ public int traceId;
+ public long ts;
+ public String iid;
+ public String ref;
+ public String parentRef;
+ public String name;
+ public String classname;
+ public int parentId = -1;
+ public double duration;
+
+ /**
+ * Internal use
+ */
+ public SparseArray<TraceEvent> subEvents;
+ public String payload;
+ public double parseJsonTime;
+ public boolean isSegment;
+ public Map<String, Object> extParams;
+ public boolean firstScreenFinish;
+
+ private boolean submitted;
+
+ public TraceEvent() {
+ ts = System.currentTimeMillis();
+ traceId = nextId();
+ tname = currentThreadName();
+ }
+
+ public JSONObject toJSONObject() {
+ JSONObject object = new JSONObject();
+ try {
+ object.put("parentId", parentId);
+ object.put("ref", ref);
+ object.put("parentRef", parentRef);
+ object.put("className", classname);
+ object.put("ts", ts);
+ object.put("traceId", traceId);
+ object.put("iid", iid);
+ object.put("duration", duration);
+ object.put("fName", fname);
+ object.put("ph", ph);
+ object.put("name", name);
+ object.put("tName", tname);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ return object;
+ }
+
+ public void submit() {
+ if (!submitted) {
+ submitted = true;
+ WXTracing.submit(this);
+ } else {
+ WXLogUtils.w("WXTracing", "Event " + traceId + " has been submitted.");
+ }
+ }
+ }
+
+ public static String currentThreadName() {
+ Thread thread = Thread.currentThread();
+ String name = thread.getName();
+
+ if ("WeexJSBridgeThread".equals(name)) {
+ return "JSThread";
+ } else if ("WeeXDomThread".equals(name)) {
+ return "DOMThread";
+ } else if (Looper.getMainLooper() == Looper.myLooper()) {
+ return "UIThread";
+ }
+
+ return name;
+ }
+
+ public static TraceEvent newEvent(String fname, String instanceId, int parentId) {
+ WXTracing.TraceEvent traceEvent = new TraceEvent();
+ traceEvent.fname = fname;
+ traceEvent.iid = instanceId;
+ traceEvent.traceId = WXTracing.nextId();
+ traceEvent.parentId = parentId;
+ return traceEvent;
+ }
+
+ public static class TraceInfo {
+ public int rootEventId;
+ public long domQueueTime;
+ public long uiQueueTime;
+ public long domThreadStart = -1;
+ public long domThreadNanos;
+ public long uiThreadStart = -1;
+ public long uiThreadNanos;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 77e1b1b..edcc560 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
@@ -18,18 +18,21 @@
*/
package com.taobao.weex.ui;
+import android.os.SystemClock;
import android.support.annotation.Nullable;
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.dom.action.AbstractAddElementAction;
+import com.taobao.weex.dom.action.TraceableAction;
+import com.taobao.weex.tracing.Stopwatch;
+import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.component.WXComponent;
-import com.taobao.weex.utils.WXLogUtils;
import com.taobao.weex.utils.WXUtils;
import java.util.ArrayList;
@@ -104,18 +107,33 @@ public class WXRenderManager {
}
public void runOnThread(final String instanceId, final RenderAction action) {
- final long start = System.nanoTime();
- final String actionName = WXTracing.getFunctionName(action.getClass());
+ final long start = SystemClock.uptimeMillis();
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;
}
+ if (WXTracing.isAvailable() && action instanceof TraceableAction) {
+ ((TraceableAction) action).mUIQueueTime = SystemClock.uptimeMillis() - start;
+ }
+
+ long start = System.currentTimeMillis();
+ long uiNanos = System.nanoTime();
action.executeRender(getRenderContext(instanceId));
- WXLogUtils.e("Tracing", "Method " + actionName + ", Render time " + (System.nanoTime() - s) + " ns");
+
+ if (WXTracing.isAvailable()) {
+ uiNanos = System.nanoTime() - uiNanos;
+ if (action instanceof TraceableAction) {
+ if (!(action instanceof AbstractAddElementAction)) {
+ WXTracing.TraceEvent uiExecuteEvent = WXTracing.newEvent("UIExecute", instanceId, ((TraceableAction) action).mTracingEventId);
+ uiExecuteEvent.duration = Stopwatch.nanosToMillis(uiNanos);
+ uiExecuteEvent.ts = start;
+ uiExecuteEvent.submit();
+ }
+ ((TraceableAction) action).onFinishUIExecute();
+ }
+ }
}
}));
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 cc44e79..9864b1e 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
@@ -31,6 +31,7 @@ import android.os.Build;
import android.os.Message;
import android.support.annotation.CallSuper;
import android.support.annotation.CheckResult;
+import android.support.annotation.IntDef;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
@@ -76,6 +77,10 @@ import com.taobao.weex.utils.WXResourceUtils;
import com.taobao.weex.utils.WXUtils;
import com.taobao.weex.utils.WXViewUtils;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
@@ -1556,16 +1561,49 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi
WXSDKManager.getInstance().getWXDomManager().sendMessage(message);
}
- public void onRenderFinish() {
- if (isLazy()) {
- return;
+ public static final int STATE_DOM_FINISH = 0;
+ public static final int STATE_UI_FINISH = 1;
+ public static final int STATE_ALL_FINISH = 2;
+ @IntDef({STATE_DOM_FINISH, STATE_UI_FINISH, STATE_ALL_FINISH})
+ @Retention(RetentionPolicy.SOURCE)
+ @Target(ElementType.PARAMETER)
+ public @interface RenderState {}
+
+ @CallSuper
+ public void onRenderFinish(@RenderState int state) {
+ if (WXTracing.isAvailable()) {
+ double domTime = Stopwatch.nanosToMillis(((WXDomObject) mDomObj).mDomThreadNanos + mTraceInfo.domThreadNanos);
+ double uiTime = Stopwatch.nanosToMillis(mTraceInfo.uiThreadNanos);
+ if (state == STATE_ALL_FINISH || state == STATE_DOM_FINISH) {
+ WXTracing.TraceEvent domEvent = WXTracing.newEvent("DomExecute", getInstanceId(), mTraceInfo.rootEventId);
+ domEvent.ph = "X";
+ domEvent.duration = domTime;
+ domEvent.ts = mTraceInfo.domThreadStart;
+ domEvent.tname = "DOMThread";
+ domEvent.name = getDomObject().getType();
+ domEvent.classname = getClass().getSimpleName();
+ if (getParent() != null) {
+ domEvent.parentRef = getParent().getRef();
+ }
+ domEvent.submit();
+ }
+
+ if (state == STATE_ALL_FINISH || state == STATE_UI_FINISH) {
+ if (mTraceInfo.uiThreadStart != -1) {
+ WXTracing.TraceEvent uiEvent = WXTracing.newEvent("UIExecute", getInstanceId(), mTraceInfo.rootEventId);
+ uiEvent.ph = "X";
+ uiEvent.duration = uiTime;
+ uiEvent.ts = mTraceInfo.uiThreadStart;
+ uiEvent.name = getDomObject().getType();
+ uiEvent.classname = getClass().getSimpleName();
+ if (getParent() != null) {
+ uiEvent.parentRef = getParent().getRef();
+ }
+ uiEvent.submit();
+ } else {
+ WXLogUtils.w("onRenderFinish", "createView() not called");
+ }
+ }
}
- 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/102f2ed0/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
index afdad86..871b18a 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
@@ -93,6 +93,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
@Override
public void applyLayoutAndEvent(WXComponent component) {
+ long startNanos = System.nanoTime();
if(!isLazy()) {
if (component == null) {
component = this;
@@ -105,6 +106,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
}
}
+ mTraceInfo.uiThreadNanos += (System.nanoTime() - startNanos);
}
/**
@@ -141,6 +143,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
}
@Override
public void bindData(WXComponent component) {
+ long startNanos = System.nanoTime();
if(!isLazy()) {
if (component == null) {
component = this;
@@ -151,6 +154,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
getChild(i).bindData(((WXVContainer)component).getChild(i));
}
}
+ mTraceInfo.uiThreadNanos += (System.nanoTime() - startNanos);
}
@Override
@@ -240,6 +244,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
}
public void addChild(WXComponent child, int index) {
+ long startNanos = System.nanoTime();
if (child == null || index < -1) {
return;
}
@@ -250,6 +255,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
} else {
mChildren.add(index, child);
}
+ mTraceInfo.uiThreadNanos += (System.nanoTime() - startNanos);
}
public final int indexOf(WXComponent comp){
@@ -257,6 +263,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
}
public void createChildViewAt(int index){
+ long startNanos = System.nanoTime();
int indexToCreate = index;
if(indexToCreate < 0){
indexToCreate = childCount()-1;
@@ -269,6 +276,7 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
if(!child.isVirtualComponent()){
addSubView(child.getHostView(),indexToCreate);
}
+ mTraceInfo.uiThreadNanos += (System.nanoTime() - startNanos);
}
protected void addSubView(View child, int index) {
@@ -429,6 +437,16 @@ public abstract class WXVContainer<T extends ViewGroup> extends WXComponent<T> {
}
}
+ @Override
+ public void onRenderFinish(@RenderState int state) {
+ for (int i = 0; i < getChildCount(); i++) {
+ WXComponent child = getChild(i);
+ child.mTraceInfo.uiQueueTime = mTraceInfo.uiQueueTime;
+ child.onRenderFinish(state);
+ }
+ super.onRenderFinish(state);
+ }
+
/********************************
* end hook Activity life cycle callback
********************************************************/
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/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 9418a1f..08c6c8e 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,7 +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();
+ component.onRenderFinish(STATE_UI_FINISH);
}
if (mDragHelper == null || !mDragHelper.isDraggable()) {
return;
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
index 1107003..43246ea 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXLogUtils.java
@@ -35,13 +35,12 @@ public class WXLogUtils {
public static final String WEEX_TAG = "weex";
public static final String WEEX_PERF_TAG = "weex_perf";
- public static boolean isShowLineNumber = false;
-
private static final String CLAZZ_NAME_DEBUG_TOOL = "com.taobao.weex.WXDebugTool";
private static final String CLAZZ_NAME_LOG_UTIL = "com.taobao.weex.devtools.common.LogUtil";
private static StringBuilder builder = new StringBuilder(50);
private static HashMap<String, Class> clazzMaps = new HashMap<>(2);
+ private static JsLogWatcher jsLogWatcher;
static {
clazzMaps.put(CLAZZ_NAME_DEBUG_TOOL, loadClass(CLAZZ_NAME_DEBUG_TOOL));
@@ -65,14 +64,13 @@ public class WXLogUtils {
if (WXEnvironment.isApkDebugable() || WXEnvironment.isPerf()) {
builder.setLength(0);
builder.append("[render time]").append(type).append(":").append(time);
- Log.d(WEEX_PERF_TAG, getLineNumber() + builder.substring(0));
+ Log.d(WEEX_PERF_TAG, builder.substring(0));
writeConsoleLog("debug", builder.substring(0));
}
}
private static void log(String tag, String msg, LogLevel level){
if (WXEnvironment.isApkDebugable() && msg != null && WXEnvironment.sLogLevel.compare(level) >= 0) {
- msg = getLineNumber() + msg;
Log.println(level.getPriority(),tag, msg);
writeConsoleLog(level.getName(), msg);
sendLog(level, msg);
@@ -109,8 +107,22 @@ public class WXLogUtils {
public static void d(String tag, String msg) {
if (WXEnvironment.isApkDebugable() && !TextUtils.isEmpty(msg) && WXEnvironment.sLogLevel.compare(LogLevel.DEBUG) >= 0) {
- msg = getLineNumber() + msg;
Log.d(tag, msg);
+
+ if ("jsLog".equals(tag) && jsLogWatcher != null) {
+ if (msg.endsWith("__DEBUG")) {
+ jsLogWatcher.onJsLog(Log.DEBUG, msg.replace("__DEBUG", ""));
+ } else if (msg.endsWith("__INFO")) {
+ jsLogWatcher.onJsLog(Log.DEBUG, msg.replace("__INFO", ""));
+ } else if (msg.endsWith("__WARN")) {
+ jsLogWatcher.onJsLog(Log.DEBUG, msg.replace("__WARN", ""));
+ } else if (msg.endsWith("__ERROR")) {
+ jsLogWatcher.onJsLog(Log.DEBUG, msg.replace("__ERROR", ""));
+ } else {
+ jsLogWatcher.onJsLog(Log.DEBUG, msg);
+ }
+ }
+
/** This log method will be invoked from jni code, so try to extract loglevel from message. **/
writeConsoleLog("debug", tag + ":" + msg);
if(msg.contains(" | __")){
@@ -268,22 +280,11 @@ public class WXLogUtils {
}
}
- /**
- * Why the index is 2 ?
- * StackTrace:
- * 0 = com.taobao.weex.utils.WXLogUtils.getLineNumber
- * 1 = com.taobao.weex.utils.WXLogUtils#x
- * 2 = the actual caller
- * …… more stack trace element
- * */
- private static String getLineNumber() {
- if (!isShowLineNumber) {
- return "";
- }
- StackTraceElement[] stackTrace = new Throwable().getStackTrace();
- final int index = 2;
- String className = stackTrace[index].getFileName();
- int lineNum = stackTrace[index].getLineNumber();
- return "(" + className + ":" + lineNum + ") ";
+ public static void setJsLogWatcher(JsLogWatcher watcher) {
+ jsLogWatcher = watcher;
+ }
+
+ public interface JsLogWatcher {
+ void onJsLog(int level, String log);
}
}
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/102f2ed0/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
index ece6e0e..3fde10a 100644
--- a/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
+++ b/android/sdk/src/test/java/com/taobao/weex/utils/WXLogUtilsTest.java
@@ -46,7 +46,6 @@ public class WXLogUtilsTest {
@Before
public void setUp() throws Exception {
- WXLogUtils.isShowLineNumber = true;
PowerMockito.mockStatic(WXEnvironment.class);
PowerMockito.when(WXEnvironment.isApkDebugable()).thenReturn(true);
}
[11/16] incubator-weex git commit: Revert: * [android] fix Jni crash
due to emoji
Posted by mi...@apache.org.
Revert: * [android] fix Jni crash due to emoji
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/4b0a600e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/4b0a600e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/4b0a600e
Branch: refs/heads/0.16-dev
Commit: 4b0a600e8e5c24e7f6434a7c66512e51f5bbf781
Parents: d258736
Author: misakuo <mi...@apache.org>
Authored: Thu Aug 10 14:57:03 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Thu Aug 10 14:57:03 2017 +0800
----------------------------------------------------------------------
android/sdk/libs/armeabi/libweexjsc.so | Bin 7570392 -> 7570504 bytes
android/sdk/libs/x86/libweexjsc.so | Bin 7570392 -> 12121924 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4b0a600e/android/sdk/libs/armeabi/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/armeabi/libweexjsc.so b/android/sdk/libs/armeabi/libweexjsc.so
index a365bed..41b1ee8 100755
Binary files a/android/sdk/libs/armeabi/libweexjsc.so and b/android/sdk/libs/armeabi/libweexjsc.so differ
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/4b0a600e/android/sdk/libs/x86/libweexjsc.so
----------------------------------------------------------------------
diff --git a/android/sdk/libs/x86/libweexjsc.so b/android/sdk/libs/x86/libweexjsc.so
index a365bed..c45672a 100755
Binary files a/android/sdk/libs/x86/libweexjsc.so and b/android/sdk/libs/x86/libweexjsc.so differ
[15/16] incubator-weex git commit: * [android] make
WXSDKManager#setIWXJSExceptionAdapter public
Posted by mi...@apache.org.
* [android] make WXSDKManager#setIWXJSExceptionAdapter public
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/71b0792e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/71b0792e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/71b0792e
Branch: refs/heads/0.16-dev
Commit: 71b0792e2208d631f80704443eaf4f72a015f727
Parents: 6743256
Author: misakuo <mi...@apache.org>
Authored: Tue Aug 15 11:11:50 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Tue Aug 15 11:11:50 2017 +0800
----------------------------------------------------------------------
android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/71b0792e/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
index 10b1873..e6511d4 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java
@@ -322,7 +322,7 @@ public class WXSDKManager {
return mIWXJSExceptionAdapter;
}
- void setIWXJSExceptionAdapter(IWXJSExceptionAdapter IWXJSExceptionAdapter) {
+ public void setIWXJSExceptionAdapter(IWXJSExceptionAdapter IWXJSExceptionAdapter) {
mIWXJSExceptionAdapter = IWXJSExceptionAdapter;
}
[05/16] incubator-weex git commit: * [android] add PerformanceActivity
Posted by mi...@apache.org.
* [android] add PerformanceActivity
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/e2d8a7b1
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/e2d8a7b1
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/e2d8a7b1
Branch: refs/heads/0.16-dev
Commit: e2d8a7b1e6a42a7191b23def69b10a572e48280e
Parents: afeedd9
Author: misakuo <mi...@apache.org>
Authored: Tue Jul 25 16:08:58 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Tue Jul 25 16:08:58 2017 +0800
----------------------------------------------------------------------
.../com/alibaba/weex/PerformanceActivity.java | 121 +++++++++++++++++++
1 file changed, 121 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/e2d8a7b1/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java
----------------------------------------------------------------------
diff --git a/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java
new file mode 100644
index 0000000..ad88546
--- /dev/null
+++ b/android/playground/app/src/main/java/com/alibaba/weex/PerformanceActivity.java
@@ -0,0 +1,121 @@
+package com.alibaba.weex;
+
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.alibaba.weex.performance.EnvironmentFragment;
+import com.alibaba.weex.performance.EventOverviewFragment;
+
+public class PerformanceActivity extends WXBaseActivity {
+
+ private LinearLayout segmentHost;
+
+ public static void start(Context context, int instanceId) {
+ Intent intent = new Intent(context, PerformanceActivity.class);
+ intent.putExtra("instanceId", instanceId);
+ context.startActivity(intent);
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_performance);
+ segmentHost = (LinearLayout) findViewById(R.id.segment_control);
+ addTab("页面性能", true, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchFragment(EventOverviewFragment.getInstance(getIntent().getIntExtra("instanceId", -1)));
+ }
+ });
+
+ addTab("DOM树", false, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ }
+ });
+
+ addTab("JS LOG", false, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+
+ }
+ });
+
+ addTab("环境变量", false, new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ switchFragment(new EnvironmentFragment());
+ }
+ });
+ }
+
+ private void switchFragment(Fragment fragment) {
+ getSupportFragmentManager()
+ .beginTransaction()
+ .replace(R.id.fragment_container, fragment)
+ .commitAllowingStateLoss();
+ }
+
+ @Override
+ protected void onResumeFragments() {
+ super.onResumeFragments();
+ FragmentManager fragmentManager = getSupportFragmentManager();
+
+ Fragment fragment = fragmentManager.findFragmentById(R.id.fragment_container);
+ if (fragment == null) {
+ fragmentManager
+ .beginTransaction()
+ .add(R.id.fragment_container, EventOverviewFragment.getInstance(getIntent().getIntExtra("instanceId", -1)))
+ .commitAllowingStateLoss();
+ }
+ }
+
+ private void addTab(String title, final boolean selected, final View.OnClickListener listener) {
+ final TextView textView = new TextView(this);
+ textView.setText(title);
+ LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
+ lp.weight = 1;
+ lp.setMargins(1, 1, 1, 1);
+ if (selected) {
+ textView.setBackgroundColor(Color.TRANSPARENT);
+ } else {
+ textView.setBackgroundColor(Color.WHITE);
+ }
+ textView.setGravity(Gravity.CENTER);
+ textView.setLayoutParams(lp);
+ textView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!v.isSelected() && v instanceof TextView) {
+ listener.onClick(v);
+ for (int i = 0; i < segmentHost.getChildCount(); i++) {
+ segmentHost.getChildAt(i).setSelected(false);
+ segmentHost.getChildAt(i).setBackgroundColor(Color.WHITE);
+ ((TextView) segmentHost.getChildAt(i)).setTextColor(Color.parseColor("#1E90FF"));
+ }
+ v.setSelected(true);
+ v.setBackgroundColor(Color.TRANSPARENT);
+ ((TextView) v).setTextColor(Color.WHITE);
+ }
+ }
+ });
+ textView.setSelected(selected);
+ if (selected) {
+ textView.setTextColor(Color.WHITE);
+ } else {
+ textView.setTextColor(Color.parseColor("#1E90FF"));
+ }
+ segmentHost.addView(textView);
+ }
+}
[16/16] incubator-weex git commit: Merge remote-tracking branch
'upstream/pr586' into apache-0.16-dev
Posted by mi...@apache.org.
Merge remote-tracking branch 'upstream/pr586' into apache-0.16-dev
# Conflicts:
# android/sdk/libs/x86/libweexjsc.so
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/20741567
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/20741567
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/20741567
Branch: refs/heads/0.16-dev
Commit: 20741567969ef7910df7492b7ac6319318c6613c
Parents: 71b0792 57802c0
Author: misakuo <mi...@apache.org>
Authored: Tue Aug 15 17:32:22 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Tue Aug 15 17:32:22 2017 +0800
----------------------------------------------------------------------
.travis.yml | 8 +-
android/build.gradle | 8 +-
android/sdk/libs/x86/libweexjsc.so | Bin 12121924 -> 12121924 bytes
.../java/com/taobao/weex/common/Constants.java | 3 +
.../java/com/taobao/weex/dom/WXDomObject.java | 15 +-
.../com/taobao/weex/dom/WXTextDomObject.java | 91 +-
.../taobao/weex/dom/action/AnimationAction.java | 1 +
.../weex/dom/action/GetComponentRectAction.java | 12 +
.../ui/animation/CameraDistanceProperty.java | 54 +
.../weex/ui/animation/WXAnimationBean.java | 86 +-
.../ui/component/AbstractEditComponent.java | 2 +-
.../weex/ui/component/ContentMeasurable.java | 29 +
.../taobao/weex/ui/component/WXComponent.java | 16 -
.../taobao/weex/ui/component/WXScroller.java | 16 +-
.../com/taobao/weex/ui/component/WXSlider.java | 4 +-
.../ui/component/list/BasicListComponent.java | 18 +-
.../java/com/taobao/weex/utils/WXViewUtils.java | 4 +-
doc/source/_posts/arkit.md | 112 +
doc/source/_posts/cn/hello.md | 6 -
doc/source/_posts/hello_world.md | 7 -
doc/source/_posts/test.md | 14 -
doc/source/cn/blog/index.md | 4 -
.../cn/references/advanced/extend-to-ios.md | 4 +-
.../advanced/integrate-devtool-to-android.md | 86 +-
doc/source/cn/references/common-style.md | 2 +
doc/source/cn/references/components/text.md | 4 +-
doc/source/cn/references/modules/animation.md | 2 +-
doc/source/references/advanced/extend-to-ios.md | 5 +-
doc/source/references/common-style.md | 2 +
doc/source/references/components/text.md | 4 +-
doc/source/references/modules/animation.md | 2 +-
doc/themes/weex/layout/_partial/header.ejs | 1 +
.../weex/layout/_partial/post/summary.ejs | 1 +
doc/themes/weex/source/css/blog.scss | 3 +
doc/themes/weex/source/css/media-queries.scss | 1 +
doc/themes/weex/source/css/partial/header.scss | 6 +-
examples/vue/modules/websocket.vue | 22 +-
html5/runtime/normalize.js | 13 +-
html5/runtime/task-center.js | 6 +-
.../WeexDemo.xcodeproj/project.pbxproj | 6 +
ios/playground/WeexDemo/AppDelegate.m | 2 +-
.../WeexDemo/WXExtendCallNativeTest.h | 25 +
.../WeexDemo/WXExtendCallNativeTest.m | 47 +
ios/sdk/WeexSDK.xcodeproj/project.pbxproj | 56 +-
.../WeexSDK/Sources/Bridge/WXBridgeContext.m | 35 +-
ios/sdk/WeexSDK/Sources/Bridge/WXJSCoreBridge.m | 23 +-
.../Sources/Component/WXComponent_internal.h | 12 +
.../WeexSDK/Sources/Component/WXListComponent.m | 4 +-
.../Sources/Component/WXScrollerComponent.m | 3 +-
.../WeexSDK/Sources/Component/WXTextComponent.m | 5 +-
ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.h | 4 +
ios/sdk/WeexSDK/Sources/Debug/WXDebugTool.m | 10 +
.../Sources/Display/WXComponent+Display.m | 16 +-
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.h | 10 +
ios/sdk/WeexSDK/Sources/Engine/WXSDKEngine.m | 6 +
.../WeexSDK/Sources/Layout/WXComponent+Layout.m | 3 +-
.../WeexSDK/Sources/Loader/WXWebSocketLoader.h | 2 +-
.../WeexSDK/Sources/Loader/WXWebSocketLoader.m | 2 +-
.../WeexSDK/Sources/Manager/WXBridgeManager.m | 4 +
.../Sources/Manager/WXComponentFactory.h | 1 +
.../Sources/Manager/WXComponentFactory.m | 23 +
.../Sources/Manager/WXComponentManager.m | 18 +-
.../Sources/Manager/WXExtendCallNativeManager.h | 26 +
.../Sources/Manager/WXExtendCallNativeManager.m | 80 +
.../WeexSDK/Sources/Manager/WXModuleFactory.h | 6 +
.../WeexSDK/Sources/Manager/WXModuleFactory.m | 24 +
.../WeexSDK/Sources/Manager/WXTracingManager.h | 33 +-
.../WeexSDK/Sources/Manager/WXTracingManager.m | 169 +-
ios/sdk/WeexSDK/Sources/Model/WXComponent.m | 68 +-
ios/sdk/WeexSDK/Sources/Model/WXSDKInstance.m | 6 +-
.../WeexSDK/Sources/Module/WXAnimationLayout.h | 49 -
.../WeexSDK/Sources/Module/WXAnimationLayout.m | 115 -
.../WeexSDK/Sources/Module/WXAnimationModule.h | 2 +
.../WeexSDK/Sources/Module/WXAnimationModule.m | 88 +-
ios/sdk/WeexSDK/Sources/Module/WXStreamModule.m | 13 +
ios/sdk/WeexSDK/Sources/Module/WXTransition.h | 43 +
ios/sdk/WeexSDK/Sources/Module/WXTransition.m | 311 +
.../WeexSDK/Sources/Module/WXWebSocketModule.m | 16 +-
ios/sdk/WeexSDK/Sources/Monitor/WXMonitor.m | 9 +
.../Sources/Protocol/WXAppMonitorProtocol.h | 2 +
.../Protocol/WXExtendCallNativeProtocol.h | 47 +
.../Sources/Protocol/WXTracingProtocol.h | 29 +
ios/sdk/WeexSDK/Sources/Utility/WXConvert.m | 3 +-
ios/sdk/WeexSDK/Sources/Utility/WXUtility.h | 12 +
ios/sdk/WeexSDK/Sources/Utility/WXUtility.m | 22 +
.../Sources/View/WXComponent+ViewManagement.m | 1 -
.../Sources/WebSocket/WXWebSocketDefaultImpl.m | 2 +-
ios/sdk/WeexSDK/Sources/WeexSDK.h | 2 +
package.json | 4 +-
packages/weex-js-framework/index.js | 16073 +++++++++--------
packages/weex-js-framework/index.min.js | 2 +-
packages/weex-js-framework/package.json | 2 +-
packages/weex-js-runtime/index.js | 1436 +-
packages/weex-js-runtime/index.min.js | 2 +-
packages/weex-js-runtime/index.min.js.gz | Bin 12588 -> 13215 bytes
packages/weex-js-runtime/package.json | 2 +-
pre-build/native-bundle-main.js | 16 +-
test/run.sh | 18 +-
98 files changed, 11020 insertions(+), 8704 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/20741567/android/sdk/src/main/java/com/taobao/weex/dom/WXDomObject.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/20741567/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/20741567/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java
----------------------------------------------------------------------
[13/16] incubator-weex git commit: * [android] remove some methods
Posted by mi...@apache.org.
* [android] remove some methods
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/1f028a66
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/1f028a66
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/1f028a66
Branch: refs/heads/0.16-dev
Commit: 1f028a6614266874eaa81304a5859aa4d16a9656
Parents: b80a7b5
Author: misakuo <mi...@apache.org>
Authored: Mon Aug 14 14:48:26 2017 +0800
Committer: misakuo <mi...@apache.org>
Committed: Mon Aug 14 14:48:26 2017 +0800
----------------------------------------------------------------------
.../taobao/weex/dom/DOMActionContextImpl.java | 2 +-
.../java/com/taobao/weex/tracing/WXTracing.java | 27 --------------------
2 files changed, 1 insertion(+), 28 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1f028a66/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 d18cea8..5a2e88d 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
@@ -180,7 +180,7 @@ class DOMActionContextImpl implements DOMActionContext {
if (WXTracing.isAvailable()) {
WXTracing.TraceEvent batchEvent = WXTracing.newEvent("domBatch", mInstanceId, -1);
- batchEvent.duration = Stopwatch.nanosToMillis(System.nanoTime() - startNanos);
+ batchEvent.duration = Stopwatch.millisUntilNow(startNanos);
batchEvent.ts = start;
batchEvent.ph = "X";
WXTracing.submit(batchEvent);
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/1f028a66/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java
----------------------------------------------------------------------
diff --git a/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java b/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java
index 7530322..da1fc4f 100644
--- a/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java
+++ b/android/sdk/src/main/java/com/taobao/weex/tracing/WXTracing.java
@@ -26,9 +26,6 @@ import com.taobao.weex.WXSDKManager;
import com.taobao.weex.adapter.ITracingAdapter;
import com.taobao.weex.utils.WXLogUtils;
-import org.json.JSONException;
-import org.json.JSONObject;
-
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@@ -50,9 +47,6 @@ public class WXTracing {
public static synchronized void submit(TraceEvent event) {
ITracingAdapter tracingAdapter = WXSDKManager.getInstance().getTracingAdapter();
if (tracingAdapter != null) {
- if (event.iid == null) {
- WXLogUtils.w("WXTracing", "Event " + event.fname + " missing instance id");
- }
tracingAdapter.submitTracingEvent(event);
}
}
@@ -89,27 +83,6 @@ public class WXTracing {
tname = currentThreadName();
}
- public JSONObject toJSONObject() {
- JSONObject object = new JSONObject();
- try {
- object.put("parentId", parentId);
- object.put("ref", ref);
- object.put("parentRef", parentRef);
- object.put("className", classname);
- object.put("ts", ts);
- object.put("traceId", traceId);
- object.put("iid", iid);
- object.put("duration", duration);
- object.put("fName", fname);
- object.put("ph", ph);
- object.put("name", name);
- object.put("tName", tname);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- return object;
- }
-
public void submit() {
if (!submitted) {
submitted = true;