You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by GitBox <gi...@apache.org> on 2018/12/12 07:53:03 UTC

[GitHub] YorkShen closed pull request #1898: * [Android] rm useless code `WXInstanceExceptionRecord`

YorkShen closed pull request #1898: * [Android] rm useless code `WXInstanceExceptionRecord`
URL: https://github.com/apache/incubator-weex/pull/1898
 
 
   

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/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java
index f51af1ae21..fd623fbe4c 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.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 @@
 
   private Map<String,String> mContainerInfo;
 
-  private WXInstanceExceptionRecord mExceptionRecorder;
   public boolean isNewFsEnd = false;
 
   /**
@@ -470,7 +467,6 @@ public void init(Context context) {
 
     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 void onChangeElement(WXComponent component, boolean isOutOfScreen) {
   }
 
   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 void run() {
   }
 
   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 @@ private void destroyView(View rootView) {
   public synchronized void destroy() {
     if(!isDestroy()) {
       mApmForInstance.onEnd();
-      getExceptionRecorder().checkEmptyScreenAndReport();
       if(mRendered) {
         WXSDKManager.getInstance().destroyInstance(mInstanceId);
       }
@@ -1867,10 +1860,6 @@ public WXInstanceApm getApmForInstance() {
     return mApmForInstance;
   }
 
-  public WXInstanceExceptionRecord getExceptionRecorder() {
-    return mExceptionRecorder;
-  }
-
   public Map<String, Serializable> getUserTrackParams() {
     return mUserTrackParams;
   }
@@ -2094,7 +2083,6 @@ public void onHttpFinish(WXResponse response) {
         );
       }
       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 71f5a99519..dcee5bb161 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 void reportJSException(String instanceId, String function,
           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 2c40803b8f..caf1920dda 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 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 @@
     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 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 void onStage(String name) {
      * @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 cb86f73605..0000000000
--- 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 59e2406aca..49eef03112 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 GraphicActionCreateBody(@NonNull WXSDKInstance instance, String ref,
     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 6eb4f2f5d0..d0f15ddef6 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 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);
       }
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 3d797ed1ac..33cd5cb589 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 void addSubView(View child, int index) {
     }
     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 54edfe86b4..ce50ef2172 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.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 static void commitCriticalExceptionWithDefaultUrl(
                 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 static void commitCriticalExceptionWithDefaultUrl(
                 }
                 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 static void commitCriticalExceptionWithDefaultUrl(
             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


 

----------------------------------------------------------------
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:
users@infra.apache.org


With regards,
Apache Git Services