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

Reply via email to