Repository: incubator-weex Updated Branches: refs/heads/master 3366d33bc -> cf531a167
[WEEX-281][android] Auto Startup Time Quick Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/ffbf07c6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/ffbf07c6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/ffbf07c6 Branch: refs/heads/master Commit: ffbf07c6e1e08fdfb9c5b81c2a520883077650b1 Parents: ea2e12f Author: jianbai.gbj <jianbai....@alibaba-inc.com> Authored: Tue Apr 17 11:58:10 2018 +0800 Committer: jianbai.gbj <jianbai....@alibaba-inc.com> Committed: Sat Apr 28 15:37:45 2018 +0800 ---------------------------------------------------------------------- .../java/com/taobao/weex/WXEnvironment.java | 5 ++++ .../com/taobao/weex/bridge/WXBridgeManager.java | 24 +++++++++++++++--- .../com/taobao/weex/bridge/WXModuleManager.java | 3 ++- .../weex/ui/ExternalLoaderComponentHolder.java | 2 +- .../taobao/weex/ui/SimpleComponentHolder.java | 2 +- .../com/taobao/weex/ui/WXComponentRegistry.java | 4 +++ .../taobao/weex/ui/component/WXComponent.java | 8 ++++-- .../weex/ui/config/AutoScanConfigRegister.java | 26 ++++++++++++++++++++ 8 files changed, 66 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/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 96ca990..8903a15 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXEnvironment.java @@ -84,6 +84,11 @@ public class WXEnvironment { /** from init to sdk-ready **/ public static long sSDKInitTime =0; + /** + * component and modules ready + * */ + public static long sComponentsAndModulesReadyTime = 0; + public static LogLevel sLogLevel = LogLevel.DEBUG; private static boolean isApkDebug = true; public static boolean isPerf = false; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/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 f931ccf..c3a0826 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 @@ -2115,6 +2115,7 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu execRegisterFailTask(); WXEnvironment.JsFrameworkInit = true; registerDomModule(); + trackComponentAndModulesTime(); String reinitInfo = ""; if (reInitCount > 1) { reinitInfo = "reinit Framework:"; @@ -2155,6 +2156,17 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu } } + private void trackComponentAndModulesTime() { + post(new Runnable() { + @Override + public void run() { + WXEnvironment.sComponentsAndModulesReadyTime = System.currentTimeMillis() - WXEnvironment.sSDKInitStart; + WXLogUtils.renderPerformanceLog("ComponentModulesReadyTime", WXEnvironment.sComponentsAndModulesReadyTime); + WXLogUtils.d("ComponentModulesReadyTime " + WXEnvironment.sComponentsAndModulesReadyTime); + } + }); + } + @SuppressWarnings("unchecked") private void invokeCallJSBatch(Message message) { if (mNextTickTasks.isEmpty() || !isJSFrameworkInit()) { @@ -2293,12 +2305,18 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu || components.size() == 0) { return; } - post(new Runnable() { + Runnable runnable = new Runnable() { @Override public void run() { invokeRegisterComponents(components, mRegisterComponentFailList); } - }, null); + }; + + if(isJSThread() && isJSFrameworkInit()){ + runnable.run(); + }else{ + post(runnable, null); + } } public void execJSService(final String service) { @@ -2359,9 +2377,9 @@ public void invokeDestoryInstance(String instanceId, String namespace, String fu WXModuleManager.resetModuleState(module, true); WXLogUtils.e("[WXBridgeManager]invokeRegisterModules METHOD_REGISTER_MODULES success module:" + module); } - } } catch (Throwable e) { + WXLogUtils.e("Weex [invokeRegisterModules]", e); } } catch (Throwable e) { WXExceptionUtils.commitCriticalExceptionRT(null, http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java index 6bc4af4..32bb895 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java @@ -34,6 +34,7 @@ import com.taobao.weex.common.WXModule; import com.taobao.weex.dom.DOMAction; import com.taobao.weex.dom.WXDomModule; import com.taobao.weex.dom.action.Actions; +import com.taobao.weex.ui.config.AutoScanConfigRegister; import com.taobao.weex.ui.config.ConfigModuleFactory; import com.taobao.weex.ui.module.WXTimerModule; import com.taobao.weex.utils.WXExceptionUtils; @@ -92,7 +93,7 @@ public class WXModuleManager { } catch (Throwable e) { } - + AutoScanConfigRegister.preLoad(factory); //execute task in js thread to make sure register order is same as the order invoke register method. WXBridgeManager.getInstance() .post(new Runnable() { http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java index fb487dc..52d71f6 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/ExternalLoaderComponentHolder.java @@ -94,7 +94,7 @@ public class ExternalLoaderComponentHolder implements IFComponentHolder { } @Override - public String[] getMethods() { + public synchronized String[] getMethods() { if(mMethodInvokers == null && !generate()){ //generate failed return new String[0]; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java b/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java index 8d548ab..b9e8f70 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/SimpleComponentHolder.java @@ -204,7 +204,7 @@ public class SimpleComponentHolder implements IFComponentHolder{ } @Override - public String[] getMethods() { + public synchronized String[] getMethods() { if(mMethodInvokers == null){ generate(); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java index 39e3b89..57289dc 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXComponentRegistry.java @@ -23,6 +23,7 @@ import android.text.TextUtils; import com.taobao.weex.WXSDKManager; import com.taobao.weex.bridge.WXBridgeManager; import com.taobao.weex.common.WXException; +import com.taobao.weex.ui.config.AutoScanConfigRegister; import com.taobao.weex.utils.WXLogUtils; import java.util.ArrayList; @@ -44,6 +45,9 @@ public class WXComponentRegistry { return false; } + //register component + AutoScanConfigRegister.preLoad(holder); + //execute task in js thread to make sure register order is same as the order invoke register method. WXBridgeManager.getInstance() .post(new Runnable() { http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/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 503e495..0176185 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 @@ -926,7 +926,9 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi protected void updateBoxShadow() { if (!BoxShadowUtil.isBoxShadowEnabled()) { - WXLogUtils.w("BoxShadow", "box-shadow disabled"); + if(WXEnvironment.isApkDebugable()) { + WXLogUtils.w("BoxShadow", "box-shadow disabled"); + } return; } @@ -994,7 +996,9 @@ public abstract class WXComponent<T extends View> implements IWXObject, IWXActi protected void clearBoxShadow() { if (!BoxShadowUtil.isBoxShadowEnabled()) { - WXLogUtils.w("BoxShadow", "box-shadow disabled"); + if(WXEnvironment.isApkDebugable()) { + WXLogUtils.w("BoxShadow", "box-shadow disabled"); + } return; } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffbf07c6/android/sdk/src/main/java/com/taobao/weex/ui/config/AutoScanConfigRegister.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/config/AutoScanConfigRegister.java b/android/sdk/src/main/java/com/taobao/weex/ui/config/AutoScanConfigRegister.java index 5c35de6..597fb4d 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/config/AutoScanConfigRegister.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/config/AutoScanConfigRegister.java @@ -26,10 +26,12 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.taobao.weex.WXEnvironment; import com.taobao.weex.WXSDKEngine; +import com.taobao.weex.bridge.JavascriptInvokable; import com.taobao.weex.utils.WXFileUtils; import com.taobao.weex.utils.WXLogUtils; import java.io.IOException; +import java.util.concurrent.ConcurrentLinkedQueue; /** * Created by furture on 2018/2/7. @@ -40,6 +42,20 @@ public class AutoScanConfigRegister { public static final String TAG = "WeexScanConfigRegister"; + private static ConcurrentLinkedQueue<JavascriptInvokable> autoLoadClass = new ConcurrentLinkedQueue<>(); + + /** + * pre load module class and methods when so&jsf init + **/ + public static void preLoad(JavascriptInvokable invokable){ + if(invokable instanceof ConfigModuleFactory){ + return; + } + if(invokable instanceof ConfigComponentHolder){ + return; + } + autoLoadClass.add(invokable); + } /** * auto scan config files and do auto config from files, none need center register @@ -49,6 +65,16 @@ public class AutoScanConfigRegister { @Override public void run() { doScanConfigSync(); + JavascriptInvokable invokable = autoLoadClass.poll(); + int count = 0; + while (invokable != null){ + invokable.getMethods(); + invokable = autoLoadClass.poll(); + count++; + } + if(WXEnvironment.isApkDebugable()){ + WXLogUtils.d(TAG, "auto preload class's methods count " + count); + } } }); thread.setName("AutoScanConfigRegister");