Skip to content
This repository was archived by the owner on Jun 3, 2021. It is now read-only.

Commit e6d373d

Browse files
lucky-chenYorkShen
authored andcommitted
[Android] check dup exception report for every instance (#2226)
[Android] add IConfigAdapter && check repeat report
1 parent c259ff8 commit e6d373d

File tree

5 files changed

+95
-1
lines changed

5 files changed

+95
-1
lines changed

android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import com.taobao.weex.adapter.ClassLoaderAdapter;
2727
import com.taobao.weex.adapter.DefaultUriAdapter;
2828
import com.taobao.weex.adapter.DefaultWXHttpAdapter;
29+
import com.taobao.weex.adapter.IWXConfigAdapter;
2930
import com.taobao.weex.adapter.ICrashInfoReporter;
3031
import com.taobao.weex.adapter.IDrawableLoader;
3132
import com.taobao.weex.adapter.IWXJscProcessManager;
@@ -90,6 +91,7 @@ public class WXSDKManager {
9091

9192
private IWXJSExceptionAdapter mIWXJSExceptionAdapter;
9293

94+
private IWXConfigAdapter mConfigAdapter;
9395
private IWXStorageAdapter mIWXStorageAdapter;
9496
private IWXStatisticsListener mStatisticsListener;
9597
private URIAdapter mURIAdapter;
@@ -218,6 +220,14 @@ public WXWorkThreadManager getWXWorkThreadManager() {
218220
return mWXWorkThreadManager;
219221
}
220222

223+
public void setWxConfigAdapter(IWXConfigAdapter mConfigAdapter) {
224+
this.mConfigAdapter = mConfigAdapter;
225+
}
226+
227+
public IWXConfigAdapter getWxConfigAdapter() {
228+
return mConfigAdapter;
229+
}
230+
221231
public @Nullable WXSDKInstance getSDKInstance(String instanceId) {
222232
return instanceId == null? null : mWXRenderManager.getWXSDKInstance(instanceId);
223233
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package com.taobao.weex.adapter;
2+
3+
/**
4+
* @author zhongcang
5+
* @date 2019/3/20
6+
*/
7+
public interface IWXConfigAdapter {
8+
String getConfig(String nameSpace,String key,String defaultValue);
9+
}

android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1469,7 +1469,14 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa
14691469
} else {
14701470
options.put(BUNDLE_TYPE, "Others");
14711471
}
1472-
instance.getApmForInstance().addProperty(WXInstanceApm.KEY_PAGE_PROPERTIES_BUNDLE_TYPE, options.get(BUNDLE_TYPE));
1472+
Object recordBundleType = options.get(BUNDLE_TYPE);
1473+
if (recordBundleType instanceof String && "Others".equalsIgnoreCase((String)recordBundleType)){
1474+
//same as iOS record
1475+
recordBundleType = "other";
1476+
}
1477+
if (null != recordBundleType){
1478+
instance.getApmForInstance().addProperty(WXInstanceApm.KEY_PAGE_PROPERTIES_BUNDLE_TYPE, recordBundleType);
1479+
}
14731480
}
14741481
if (options.get("env") == null) {
14751482
options.put("env", mInitParams.toMap());

android/sdk/src/main/java/com/taobao/weex/performance/WXInstanceApm.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@
2020

2121
import java.util.HashMap;
2222
import java.util.Map;
23+
import java.util.Set;
2324
import java.util.concurrent.ConcurrentHashMap;
25+
import java.util.concurrent.CopyOnWriteArraySet;
2426

2527
import android.graphics.Rect;
2628
import android.os.Handler;
@@ -133,6 +135,8 @@ public class WXInstanceApm {
133135
public boolean hasAddView;
134136
private Handler mUIHandler;
135137

138+
public Set<String> exceptionRecord = new CopyOnWriteArraySet<String>();
139+
136140
/**
137141
* send performance value to js
138142
**/
@@ -302,6 +306,7 @@ public void onEnd() {
302306
if (null == apmInstance || mEnd) {
303307
return;
304308
}
309+
exceptionRecord.clear();
305310
mUIHandler.removeCallbacks(jsPerformanceCallBack);
306311
onStage(KEY_PAGE_STAGES_DESTROY);
307312
apmInstance.onEnd();

android/sdk/src/main/java/com/taobao/weex/utils/WXExceptionUtils.java

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,18 @@
2525
import java.util.List;
2626
import java.util.Map;
2727
import java.util.Map.Entry;
28+
import java.util.Set;
29+
import java.util.concurrent.CopyOnWriteArraySet;
2830

2931
import android.support.annotation.Nullable;
3032
import android.text.TextUtils;
3133
import com.taobao.weex.WXEnvironment;
3234
import com.taobao.weex.WXSDKInstance;
3335
import com.taobao.weex.WXSDKManager;
36+
import com.taobao.weex.adapter.IWXConfigAdapter;
3437
import com.taobao.weex.adapter.IWXJSExceptionAdapter;
3538
import com.taobao.weex.common.WXErrorCode;
39+
import com.taobao.weex.common.WXErrorCode.ErrorGroup;
3640
import com.taobao.weex.common.WXJSExceptionInfo;
3741
import com.taobao.weex.common.WXPerformance;
3842
import com.taobao.weex.performance.WXAnalyzerDataTransfer;
@@ -44,11 +48,50 @@
4448

4549
public class WXExceptionUtils {
4650

51+
private static Set<String> sGlobalExceptionRecord = new CopyOnWriteArraySet<String>();
52+
4753
/**
4854
* degradeUrl for degrade case
4955
*/
5056
public static String degradeUrl = "BundleUrlDefaultDegradeUrl";
5157

58+
private static boolean checkNeedReportCauseRepeat(String instanceId,WXErrorCode errCode,String exception){
59+
60+
if (TextUtils.isEmpty(exception)){
61+
return true;
62+
}
63+
64+
if (null != errCode && errCode.getErrorGroup() != ErrorGroup.JS){
65+
return true;
66+
}
67+
68+
if (TextUtils.isEmpty(instanceId)){
69+
instanceId = "instanceIdNull";
70+
}
71+
72+
String targetException = exception.length() > 200 ?exception.substring(0,200) : exception;
73+
Set<String> recordExceptionHistory= null;
74+
75+
WXSDKInstance instance = WXSDKManager.getInstance().getAllInstanceMap().get(instanceId);
76+
if (null == instance){
77+
recordExceptionHistory = sGlobalExceptionRecord;
78+
}else {
79+
recordExceptionHistory = instance.getApmForInstance().exceptionRecord;
80+
}
81+
82+
if (null == recordExceptionHistory){
83+
return true;
84+
}
85+
86+
if (recordExceptionHistory.contains(targetException)){
87+
return false;
88+
}
89+
recordExceptionHistory.add(targetException);
90+
return true;
91+
}
92+
93+
94+
5295

5396
/**
5497
* commitCriticalExceptionRT eg:JsRuntime Exception or JsFramework Init Exception
@@ -63,6 +106,26 @@ public static void commitCriticalExceptionRT(@Nullable final String instanceId,
63106
@Nullable final String function,
64107
@Nullable final String exception,
65108
@Nullable final Map<String,String> extParams ) {
109+
110+
try {
111+
IWXConfigAdapter configAdapter = WXSDKManager.getInstance().getWxConfigAdapter();
112+
boolean doCheck = true;
113+
if (null != configAdapter){
114+
String value = configAdapter.getConfig("wxapm","check_repeat_report","true");
115+
doCheck = "true".equalsIgnoreCase(value);
116+
}
117+
boolean doReport =true;
118+
if (doCheck){
119+
doReport = checkNeedReportCauseRepeat(instanceId,errCode,exception);
120+
}
121+
if (!doReport){
122+
return;
123+
}
124+
}catch (Throwable e){
125+
e.printStackTrace();
126+
}
127+
128+
66129
commitCriticalExceptionWithDefaultUrl(
67130
"BundleUrlDefault",
68131
instanceId,

0 commit comments

Comments
 (0)