YorkShen closed pull request #1422: [WEEX-560][Android] fix null point of apm 
&& report initJSFM fail info
URL: https://github.com/apache/incubator-weex/pull/1422
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

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 feb843b6ff..b52fe1fda1 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
@@ -102,6 +102,7 @@
   public static final String METHOD_NOTIFY_TRIM_MEMORY = "notifyTrimMemory";
   public static final String METHOD_NOTIFY_SERIALIZE_CODE_CACHE =
           "notifySerializeCodeCache";
+  public static final String METHOD_CREATE_INSTANCE_CONTEXT = 
"createInstanceContext";
 
   public static final String KEY_METHOD = "method";
   public static final String KEY_ARGS = "args";
@@ -1628,8 +1629,12 @@ private void invokeInitFramework(Message msg) {
     }
   }
 
+  public static long sInitFrameWorkTimeOrigin;
+  public static StringBuilder sInitFrameWorkMsg = new StringBuilder();
+
   private void initFramework(String framework) {
     if (WXSDKEngine.isSoInitialized() && !isJSFrameworkInit()) {
+      sInitFrameWorkTimeOrigin = System.currentTimeMillis();
       if (TextUtils.isEmpty(framework)) {
         // if (WXEnvironment.isApkDebugable()) {
         WXLogUtils.d("weex JS framework from assets");
@@ -1639,9 +1644,11 @@ private void initFramework(String framework) {
         } else {
           framework = WXFileUtils.loadAsset("weex-main-jsfm.js", 
WXEnvironment.getApplication());
         }
+        sInitFrameWorkMsg.append("| weex JS framework from assets, 
isSandBoxContext: ").append(isSandBoxContext);
       }
       if (TextUtils.isEmpty(framework)) {
         setJSFrameworkInit(false);
+        sInitFrameWorkMsg.append("| framework isEmpty ");
         WXExceptionUtils.commitCriticalExceptionRT(null, 
WXErrorCode.WX_ERR_JS_FRAMEWORK,
                 "initFramework", "framework is empty!! ", null);
         return;
@@ -1666,6 +1673,7 @@ private void initFramework(String framework) {
         } catch (Exception e) {
           e.printStackTrace();
         }
+        sInitFrameWorkMsg.append(" | pieSupport:").append(pieSupport);
         WXLogUtils.d("[WXBridgeManager] initFrameworkEnv crashFile:" + 
crashFile + " pieSupport:" + pieSupport);
         // extends initFramework
         if (mWXBridge.initFrameworkEnv(framework, assembleDefaultOptions(), 
crashFile, pieSupport) == INIT_FRAMEWORK_OK) {
@@ -1683,39 +1691,20 @@ private void initFramework(String framework) {
           WXEnvironment.JsFrameworkInit = true;
           registerDomModule();
           trackComponentAndModulesTime();
-          String reinitInfo = "";
-          if (reInitCount > 1) {
-            reinitInfo = "reinit Framework:";
-//            WXExceptionUtils.commitCriticalExceptionRT(null, 
WXErrorCode.WX_JS_FRAMEWORK_REINIT_SUCCESS,
-//                    "initFramework", reinitInfo + "success", null);
-          } else {
-//            WXExceptionUtils.commitCriticalExceptionRT(null, 
WXErrorCode.WX_JS_FRAMEWORK_INIT_SUCCESS,
-//                    "initFramework", reinitInfo + "success", null);
-          }
         } else {
+          sInitFrameWorkMsg.append(" | ExecuteJavaScript fail, 
reInitCount").append(reInitCount);
           if (reInitCount > 1) {
             WXLogUtils.e("[WXBridgeManager] invokeReInitFramework  
ExecuteJavaScript fail");
-            String err = "[WXBridgeManager] invokeReInitFramework  
ExecuteJavaScript fail reinit FrameWork";
-//            WXExceptionUtils.commitCriticalExceptionRT(null, 
WXErrorCode.WX_ERR_JS_FRAMEWORK,
-//                    "initFramework", "reInitCount = " + reInitCount + err, 
null);
           } else {
             WXLogUtils.e("[WXBridgeManager] invokeInitFramework  
ExecuteJavaScript fail");
-            String err = "[WXBridgeManager] invokeInitFramework  
ExecuteJavaScript fail";
-//            WXExceptionUtils.commitCriticalExceptionRT(null, 
WXErrorCode.WX_ERR_JS_FRAMEWORK,
-//                    "initFramework", err, null);
           }
         }
       } catch (Throwable e) {
+        sInitFrameWorkMsg.append(" | invokeInitFramework exception 
").append(e.toString());
         if (reInitCount > 1) {
           WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
-          String err = "[WXBridgeManager] invokeInitFramework reinit FrameWork 
exception!#" + e.toString();
-//          WXExceptionUtils.commitCriticalExceptionRT(null, 
WXErrorCode.WX_ERR_JS_FRAMEWORK,
-//                  "initFramework", "reInitCount ==" + reInitCount + err, 
null);
         } else {
           WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e);
-          String err = "[WXBridgeManager] invokeInitFramework exception!#" + 
e.toString();
-//          WXExceptionUtils.commitCriticalExceptionRT(null, 
WXErrorCode.WX_ERR_JS_FRAMEWORK,
-//                  "initFramework", err, null);
         }
       }
 
@@ -2015,12 +2004,17 @@ public void reportJSException(String instanceId, String 
function,
             instance.setNeedLoad(true);
             return;
           } else {
+            String errorMsg = new StringBuilder()
+                
.append(WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg())
+                .append(", reportJSException >>>> 
instanceId:").append(instanceId)
+                .append(", exception function:").append(function)
+                .append(", exception:").append(exception)
+                .append(", 
extInitTime:").append(System.currentTimeMillis()-WXBridgeManager.sInitFrameWorkTimeOrigin).append("ms")
+                .append(", 
extInitErrorMsg:").append(WXBridgeManager.sInitFrameWorkMsg.toString())
+                .toString();
             instance.onRenderError(//DegradPassivity to H5
                     
WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(),
-                    
WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() +
-                            "reportJSException >>>> instanceId:" + instanceId
-                            + ", exception function:" + function + ", 
exception:"
-                            + exception
+                     errorMsg
             );
             //doReportJSException(instanceId,function,exception);
             
WXExceptionUtils.commitCriticalExceptionRT(instanceId,WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE,function,exception,null);
@@ -2083,6 +2077,12 @@ private void doReportJSException(String instanceId, 
String function, String exce
 
         }
       }
+      Map<String,String> extInfo = null;
+      if (METHOD_CREATE_INSTANCE.equals(function) || 
METHOD_CREATE_INSTANCE_CONTEXT.equals(function)){
+        extInfo = new HashMap<>();
+        extInfo.put("extInitTime",(System.currentTimeMillis() - 
WXBridgeManager.sInitFrameWorkTimeOrigin)+"ms");
+        
extInfo.put("extInitErrorMsg",WXBridgeManager.sInitFrameWorkMsg.toString());
+      }
 
       if (checkEmptyScreen(instance)){
         if (WXEnvironment.isApkDebugable()){
@@ -2091,12 +2091,12 @@ private void doReportJSException(String instanceId, 
String function, String exce
         WXExceptionUtils.commitCriticalExceptionRT(exceptionId, 
WXErrorCode.WX_RENDER_ERR_JS_RUNTIME,
                 function,
                 WXErrorCode.WX_RENDER_ERR_JS_RUNTIME.getErrorMsg() + exception,
-                null);
+            extInfo);
       } else {
         WXExceptionUtils.commitCriticalExceptionRT(exceptionId, 
WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE,
                 function,
                 WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE.getErrorMsg() + 
exception,
-                null);
+            extInfo);
       }
     }
   }
diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java 
b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
index 51b97718aa..97a445ab8d 100644
--- a/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
+++ b/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java
@@ -224,7 +224,7 @@
   /**
    * WX Key Exception Commit RT JsBridge eg. js excute runtime error
    */
-  WX_KEY_EXCEPTION_WXBRIDGE("-9400", "[js excute runtime error] detail js 
stack \n",ErrorType.JS_ERROR,ErrorGroup.JS),
+  WX_KEY_EXCEPTION_WXBRIDGE("-9400", "[js excute runtime error] detail js 
stack -> ",ErrorType.JS_ERROR,ErrorGroup.JS),
   WX_KEY_EXCEPTION_WXBRIDGE_EXCEPTION("-9401", "[js excute runtime error] 
detail js stack \n",ErrorType.JS_ERROR,ErrorGroup.JS),
 
   /**
@@ -278,7 +278,7 @@
 
   WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED_JS("-1006", "degradeToH5|createInstance 
fail|wx_create_instance_error",ErrorType.DEGRAD_ERROR,ErrorGroup.JS),
 
-
+  WX_ERR_HASH_MAP_TMP("-10010", 
"WX_ERR_HASH_MAP_TMP",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE),
 
   /**
    * TEST
diff --git 
a/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java 
b/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java
index 13db4f2b6c..9853869986 100644
--- a/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java
+++ b/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java
@@ -18,12 +18,14 @@
  */
 package com.taobao.weex.performance;
 
-import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 import com.taobao.weex.WXEnvironment;
 import com.taobao.weex.WXSDKInstance;
 import com.taobao.weex.WXSDKManager;
+import com.taobao.weex.common.WXErrorCode;
+import com.taobao.weex.utils.WXExceptionUtils;
 
 public class WXInstanceApm {
 
@@ -102,7 +104,7 @@ public WXInstanceApm(String instanceId) {
         IApmGenerator generator = WXSDKManager.getInstance().getApmGenerater();
         if (null != generator) {
             apmInstance = generator.generateApmInstance(WEEX_PAGE_TOPIC);
-            recordStatsMap = new HashMap<>();
+            recordStatsMap = new ConcurrentHashMap<>();
         }
     }
 
@@ -228,7 +230,19 @@ public void updateDiffStats(String name, double diffValue) 
{
         if (null == apmInstance) {
             return;
         }
-        double preVal = recordStatsMap.containsKey(name) ? 
recordStatsMap.get(name) : 0;
+        Double preVal = recordStatsMap.containsKey(name) ? 
recordStatsMap.get(name) : 0;
+        //fix by use ConcurrentHashMap,but not sure,so report if error still 
happen
+        if (null == preVal){
+            WXExceptionUtils.commitCriticalExceptionRT(
+                "",
+                WXErrorCode.WX_ERR_HASH_MAP_TMP,
+                "updateDiffStats",
+                "key : "+name,
+                null
+            );
+            return;
+        }
+
         double currentValue = preVal + diffValue;
         recordStatsMap.put(name, currentValue);
         addStats(name, currentValue);
@@ -238,7 +252,18 @@ public void updateMaxStats(String name, double currentVal) 
{
         if (null == apmInstance) {
             return;
         }
-        double maxValue = recordStatsMap.containsKey(name) ? 
recordStatsMap.get(name) : 0;
+        Double maxValue = recordStatsMap.containsKey(name) ? 
recordStatsMap.get(name) : 0;
+        //fix by use ConcurrentHashMap,but not sure,so report if error still 
happen
+        if (null == maxValue){
+            WXExceptionUtils.commitCriticalExceptionRT(
+                "",
+                WXErrorCode.WX_ERR_HASH_MAP_TMP,
+                "updateMaxStats",
+                "key : "+name,
+                null
+            );
+            return;
+        }
         if (maxValue < currentVal) {
             maxValue = currentVal;
             recordStatsMap.put(name, currentVal);


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to