From 8d8bb978cea4f12e863e9bb6b4b9dc15dc7a8023 Mon Sep 17 00:00:00 2001 From: zhongcang Date: Sat, 8 Sep 2018 17:02:23 +0800 Subject: [PATCH] [WEEX-608][Android] apm monitor logic modify * [Android] deprece old white screen check logic * [Android] set flag to excptionReporter when embed receive exception * [Android] check empty sceen by action --- .../taobao/weex/bridge/WXBridgeManager.java | 15 ++++++-- .../com/taobao/weex/common/WXErrorCode.java | 5 +-- .../WXInstanceExceptionRecord.java | 37 +++++++++++-------- .../com/taobao/weex/ui/component/WXEmbed.java | 4 ++ 4 files changed, 38 insertions(+), 23 deletions(-) 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 b28676443d..31dd996f46 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 @@ -2045,7 +2045,7 @@ public void reportJSException(String instanceId, String function, } private void doReportJSException(String instanceId, String function, String exception){ - WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId); + WXSDKInstance instance = WXSDKManager.getInstance().getAllInstanceMap().get(instanceId); IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter(); if (adapter != null) { String exceptionId = instanceId; @@ -2093,9 +2093,16 @@ private void doReportJSException(String instanceId, String function, String exce } } - WXErrorCode errorCode = (METHOD_CREATE_INSTANCE.equals(function) || METHOD_CREATE_INSTANCE_CONTEXT.equals(function)) - ?WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE - :WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE; + + WXErrorCode errorCode; + if (METHOD_CREATE_INSTANCE.equals(function)){ + errorCode = WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE; + }else if ( METHOD_CREATE_INSTANCE_CONTEXT.equals(function)){ + errorCode = WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE_CONTEXT; + }else { + errorCode = WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE; + } + WXExceptionUtils.commitCriticalExceptionRT(exceptionId, errorCode, function, errorCode.getErrorMsg() + exception, 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 ec260e5be9..27aa1d420a 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 @@ -230,9 +230,8 @@ public enum WXErrorCode { /** * renderErrorCode */ - WX_RENDER_ERR_JS_CREATE_INSTANCE("-9600", "WX_RENDER_ERR_JS_CREATE_INSTANCE",ErrorType.RENDER_ERROR,ErrorGroup.JS), - WX_RENDER_ERR_JS_RUNTIME("-9601", "WX_RENDER_ERR for js error",ErrorType.RENDER_ERROR, ErrorGroup.JS), - WX_RENDER_ERR_NATIVE_RUNTIME("-9604", "WX_RENDER_ERR for js error",ErrorType.RENDER_ERROR, ErrorGroup.NATIVE), + WX_RENDER_ERR_JS_CREATE_INSTANCE("-9600", "white screen cause create instance failed,check js stack ->",ErrorType.RENDER_ERROR,ErrorGroup.JS), + WX_RENDER_ERR_JS_CREATE_INSTANCE_CONTEXT("-9601", "white screen cause create instanceContext failed,check js stack ->",ErrorType.RENDER_ERROR,ErrorGroup.JS), WX_RENDER_ERR_LAYER_OVERFLOW("-9602", "WX_RENDER_ERR_LAYER_OVERFLOW", ErrorType.NATIVE_ERROR, ErrorGroup.NATIVE), WX_RENDER_ERR_NULL_KEY("-9603", "WX_RENDER_ERR_NULL_KEY", ErrorType.NATIVE_ERROR, ErrorGroup.NATIVE), diff --git a/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceExceptionRecord.java b/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceExceptionRecord.java index e1fcb736da..cb86f73605 100644 --- a/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceExceptionRecord.java +++ b/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceExceptionRecord.java @@ -50,7 +50,7 @@ public class WXInstanceExceptionRecord { private boolean mHasReportScreenEmpty = false; private boolean mBeginRender = false; public boolean isDownLoadBundleFailed = false; - public static boolean isReportWriteScreen = true; + public static boolean isReportWriteScreen = false; public WXInstanceExceptionRecord(String instanceId) { this.instanceId = instanceId; @@ -65,6 +65,9 @@ public WXInstanceExceptionRecord(String instanceId) { * when checkEmptyScreen, report msg */ public void recordErrorMsg(WXJSExceptionInfo exceptionInfo) { + if (isReportWriteScreen){ + return; + } if (null == exceptionInfo) { return; } @@ -139,10 +142,14 @@ private String convertExceptionListToString() { } public void checkEmptyScreenAndReport() { - if (!isReportWriteScreen || isDownLoadBundleFailed){ + if (!isReportWriteScreen){ return; } - if (!mBeginRender || mHasReportScreenEmpty || hasAddView.get() || hasDegrade.get()) { + if (isDownLoadBundleFailed || !mBeginRender || mHasReportScreenEmpty || hasAddView.get() || hasDegrade.get()) { + return; + } + + if (!mStageMap.containsKey(WXInstanceApm.KEY_PAGE_STAGES_CREATE_FINISH)){ return; } @@ -153,18 +160,16 @@ public void checkEmptyScreenAndReport() { } long currentTime = WXUtils.getFixUnixTime(); long jsExecTime = currentTime - startExecJsTime; - //3s limit of instance stayTime (case in\quit very fast case) - if (jsExecTime <= 3000){ + //4s limit of instance stayTime (case in\quit very fast case) + if (jsExecTime <= 4000){ return; } String errorMsg; if(errorList.isEmpty()){ - errorMsg = mStageMap.containsKey(WXInstanceApm.KEY_PAGE_STAGES_CREATE_FINISH) - ?"writeScreen :never add view until page destroy(js has execute > 3s)" - :"writeScreen :never add view even js executeTime > 3s"; + errorMsg = "whiteScreen :never add view until page destroy,(js has execute > 4s,has createFinish)"; }else { - errorMsg = "writeScreen :history exception :"+ convertExceptionListToString(); + errorMsg = "whiteScreen :history exception :"+ convertExceptionListToString(); } @@ -175,13 +180,13 @@ public void checkEmptyScreenAndReport() { flagMap.put("wxHasReportScreenEmpty",String.valueOf(mHasReportScreenEmpty)); flagMap.put("wxJSExecTime", String.valueOf(jsExecTime)); - WXExceptionUtils.commitCriticalExceptionRT( - instanceId, - WXErrorCode.WX_RENDER_ERR_JS_RUNTIME, - "checkEmptyScreenAndReport", - errorMsg, - flagMap - ); + //WXExceptionUtils.commitCriticalExceptionRT( + // instanceId, + // WXErrorCode.WX_RENDER_ERR_JS_RUNTIME, + // "checkEmptyScreenAndReport", + // errorMsg, + // flagMap + //); } public Long getStageTime(String key){ diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java index 0803414f6d..1712c8e6a5 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXEmbed.java @@ -188,6 +188,10 @@ public void onRefreshSuccess(WXSDKInstance instance, int width, int height) { @Override public void onException(WXSDKInstance instance, String errCode, String msg) { + if (null != instance){ + //degrade or reload,should not report + instance.getExceptionRecorder().hasDegrade.set(true); + } if (mEventListener != null) { mEventListener.onException(mComponent, errCode, msg); }