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 1c43a331bc..ff71c758e9 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -1863,7 +1863,7 @@ public void onHttpFinish(WXResponse response) { mWXPerformance.networkTime = System.currentTimeMillis() - startRequestTime; if(null!= response && response.extendParams!=null){ - mApmForInstance.updateExtInfo(response.extendParams); + mApmForInstance.updateRecordInfo(response.extendParams); Object actualNetworkTime=response.extendParams.get("actualNetworkTime"); mWXPerformance.actualNetworkTime=actualNetworkTime instanceof Long?(long)actualNetworkTime:0; WXLogUtils.renderPerformanceLog("actualNetworkTime", mWXPerformance.actualNetworkTime); 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 20fd2345fd..21e4f02a5a 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 @@ -106,9 +106,11 @@ public class WXInstanceApm { private Map recordStatsMap; private boolean isFSEnd; private boolean mHasInit = false; + public final Map extInfo; public WXInstanceApm(String instanceId) { mInstanceId = instanceId; + extInfo = new ConcurrentHashMap<>(); IApmGenerator generator = WXSDKManager.getInstance().getApmGenerater(); if (null != generator) { apmInstance = generator.generateApmInstance(WEEX_PAGE_TOPIC); @@ -308,7 +310,7 @@ public void updateMaxStats(String name, double currentVal) { } } - public void updateExtInfo(Map extParams) { + public void updateRecordInfo(Map extParams) { if (null == apmInstance || null == extParams) { return; } 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 cdac68fa31..3dd8b5ff9f 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 @@ -18,7 +18,13 @@ */ package com.taobao.weex.performance; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; 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; @@ -33,7 +39,7 @@ public class WXInstanceExceptionRecord { public static int sErrorMsgSizeLimit = 5; public static final String KEY_EXP_STAGE_LIST = "wxStageList"; - public final List stageList; + private final Map mStageMap; public final List errorList; public final String instanceId; public final AtomicBoolean hasAddView; @@ -43,7 +49,7 @@ public class WXInstanceExceptionRecord { public WXInstanceExceptionRecord(String instanceId) { this.instanceId = instanceId; - this.stageList = new CopyOnWriteArrayList<>(); + this.mStageMap = new ConcurrentHashMap<>(); this.errorList = new CopyOnWriteArrayList<>(); this.hasAddView = new AtomicBoolean(false); this.hasDegrade = new AtomicBoolean(false); @@ -79,7 +85,7 @@ public void recordStage(String stage, long time) { ) { setBeginRender(true); } - stageList.add(stage + " :" + time); + mStageMap.put(stage,time); } public void setBeginRender(boolean isBegin){ @@ -87,12 +93,20 @@ public void setBeginRender(boolean isBegin){ } public String convertStageToStr() { - if (stageList.isEmpty()) { - return "empty"; + if (mStageMap.isEmpty()) { + return "emptyStage"; } + List> list = new ArrayList<>(mStageMap.entrySet()); + Collections.sort(list, new Comparator>() { + @Override + public int compare(Entry o1, Entry o2) { + return (int)(o1.getValue() - o2.getValue()); + } + }); + StringBuilder builder = new StringBuilder(); - for (String value : stageList) { - builder.append(value).append(" -> "); + for (Map.Entry entry : list) { + builder.append(entry.getKey()).append(':').append(entry.getValue()).append("->"); } return builder.toString(); } diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java index 0f8ccf1bb1..67a0c849eb 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/action/GraphicActionCreateFinish.java @@ -42,6 +42,7 @@ public GraphicActionCreateFinish(@NonNull WXSDKInstance instance) { this.mLayoutHeight = (int) component.getLayoutHeight(); } instance.getApmForInstance().onStage(WXInstanceApm.KEY_PAGE_STAGES_CREATE_FINISH); + instance.getApmForInstance().extInfo.put(WXInstanceApm.KEY_PAGE_STAGES_CREATE_FINISH,true); // todo add LayoutFinishListener // final LayoutFinishListener listener; 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 a99c36c5b0..059911cf58 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 @@ -27,6 +27,7 @@ import com.taobao.weex.WXSDKManager; import com.taobao.weex.adapter.IWXJSExceptionAdapter; import com.taobao.weex.common.WXErrorCode; +import com.taobao.weex.common.WXErrorCode.ErrorType; import com.taobao.weex.common.WXJSExceptionInfo; import com.taobao.weex.common.WXPerformance; import com.taobao.weex.performance.WXAnalyzerDataTransfer; @@ -67,8 +68,6 @@ public static void commitCriticalExceptionRT(@Nullable final String instanceId, if (null == commitMap){ commitMap = new HashMap<>(); } - commitMap.put("activity","empty"); - if (!TextUtils.isEmpty(instanceId)) { instanceIdCommit = instanceId; instance = WXSDKManager.getInstance().getAllInstanceMap().get(instanceId); @@ -104,7 +103,7 @@ public static void commitCriticalExceptionRT(@Nullable final String instanceId, adapter.onJSException(exceptionCommit); } - if (null != instance){ + if (null != instance && exceptionCommit.getErrCode().getErrorType() != ErrorType.RENDER_ERROR){ instance.getExceptionRecorder().recordErrorMsg(exceptionCommit); }