[
https://issues.apache.org/jira/browse/WEEX-560?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16577822#comment-16577822
]
ASF GitHub Bot commented on WEEX-560:
-------------------------------------
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:
[email protected]
> [Android] fix null point of apm (ConcurrentHashMap)
> ---------------------------------------------------
>
> Key: WEEX-560
> URL: https://issues.apache.org/jira/browse/WEEX-560
> Project: Weex
> Issue Type: Bug
> Components: Android
> Reporter: peihan
> Assignee: YorkShen
> Priority: Major
>
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)