This is an automated email from the ASF dual-hosted git repository.
kyork pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git
The following commit(s) were added to refs/heads/master by this push:
new 402f483 * [Android] rm useless code `WXInstanceExceptionRecord`
(#1898)
402f483 is described below
commit 402f4835a7a9f92bc461e3bf2a46369091b65a48
Author: chen <[email protected]>
AuthorDate: Wed Dec 12 15:53:02 2018 +0800
* [Android] rm useless code `WXInstanceExceptionRecord` (#1898)
---
.../main/java/com/taobao/weex/WXSDKInstance.java | 12 --
.../com/taobao/weex/bridge/WXBridgeManager.java | 4 +-
.../com/taobao/weex/performance/WXInstanceApm.java | 9 +-
.../performance/WXInstanceExceptionRecord.java | 206 ---------------------
.../weex/ui/action/GraphicActionCreateBody.java | 1 -
.../java/com/taobao/weex/ui/component/WXEmbed.java | 4 -
.../com/taobao/weex/ui/component/WXVContainer.java | 2 +-
.../com/taobao/weex/utils/WXExceptionUtils.java | 33 +++-
8 files changed, 33 insertions(+), 238 deletions(-)
diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index f51af1a..fd623fb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
+++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
@@ -66,9 +66,7 @@ import com.taobao.weex.dom.WXEvent;
import com.taobao.weex.http.WXHttpUtil;
import com.taobao.weex.instance.InstanceOnFireEventInterceptor;
import com.taobao.weex.layout.ContentBoxMeasurement;
-import com.taobao.weex.performance.WXAnalyzerDataTransfer;
import com.taobao.weex.performance.WXInstanceApm;
-import com.taobao.weex.performance.WXInstanceExceptionRecord;
import com.taobao.weex.tracing.WXTracing;
import com.taobao.weex.ui.action.GraphicActionAddElement;
import com.taobao.weex.ui.component.NestedContainer;
@@ -147,7 +145,6 @@ public class WXSDKInstance implements
IWXActivityStateListener,View.OnLayoutChan
private Map<String,String> mContainerInfo;
- private WXInstanceExceptionRecord mExceptionRecorder;
public boolean isNewFsEnd = false;
/**
@@ -470,7 +467,6 @@ public class WXSDKInstance implements
IWXActivityStateListener,View.OnLayoutChan
mWXPerformance = new WXPerformance(mInstanceId);
mApmForInstance = new WXInstanceApm(mInstanceId);
- mExceptionRecorder = new WXInstanceExceptionRecord(mInstanceId);
mWXPerformance.WXSDKVersion = WXEnvironment.WXSDK_VERSION;
mWXPerformance.JSLibInitTime = WXEnvironment.sJSLibInitTime;
@@ -1407,7 +1403,6 @@ public class WXSDKInstance implements
IWXActivityStateListener,View.OnLayoutChan
}
public void onRenderError(final String errCode, final String msg) {
-
getExceptionRecorder().recordReportErrorMsg("["+errCode+",onRenderError,"+msg+"]");
if (mRenderListener != null && mContext != null) {
runOnUiThread(new Runnable() {
@@ -1422,7 +1417,6 @@ public class WXSDKInstance implements
IWXActivityStateListener,View.OnLayoutChan
}
public void onJSException(final String errCode, final String function, final
String exception) {
-
getExceptionRecorder().recordReportErrorMsg("["+errCode+","+function+","+exception+"]");
hasException = true;
if (mRenderListener != null && mContext != null) {
runOnUiThread(new Runnable() {
@@ -1533,7 +1527,6 @@ public class WXSDKInstance implements
IWXActivityStateListener,View.OnLayoutChan
public synchronized void destroy() {
if(!isDestroy()) {
mApmForInstance.onEnd();
- getExceptionRecorder().checkEmptyScreenAndReport();
if(mRendered) {
WXSDKManager.getInstance().destroyInstance(mInstanceId);
}
@@ -1867,10 +1860,6 @@ public class WXSDKInstance implements
IWXActivityStateListener,View.OnLayoutChan
return mApmForInstance;
}
- public WXInstanceExceptionRecord getExceptionRecorder() {
- return mExceptionRecorder;
- }
-
public Map<String, Serializable> getUserTrackParams() {
return mUserTrackParams;
}
@@ -2094,7 +2083,6 @@ public class WXSDKInstance implements
IWXActivityStateListener,View.OnLayoutChan
);
}
else {
- getExceptionRecorder().isDownLoadBundleFailed = true;
wxErrorCode =
WXErrorCode.WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getErrorCode();
onRenderError(wxErrorCode,
response.errorMsg);
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 71f5a99..dcee5bb 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
@@ -2249,9 +2249,9 @@ public class WXBridgeManager implements Callback,
BactchExecutor {
e.printStackTrace();
}
}
- if (METHOD_CREATE_INSTANCE.equals(function) &&
!instance.getExceptionRecorder().hasAddView.get()){
+ if (METHOD_CREATE_INSTANCE.equals(function) &&
!instance.getApmForInstance().hasAddView){
reportErrorCode = WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE;
- }else if ( METHOD_CREATE_INSTANCE_CONTEXT.equals(function) &&
!instance.getExceptionRecorder().hasAddView.get()){
+ }else if ( METHOD_CREATE_INSTANCE_CONTEXT.equals(function) &&
!instance.getApmForInstance().hasAddView){
reportErrorCode = WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE_CONTEXT;
}
instance.onJSException(reportErrorCode.getErrorCode(), function,
exception);
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 2c40803..caf1920 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
@@ -24,7 +24,6 @@ import java.util.concurrent.ConcurrentHashMap;
import android.graphics.Rect;
import android.text.TextUtils;
import android.util.Log;
-import com.taobao.weex.BuildConfig;
import com.taobao.weex.WXEnvironment;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.WXSDKManager;
@@ -112,6 +111,7 @@ public class WXInstanceApm {
private String mInstanceId;
private IWXApmMonitorAdapter apmInstance;
private Map<String, Double> recordStatsMap;
+ public final Map<String, Long> stageMap;
private boolean isFSEnd;
private boolean mHasInit = false;
private boolean mEnd = false;
@@ -121,10 +121,12 @@ public class WXInstanceApm {
public Rect instanceRect;
public String reportPageName;
public boolean hasReportLayerOverDraw = false;
+ public boolean hasAddView;
public WXInstanceApm(String instanceId) {
mInstanceId = instanceId;
extInfo = new ConcurrentHashMap<>();
+ stageMap = new ConcurrentHashMap<>();
IApmGenerator generator = WXSDKManager.getInstance().getApmGenerater();
if (null != generator) {
apmInstance = generator.generateApmInstance(WEEX_PAGE_TOPIC);
@@ -156,13 +158,10 @@ public class WXInstanceApm {
* @param time unixTime ,plz use WXUtils.getFixUnixTime
*/
public void onStageWithTime(String name,long time){
- WXSDKInstance instance =
WXSDKManager.getInstance().getAllInstanceMap().get(mInstanceId);
- if (null != instance){
- instance.getExceptionRecorder().recordStage(name, time);
- }
if (mEnd){
return;
}
+ stageMap.put(name,time);
if(WXAnalyzerDataTransfer.isOpenPerformance){
WXAnalyzerDataTransfer.transferPerformance(mInstanceId,"stage",name,time);
}
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
deleted file mode 100644
index cb86f73..0000000
---
a/android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceExceptionRecord.java
+++ /dev/null
@@ -1,206 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package com.taobao.weex.performance;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-import java.util.concurrent.atomic.AtomicBoolean;
-
-import android.text.TextUtils;
-import com.taobao.weex.common.WXErrorCode;
-import com.taobao.weex.common.WXErrorCode.ErrorGroup;
-import com.taobao.weex.common.WXErrorCode.ErrorType;
-import com.taobao.weex.common.WXJSExceptionInfo;
-import com.taobao.weex.utils.WXExceptionUtils;
-import com.taobao.weex.utils.WXUtils;
-
-public class WXInstanceExceptionRecord {
-
- public static int sErrorMsgSizeLimit = 5;
- public static final String KEY_EXP_STAGE_LIST = "wxStageList";
-
- private final Map<String,Long> mStageMap;
- public final List<String> errorList;
- public final String instanceId;
- public final AtomicBoolean hasAddView;
- public final AtomicBoolean hasDegrade;
- private boolean mHasReportScreenEmpty = false;
- private boolean mBeginRender = false;
- public boolean isDownLoadBundleFailed = false;
- public static boolean isReportWriteScreen = false;
-
- public WXInstanceExceptionRecord(String instanceId) {
- this.instanceId = instanceId;
- this.mStageMap = new ConcurrentHashMap<>();
- this.errorList = new CopyOnWriteArrayList<>();
- this.hasAddView = new AtomicBoolean(false);
- this.hasDegrade = new AtomicBoolean(false);
- }
-
- /**
- * record error on instance (js、native)
- * when checkEmptyScreen, report msg
- */
- public void recordErrorMsg(WXJSExceptionInfo exceptionInfo) {
- if (isReportWriteScreen){
- return;
- }
- if (null == exceptionInfo) {
- return;
- }
- //FOR RENDER_ERROR , record twice
- if (exceptionInfo.getErrCode().getErrorType() ==
ErrorType.RENDER_ERROR) {
- mHasReportScreenEmpty = true;
- return;
- }
- recordReportErrorMsg(exceptionInfo.toString());
- }
-
- public void recordReportErrorMsg(String appendStr){
- if (!isReportWriteScreen){
- return;
- }
- //screen has view, or degrade , will not be empty
- if (TextUtils.isEmpty(appendStr) || hasAddView.get() ||
hasDegrade.get()) {
- return;
- }
- if (errorList.size() > sErrorMsgSizeLimit) {
- errorList.remove(0);
- }
- errorList.add(new StringBuilder()
- .append("time ").append(System.currentTimeMillis())
- .append(",msg ").append(appendStr).toString()
- );
- }
-
- public void recordStage(String stage, long time) {
- if (WXInstanceApm.KEY_PAGE_STAGES_RENDER_ORGIGIN.equals(stage)
- || WXInstanceApm.KEY_PAGE_STAGES_DOWN_BUNDLE_START.equals(stage)
- || WXInstanceApm.KEY_PAGE_STAGES_LOAD_BUNDLE_END.equals(stage)
- ) {
- setBeginRender(true);
- }
- mStageMap.put(stage,time);
- }
-
- public void setBeginRender(boolean isBegin){
- mBeginRender = true;
- }
-
- public String convertStageToStr() {
- if (mStageMap.isEmpty()) {
- return "noStageRecord";
- }
- List<Map.Entry<String,Long>> list = new
ArrayList<>(mStageMap.entrySet());
- Collections.sort(list, new Comparator<Entry<String, Long>>() {
- @Override
- public int compare(Entry<String, Long> o1, Entry<String, Long> o2)
{
- return (int)(o1.getValue() - o2.getValue());
- }
- });
-
- StringBuilder builder = new StringBuilder();
- for (Map.Entry<String,Long> entry : list) {
-
builder.append(entry.getKey()).append(':').append(entry.getValue()).append("->");
- }
- return builder.toString();
- }
-
- private String convertExceptionListToString() {
- if (errorList.isEmpty()) {
- return "";
- }
- StringBuilder builder = new StringBuilder();
- int i = 0;
- for (String info : errorList) {
- builder.append("error_").append(i).append(":
").append(info).append("--->");
- }
- return builder.toString();
- }
-
- public void checkEmptyScreenAndReport() {
- if (!isReportWriteScreen){
- return;
- }
- if (isDownLoadBundleFailed || !mBeginRender || mHasReportScreenEmpty
|| hasAddView.get() || hasDegrade.get()) {
- return;
- }
-
- if
(!mStageMap.containsKey(WXInstanceApm.KEY_PAGE_STAGES_CREATE_FINISH)){
- return;
- }
-
- Long startExecJsTime =
mStageMap.get(WXInstanceApm.KEY_PAGE_STAGES_LOAD_BUNDLE_END);
- if (null == startExecJsTime){
- //too fast to quit
- return;
- }
- long currentTime = WXUtils.getFixUnixTime();
- long jsExecTime = currentTime - startExecJsTime;
- //4s limit of instance stayTime (case in\quit very fast case)
- if (jsExecTime <= 4000){
- return;
- }
-
- String errorMsg;
- if(errorList.isEmpty()){
- errorMsg = "whiteScreen :never add view until page destroy,(js has
execute > 4s,has createFinish)";
- }else {
- errorMsg = "whiteScreen :history exception :"+
convertExceptionListToString();
- }
-
-
- Map<String,String> flagMap = new HashMap<>(4);
- flagMap.put("wxBeginRender",String.valueOf(mBeginRender));
- flagMap.put("wxHasAddView",String.valueOf(hasAddView.get()));
- flagMap.put("wxHasDegrade",String.valueOf(hasDegrade.get()));
-
flagMap.put("wxHasReportScreenEmpty",String.valueOf(mHasReportScreenEmpty));
- flagMap.put("wxJSExecTime", String.valueOf(jsExecTime));
-
- //WXExceptionUtils.commitCriticalExceptionRT(
- // instanceId,
- // WXErrorCode.WX_RENDER_ERR_JS_RUNTIME,
- // "checkEmptyScreenAndReport",
- // errorMsg,
- // flagMap
- //);
- }
-
- public Long getStageTime(String key){
- return mStageMap.get(key);
- }
-
-
-
- @Override
- public String toString() {
- return new StringBuilder()
- .append(super.toString())
- .append("wxStageList :").append(convertStageToStr())
- .append("wxErrorList :").append(convertExceptionListToString())
- .toString();
- }
-}
diff --git
a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java
b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java
index 59e2406..49eef03 100644
---
a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java
+++
b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateBody.java
@@ -56,7 +56,6 @@ public class GraphicActionCreateBody extends
GraphicActionAbstractAddElement {
if (instance.getContext() == null) {
return;
}
- instance.getExceptionRecorder().setBeginRender(true);
BasicComponentData basicComponentData = new BasicComponentData(getRef(),
mComponentType, null);
component = createComponent(instance, null, basicComponentData);
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 6eb4f2f..d0f15dd 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,10 +188,6 @@ public class WXEmbed extends WXDiv implements
WXSDKInstance.OnInstanceVisibleLis
@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);
}
diff --git
a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
index 3d797ed..33cd5cb 100644
--- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
+++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXVContainer.java
@@ -313,7 +313,7 @@ public abstract class WXVContainer<T extends ViewGroup>
extends WXComponent<T> {
}
WXSDKInstance instance = getInstance();
if (null != instance){
- instance.getExceptionRecorder().hasAddView.set(true);
+ instance.getApmForInstance().hasAddView = true;
}
}
diff --git
a/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java
b/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java
index 54edfe8..ce50ef2 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java
@@ -18,8 +18,13 @@
*/
package com.taobao.weex.utils;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.Map.Entry;
import android.support.annotation.Nullable;
import android.text.TextUtils;
@@ -32,7 +37,6 @@ import com.taobao.weex.common.WXJSExceptionInfo;
import com.taobao.weex.common.WXPerformance;
import com.taobao.weex.performance.WXAnalyzerDataTransfer;
import com.taobao.weex.performance.WXInstanceApm;
-import com.taobao.weex.performance.WXInstanceExceptionRecord;
/**
* Created on 2017/10/13.
@@ -106,7 +110,7 @@ public class WXExceptionUtils {
for (Map.Entry<String,String> entry:
instance.getContainerInfo().entrySet()){
commitMap.put(entry.getKey(),entry.getValue());
}
-
commitMap.put(WXInstanceExceptionRecord.KEY_EXP_STAGE_LIST,instance.getExceptionRecorder().convertStageToStr());
+ commitMap.put("wxStageList",convertStageToStr(instance));
String bundleTemplate = instance.getTemplate();
if (null == bundleTemplate){
bundleTemplate = "has recycle by gc";
@@ -116,9 +120,9 @@ public class WXExceptionUtils {
}
commitMap.put("wxTemplateOfBundle",bundleTemplate);
- Long pageStartTime =
instance.getExceptionRecorder().getStageTime(WXInstanceApm.KEY_PAGE_STAGES_DOWN_BUNDLE_START);
+ Long pageStartTime =
instance.getApmForInstance().stageMap.get(WXInstanceApm.KEY_PAGE_STAGES_DOWN_BUNDLE_START);
if (null == pageStartTime){
- pageStartTime =
instance.getExceptionRecorder().getStageTime(WXInstanceApm.KEY_PAGE_STAGES_RENDER_ORGIGIN);
+ pageStartTime =
instance.getApmForInstance().stageMap.get(WXInstanceApm.KEY_PAGE_STAGES_RENDER_ORGIGIN);
}
if (null != pageStartTime){
commitMap.put("wxUseTime",
String.valueOf(WXUtils.getFixUnixTime() - pageStartTime));
@@ -141,11 +145,26 @@ public class WXExceptionUtils {
adapter.onJSException(exceptionCommit);
}
- if (null != instance ){
- instance.getExceptionRecorder().recordErrorMsg(exceptionCommit);
+ WXAnalyzerDataTransfer.transferError(exceptionCommit, instanceId);
+ }
+
+ private static String convertStageToStr(WXSDKInstance instance) {
+ if (null == instance || null == instance.getApmForInstance() ||
instance.getApmForInstance().stageMap.isEmpty()) {
+ return "noStageRecord";
}
+ List<Entry<String, Long>> list = new
ArrayList<>(instance.getApmForInstance().stageMap.entrySet());
+ Collections.sort(list, new Comparator<Entry<String, Long>>() {
+ @Override
+ public int compare(Entry<String, Long> o1, Entry<String, Long> o2)
{
+ return (int)(o1.getValue() - o2.getValue());
+ }
+ });
- WXAnalyzerDataTransfer.transferError(exceptionCommit, instanceId);
+ StringBuilder builder = new StringBuilder();
+ for (Map.Entry<String, Long> entry : list) {
+
builder.append(entry.getKey()).append(':').append(entry.getValue()).append("->");
+ }
+ return builder.toString();
}
}
\ No newline at end of file