* [Android] merge WXPerformance code,now support more performance data
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/495c7aca Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/495c7aca Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/495c7aca Branch: refs/heads/master Commit: 495c7acafbe6e71ab879de02821986d08aaea0fb Parents: a1d4ed2 Author: zhongcang <[email protected]> Authored: Thu Mar 22 16:10:52 2018 +0800 Committer: zhongcang <[email protected]> Committed: Thu Mar 22 16:10:52 2018 +0800 ---------------------------------------------------------------------- .../java/com/alibaba/weex/IndexActivity.java | 4 +- .../java/com/taobao/weex/RenderContainer.java | 12 + .../java/com/taobao/weex/WXRenderErrorCode.java | 87 ---- .../main/java/com/taobao/weex/WXSDKEngine.java | 9 +- .../java/com/taobao/weex/WXSDKInstance.java | 133 +++-- .../main/java/com/taobao/weex/WXSDKManager.java | 17 + .../com/taobao/weex/bridge/WXBridgeManager.java | 159 +++--- .../com/taobao/weex/bridge/WXModuleManager.java | 2 +- .../com/taobao/weex/common/WXErrorCode.java | 204 +++++--- .../taobao/weex/common/WXJSExceptionInfo.java | 11 +- .../com/taobao/weex/common/WXPerformance.java | 481 +++++++++++++++---- .../java/com/taobao/weex/dom/WXDomManager.java | 2 +- .../java/com/taobao/weex/dom/WXDomObject.java | 9 +- .../dom/action/AbstractAddElementAction.java | 14 +- .../weex/dom/action/AddElementAction.java | 1 + .../taobao/weex/dom/action/AddEventAction.java | 2 +- .../taobao/weex/dom/action/AnimationAction.java | 4 +- .../weex/dom/action/ModuleInvocationAction.java | 2 +- .../weex/dom/action/MoveElementAction.java | 2 +- .../weex/dom/action/RemoveElementAction.java | 8 +- .../weex/dom/action/RemoveEventAction.java | 2 +- .../weex/dom/action/UpdateAttributeAction.java | 2 +- .../weex/dom/action/UpdateStyleAction.java | 2 +- .../taobao/weex/performance/FpsCollector.java | 113 +++++ .../taobao/weex/performance/IWXAnalyzer.java | 35 ++ .../com/taobao/weex/performance/MemUtils.java | 80 +++ .../performance/WXAnalyzerDataTransfer.java | 138 ++++++ .../taobao/weex/ui/component/WXComponent.java | 5 + .../com/taobao/weex/ui/component/WXEmbed.java | 12 +- .../com/taobao/weex/ui/component/WXImage.java | 23 + .../taobao/weex/ui/module/WXTimerModule.java | 17 + .../com/taobao/weex/utils/WXExceptionUtils.java | 32 +- .../java/com/taobao/weex/utils/WXLogUtils.java | 35 +- .../taobao/weex/utils/WXSoInstallMgrSdk.java | 10 +- .../taobao/weex/utils/WXExceptionUtilsTest.java | 5 +- 35 files changed, 1261 insertions(+), 413 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java ---------------------------------------------------------------------- diff --git a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java index e4bbe99..feaf5ae 100644 --- a/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java +++ b/android/playground/app/src/main/java/com/alibaba/weex/IndexActivity.java @@ -42,9 +42,9 @@ import android.widget.Toast; import com.alibaba.weex.commons.AbstractWeexActivity; import com.alibaba.weex.update.CheckForUpdateUtil; import com.google.zxing.client.android.CaptureActivity; -import com.taobao.weex.WXRenderErrorCode; import com.taobao.weex.WXSDKEngine; import com.taobao.weex.WXSDKInstance; +import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.utils.WXFileUtils; import com.taobao.weex.utils.WXSoInstallMgrSdk; @@ -169,7 +169,7 @@ public class IndexActivity extends AbstractWeexActivity { super.onException(wxsdkInstance,s,s1); mProgressBar.setVisibility(View.GONE); mTipView.setVisibility(View.VISIBLE); - if (TextUtils.equals(s, WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getDegradErrorCode())) { + if (TextUtils.equals(s, WXErrorCode.WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getErrorCode())) { mTipView.setText(R.string.index_tip); } else { mTipView.setText("network render error:" + s1); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java b/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java index 2bcf330..a37a47e 100644 --- a/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java +++ b/android/sdk/src/main/java/com/taobao/weex/RenderContainer.java @@ -22,6 +22,7 @@ import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.util.AttributeSet; +import android.view.MotionEvent; import android.widget.FrameLayout; @@ -33,6 +34,7 @@ import java.lang.ref.WeakReference; public class RenderContainer extends FrameLayout { private WeakReference<WXSDKInstance> mSDKInstance; + private boolean mPageHasEvent = false; public RenderContainer(Context context) { super(context); @@ -64,4 +66,14 @@ public class RenderContainer extends FrameLayout { instance.setSize(w, h); } } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + mPageHasEvent = true; + return super.dispatchTouchEvent(ev); + } + + public boolean isPageHasEvent(){ + return mPageHasEvent; + } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java b/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java deleted file mode 100644 index 3c92bf5..0000000 --- a/android/sdk/src/main/java/com/taobao/weex/WXRenderErrorCode.java +++ /dev/null @@ -1,87 +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; - -public class WXRenderErrorCode { - -// public static final String WX_CREATE_INSTANCE_ERROR = "wx_create_instance_error"; -// -// public static final String WX_NETWORK_ERROR = "wx_network_error"; -// -// public static final String WX_USER_INTERCEPT_ERROR = "wx_user_intercept_error"; - - public enum DegradPassivityCode{ - - /** - * degrade code. - */ - WX_DEGRAD_ERR("-1000", "degradeToH5|Weex DegradPassivity \n"), - - /** - * degrade for instance create failed, once this case occured,detail js stack and other specific - * cause need track into errmsg. - */ - WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED("-1001", "degradeToH5|createInstance fail|wx_create_instance_error"), - - /** - * degrade for network failed download js bundle.once this case occured,network requist response header - * and statuscode need track into errmsg. - */ - WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED("-1002", "|wx_network_error|js bundle download failed"), - - /** - * degrade for network failed for bundlejs is unbroken , once this case occured,network requist response header - * and statuscode need track into errmsg. - */ - WX_DEGRAD_ERR_NETWORK_CHECK_CONTENT_LENGTH_FAILED("-1003", "degradeToH5|wx_network_error|js bundle content-length check failed"), - - /** - * degrade for Response header Content-Type is null or not "application/javascript". - * once this case occured,network requist response header and statuscode need track into errmsg. - */ - WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR("-1004", "degradeToH5|wx_user_intercept_error |Content-Type is not application/javascript, " + - "Weex render template must be javascript, please check your request!"), - - /** - * degrade for other reason. such as white screen which block error for some unknown reason. - * once this case occured,detail msg need track. - */ - WX_DEGRAD_ERR_OTHER_CAUSE_DEGRADTOH5("-1005", "degradeToH5|for other reason|"); - - private String degradCode; - private String degradMsg; - private String appendMsg = ""; - private String args; - - DegradPassivityCode(String degradCode, String degradMsg){ - this.degradCode = degradCode; - this.degradMsg = degradMsg; - } - - public String getDegradErrorCode() { - return degradCode; - } - - public String getDegradErrorMsg() { - StringBuilder builder=new StringBuilder(degradMsg); - builder.append(appendMsg); - return builder.toString(); - } - } -} http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java index 4ecb966..618502d 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java @@ -21,6 +21,7 @@ package com.taobao.weex; import android.app.Application; import android.content.Context; import android.content.Intent; +import android.os.Looper; import android.support.v4.content.LocalBroadcastManager; import android.text.TextUtils; @@ -46,6 +47,7 @@ import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.common.WXException; import com.taobao.weex.common.WXInstanceWrap; import com.taobao.weex.common.WXModule; +import com.taobao.weex.common.WXPerformance; import com.taobao.weex.dom.BasicEditTextDomObject; import com.taobao.weex.dom.TextAreaEditTextDomObject; import com.taobao.weex.dom.WXCellDomObject; @@ -57,6 +59,7 @@ import com.taobao.weex.dom.WXScrollerDomObject; import com.taobao.weex.dom.WXSwitchDomObject; import com.taobao.weex.dom.WXTextDomObject; import com.taobao.weex.http.WXStreamModule; +import com.taobao.weex.performance.FpsCollector; import com.taobao.weex.ui.ExternalLoaderComponentHolder; import com.taobao.weex.ui.IExternalComponentGetter; import com.taobao.weex.ui.IExternalModuleGetter; @@ -173,6 +176,8 @@ public class WXSDKEngine { doInitInternal(application,config); WXEnvironment.sSDKInitInvokeTime = System.currentTimeMillis()-start; WXLogUtils.renderPerformanceLog("SDKInitInvokeTime", WXEnvironment.sSDKInitInvokeTime); + WXPerformance.init(); + mIsInit = true; } } @@ -182,7 +187,7 @@ public class WXSDKEngine { if(application == null){ WXLogUtils.e(TAG, " doInitInternal application is null"); WXExceptionUtils.commitCriticalExceptionRT(null, - WXErrorCode.WX_KEY_EXCEPTION_SDK_INIT.getErrorCode(), + WXErrorCode.WX_KEY_EXCEPTION_SDK_INIT, "doInitInternal", WXErrorCode.WX_KEY_EXCEPTION_SDK_INIT.getErrorMsg() + "WXEnvironment sApplication is null", null); @@ -204,7 +209,7 @@ public class WXSDKEngine { boolean isSoInitSuccess = WXSoInstallMgrSdk.initSo(V8_SO_NAME, 1, config!=null?config.getUtAdapter():null); if (!isSoInitSuccess) { WXExceptionUtils.commitCriticalExceptionRT(null, - WXErrorCode.WX_KEY_EXCEPTION_SDK_INIT.getErrorCode(), + WXErrorCode.WX_KEY_EXCEPTION_SDK_INIT, "doInitInternal", WXErrorCode.WX_KEY_EXCEPTION_SDK_INIT.getErrorMsg() + "isSoInit false", null); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java ---------------------------------------------------------------------- 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 475991e..8e6534e 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -18,6 +18,8 @@ */ package com.taobao.weex; +import static com.taobao.weex.http.WXHttpUtil.KEY_USER_AGENT; + import android.app.AlertDialog; import android.content.Context; import android.content.Intent; @@ -31,18 +33,17 @@ import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; import android.support.annotation.RestrictTo.Scope; import android.text.TextUtils; -import android.util.Log; import android.view.Menu; import android.view.View; import android.view.ViewGroup; import android.widget.ScrollView; - import com.alibaba.fastjson.JSONObject; import com.taobao.weex.adapter.IDrawableLoader; import com.taobao.weex.adapter.IWXHttpAdapter; import com.taobao.weex.adapter.IWXImgLoaderAdapter; import com.taobao.weex.adapter.IWXUserTrackAdapter; import com.taobao.weex.adapter.URIAdapter; +import com.taobao.weex.performance.IWXAnalyzer; import com.taobao.weex.appfram.websocket.IWebSocketAdapter; import com.taobao.weex.bridge.EventResult; import com.taobao.weex.bridge.NativeInvokeHelper; @@ -56,6 +57,7 @@ import com.taobao.weex.common.OnWXScrollListener; import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.common.WXModule; import com.taobao.weex.common.WXPerformance; +import com.taobao.weex.common.WXPerformance.Dimension; import com.taobao.weex.common.WXRefreshData; import com.taobao.weex.common.WXRenderStrategy; import com.taobao.weex.common.WXRequest; @@ -66,6 +68,7 @@ import com.taobao.weex.dom.WXDomObject; import com.taobao.weex.dom.WXDomTask; import com.taobao.weex.dom.WXEvent; import com.taobao.weex.http.WXHttpUtil; +import com.taobao.weex.performance.WXAnalyzerDataTransfer; import com.taobao.weex.tracing.WXTracing; import com.taobao.weex.ui.component.NestedContainer; import com.taobao.weex.ui.component.WXBasicComponentType; @@ -82,7 +85,6 @@ import com.taobao.weex.utils.WXJsonUtils; import com.taobao.weex.utils.WXLogUtils; import com.taobao.weex.utils.WXReflectionUtils; import com.taobao.weex.utils.WXViewUtils; - import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.lang.ref.WeakReference; @@ -94,8 +96,6 @@ import java.util.PriorityQueue; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; -import static com.taobao.weex.http.WXHttpUtil.KEY_USER_AGENT; - /** * Each instance of WXSDKInstance represents an running weex instance. * It can be a pure weex view, or mixed with native view @@ -212,6 +212,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. private int mMaxDeepLayer; + private int mMaxVDomDeepLayer; public boolean isTrackComponent() { return trackComponent; @@ -366,6 +367,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. return mNativeInvokeHelper; } + @Deprecated public void setBizType(String bizType) { if (!TextUtils.isEmpty(bizType)) { mWXPerformance.bizType = bizType; @@ -459,6 +461,8 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. * @param flag RenderStrategy {@link WXRenderStrategy} */ public void render(String pageName, String template, Map<String, Object> options, String jsonInitData, WXRenderStrategy flag) { + mWXPerformance.beforeInstanceRender(mInstanceId); + if(WXEnvironment.isApkDebugable() && WXPerformance.DEFAULT.equals(pageName)){ WXLogUtils.e("WXSDKInstance", "Please set your pageName or your js bundle url !!!!!!!"); @@ -833,6 +837,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. * begin hook Activity life cycle callback ********************************************************/ + @Override public void onActivityCreate() { @@ -883,11 +888,12 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. mWXPerformance.useScroller=1; } mWXPerformance.maxDeepViewLayer=getMaxDeepLayer(); - mWXPerformance.wxDims = mwxDims; - mWXPerformance.measureTimes = measureTimes; + mWXPerformance.wxDims = mwxDims; + mWXPerformance.measureTimes = measureTimes; if (mUserTrackAdapter != null) { mUserTrackAdapter.commit(mContext, null, IWXUserTrackAdapter.LOAD, mWXPerformance, getUserTrackParams()); } + WXAnalyzerDataTransfer.transferPerformance(mWXPerformance, getInstanceId()); isCommit=true; } // module listen Activity onActivityPause @@ -904,7 +910,12 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. Intent intent = new Intent(WXGlobalEventReceiver.EVENT_ACTION); intent.putExtra(WXGlobalEventReceiver.EVENT_NAME, Constants.Event.PAUSE_EVENT); intent.putExtra(WXGlobalEventReceiver.EVENT_WX_INSTANCEID, getInstanceId()); - mContext.sendBroadcast(intent); + //todo tmp solution for gray version + if (null != mContext){ + mContext.sendBroadcast(intent); + }else { + WXEnvironment.getApplication().sendBroadcast(intent); + } this.mCurrentGround = true; } } @@ -1040,6 +1051,10 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. public void onCreateFinish() { + if (null != mWXPerformance){ + mWXPerformance.callCreateFinishTime=System.currentTimeMillis()-mWXPerformance + .renderTimeOrigin; + } if (mContext != null) { runOnUiThread(new Runnable() { @@ -1133,6 +1148,23 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. } } + /** + * when add/rm element + */ + public void onElementChange(){ + if (isDestroy() || !mEnd ||null == mRenderContainer || mRenderContainer.isPageHasEvent() || + mWXPerformance == null){ + return; + } + long lazyLoadTime = System.currentTimeMillis()- mWXPerformance.renderTimeOrigin - mWXPerformance + .callCreateFinishTime; + if (lazyLoadTime > 8000){ + //bad case + return; + } + getWXPerformance().interactionTime = mWXPerformance.callCreateFinishTime + lazyLoadTime; + } + public void onRenderError(final String errCode, final String msg) { if (mRenderListener != null && mContext != null) { runOnUiThread(new Runnable() { @@ -1189,8 +1221,18 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. } } - public void callNativeTime(long time) { - mWXPerformance.callNativeTime += time; + public void callNativeTime(final long time) { + if (!mEnd){ + mWXPerformance.fsCallNativeTotalTime += time; + mWXPerformance.fsCallNativeTotalNum++; + } + } + + public void callJsTime(final long time){ + if (!mEnd){ + mWXPerformance.fsCallJsTotalTime+=time; + mWXPerformance.fsCallJsTotalNum++; + } } public void jsonParseTime(long time) { @@ -1198,7 +1240,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. } public void firstScreenRenderFinished() { - if(mEnd == true) + if(mEnd) return; mEnd = true; @@ -1217,6 +1259,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. } mWXPerformance.screenRenderTime = System.currentTimeMillis() - mRenderStartTime; + mWXPerformance.fsRenderTime = System.currentTimeMillis(); WXLogUtils.renderPerformanceLog("firstScreenRenderFinished", mWXPerformance.screenRenderTime); WXLogUtils.renderPerformanceLog(" firstScreenJSFExecuteTime", mWXPerformance.firstScreenJSFExecuteTime); WXLogUtils.renderPerformanceLog(" firstScreenCallNativeTime", mWXPerformance.callNativeTime); @@ -1347,6 +1390,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. if(templateRef != null){ templateRef = null; } + mWXPerformance.afterInstanceDestroy(mInstanceId); } } @@ -1486,6 +1530,9 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. } public void fireEvent(String elementRef,final String type, final Map<String, Object> data,final Map<String, Object> domChanges, List<Object> eventArgs, EventResult callback) { + if (null != mWXPerformance && mWXPerformance.fsCallEventTotalNum<Integer.MAX_VALUE){ + mWXPerformance.fsCallEventTotalNum++; + } WXBridgeManager.getInstance().fireEventOnNode(getInstanceId(),elementRef,type,data,domChanges, eventArgs, callback); } /** @@ -1615,6 +1662,21 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. mMaxDeepLayer = maxDeepLayer; } + public int getMaxDomDeep() { + return mMaxVDomDeepLayer; + } + + public void setMaxDomDeep(int maxDomDeep){ + mMaxVDomDeepLayer = maxDomDeep; + mWXPerformance.maxDeepVDomLayer = maxDomDeep; + } + + public void onHttpStart(){ + if (!mEnd){ + mWXPerformance.fsRequestNum++; + } + } + /** * load bundle js listener */ @@ -1645,7 +1707,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. event.submit(); } } - + public void setSDKInstance(WXSDKInstance instance) { this.instance = instance; } @@ -1655,6 +1717,7 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. if (this.instance != null && this.instance.getWXStatisticsListener() != null) { this.instance.getWXStatisticsListener().onHttpStart(); + this.instance.onHttpStart(); } } @@ -1720,9 +1783,17 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. mWXPerformance.syncTaskTime=syncTaskTime instanceof Long ?(long)syncTaskTime:0; Object requestType=response.extendParams.get("requestType"); - mWXPerformance.requestType=requestType instanceof String?(String)requestType:""; + mWXPerformance.requestType=requestType instanceof String?(String)requestType:"none"; + + Object cacheType = response.extendParams.get(Dimension.cacheType.toString()); + if(cacheType instanceof String){ + mWXPerformance.cacheType = (String) cacheType; + } - if("network".equals(requestType) && mUserTrackAdapter!=null){ + Object zCacheInfo = response.extendParams.get("zCacheInfo"); + mWXPerformance.zCacheInfo = zCacheInfo instanceof String?(String)zCacheInfo:""; + + if(isNet(mWXPerformance.requestType) && mUserTrackAdapter!=null){ WXPerformance performance=new WXPerformance(); if(!TextUtils.isEmpty(mBundleUrl)){ try { @@ -1737,27 +1808,10 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. performance.appendErrMsg("|"); performance.appendErrMsg(response.errorMsg); - WXExceptionUtils.commitCriticalExceptionRT(getInstanceId(), - WXErrorCode.WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED.getErrorCode(), - "WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED", WXErrorCode.WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED.getErrorMsg() + - "\n response.errorCode=" + response.errorCode + - "\n response.errorMsg=" + response.errorMsg + - "\n response=" + getTemplateInfo(), - null); - }else if("200".equals(response.statusCode) && (response.originalData==null || response.originalData.length<=0)){ performance.errCode=WXErrorCode.WX_ERR_JSBUNDLE_DOWNLOAD.getErrorCode(); performance.appendErrMsg(response.statusCode); performance.appendErrMsg("|template is null!"); - - WXExceptionUtils.commitCriticalExceptionRT(getInstanceId(), - WXErrorCode.WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED.getErrorCode(), - "WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED_TEMPLATE_NULL", WXErrorCode.WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED.getErrorMsg() + - "\n response.errorCode=" + response.errorCode + - "\n response.errorMsg=" + response.errorMsg + - "\n response=" + getTemplateInfo(), - null); - }else { performance.errCode=WXErrorCode.WX_SUCCESS.getErrorCode(); } @@ -1773,10 +1827,10 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. render(pageName, template, options, jsonInitData, flag); // check content-type - } else if (TextUtils.equals(WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR.getDegradErrorCode(), + } else if (TextUtils.equals(WXErrorCode.WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR.getErrorCode(), response.statusCode)) { WXLogUtils.e("user intercept: WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR"); - onRenderError(WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR.getDegradErrorCode(), + onRenderError(WXErrorCode.WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR.getErrorCode(), "|response.errorMsg==" + response.errorMsg + "|instance.getTemplateInfo == \n" + instance.getTemplateInfo() + "|instance bundleUrl = \n" + instance.getBundleUrl() + @@ -1787,18 +1841,25 @@ public class WXSDKInstance implements IWXActivityStateListener,DomContext, View. } else if (response!=null && response.originalData!=null && TextUtils.equals("-206", response.statusCode)) { WXLogUtils.e("user intercept: WX_DEGRAD_ERR_NETWORK_CHECK_CONTENT_LENGTH_FAILED"); onRenderError( - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_NETWORK_CHECK_CONTENT_LENGTH_FAILED.getDegradErrorCode(), - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_NETWORK_CHECK_CONTENT_LENGTH_FAILED.getDegradErrorMsg() + + WXErrorCode.WX_DEGRAD_ERR_NETWORK_CHECK_CONTENT_LENGTH_FAILED.getErrorCode(), + WXErrorCode.WX_DEGRAD_ERR_NETWORK_CHECK_CONTENT_LENGTH_FAILED.getErrorCode() + "|response.errorMsg==" + response.errorMsg + "|instance.getTemplateInfo == \n" + instance.getTemplateInfo()); } else { - onRenderError(WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getDegradErrorCode(), + onRenderError(WXErrorCode.WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED.getErrorCode(), response.errorMsg); } } } + private boolean isNet(String requestType){ + + return "network".equals(requestType) || "2g".equals(requestType) || "3g".equals(requestType) + || "4g".equals(requestType) || "wifi".equals(requestType) || "other".equals(requestType) + || "unknown".equals(requestType); + } + /** * return md5, and bytes length * */ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java index 8c61f71..b9a0913 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKManager.java @@ -49,6 +49,7 @@ import com.taobao.weex.common.WXRuntimeException; import com.taobao.weex.common.WXThread; import com.taobao.weex.common.WXWorkThreadManager; import com.taobao.weex.dom.WXDomManager; +import com.taobao.weex.performance.IWXAnalyzer; import com.taobao.weex.ui.WXRenderManager; import com.taobao.weex.utils.WXLogUtils; import com.taobao.weex.utils.WXUtils; @@ -79,6 +80,7 @@ public class WXSDKManager { private IWXHttpAdapter mIWXHttpAdapter; private IActivityNavBarSetter mActivityNavBarSetter; private IWXAccessibilityRoleAdapter mRoleAdapter; + private List<IWXAnalyzer> mWXAnalyzerList; private ICrashInfoReporter mCrashInfo; @@ -107,6 +109,7 @@ public class WXSDKManager { mWXDomManager = new WXDomManager(mWXRenderManager); mBridgeManager = WXBridgeManager.getInstance(); mWXWorkThreadManager = new WXWorkThreadManager(); + mWXAnalyzerList = new ArrayList<>(); } /** @@ -358,6 +361,20 @@ public class WXSDKManager { return mIWXSoLoaderAdapter; } + public List<IWXAnalyzer> getWXAnalyzerList(){ + return mWXAnalyzerList; + } + + public void addWXAnalyzer(IWXAnalyzer analyzer){ + if (!mWXAnalyzerList.contains(analyzer)) { + mWXAnalyzerList.add(analyzer); + } + } + + public void rmWXAnalyzer(IWXAnalyzer analyzer){ + mWXAnalyzerList.remove(analyzer); + } + void setInitConfig(InitConfig config){ this.mIWXHttpAdapter = config.getHttpAdapter(); this.mIWXImgLoaderAdapter = config.getImgAdapter(); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java ---------------------------------------------------------------------- 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 fca40d9..9e5d280 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 @@ -28,12 +28,13 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.util.ArrayMap; import android.text.TextUtils; +import android.view.View; +import android.view.ViewGroup; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.taobao.weex.WXEnvironment; -import com.taobao.weex.WXRenderErrorCode; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKManager; import com.taobao.weex.adapter.IWXJSExceptionAdapter; @@ -45,6 +46,7 @@ import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.common.WXException; import com.taobao.weex.common.WXJSBridgeMsgType; import com.taobao.weex.common.WXJSExceptionInfo; +import com.taobao.weex.common.WXPerformance; import com.taobao.weex.common.WXRefreshData; import com.taobao.weex.common.WXRuntimeException; import com.taobao.weex.common.WXThread; @@ -383,7 +385,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { String err = "[WXBridgeManager] callNative exception: " + WXLogUtils.getStackTrace(e); WXLogUtils.e(err); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callNativeModule", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeModule", err, null); } @@ -415,7 +417,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { String err = "[WXBridgeManager] callNative exception: " + WXLogUtils.getStackTrace(e); WXLogUtils.e(err); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callNativeModule", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeModule", err, null); } @@ -437,7 +439,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callNative exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callNativeComponent", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNativeComponent", WXLogUtils.getStackTrace(e), null); } return null; @@ -455,7 +457,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { String err = "[WXBridgeManager] callNative: call Native tasks is null"; WXLogUtils.e(err); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callNative", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNative", err + "| INSTANCE_RENDERING_ERROR will be set", null); return IWXBridge.INSTANCE_RENDERING_ERROR; @@ -511,7 +513,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callNative exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callNative", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callNative", WXLogUtils.getStackTrace(e) , null); } } @@ -531,7 +533,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { WXLogUtils.d("[WXBridgeManager] callCreateBody: call CreateBody tasks is null"); // } WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callCreateBody", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callCreateBody", "tasks is empty, INSTANCE_RENDERING_ERROR will be set", null); return IWXBridge.INSTANCE_RENDERING_ERROR; @@ -569,7 +571,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callCreateBody exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callCreateBody", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callCreateBody", WXLogUtils.getStackTrace(e), null); } @@ -604,7 +606,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callUpdateFinish exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callUpdateFinish", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateFinish", WXLogUtils.getStackTrace(e), null); } @@ -638,7 +640,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callCreateFinish exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callUpdateFinish", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateFinish", WXLogUtils.getStackTrace(e), null); } @@ -673,7 +675,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callRefreshFinish exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callRefreshFinish", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callRefreshFinish", WXLogUtils.getStackTrace(e), null); } @@ -691,7 +693,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { if (TextUtils.isEmpty(task)) { WXLogUtils.e("[WXBridgeManager] callUpdateAttrs: call UpdateAttrs tasks is null"); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callUpdateAttrs", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateAttrs", "call UpdateAttrs tasks is null| INSTANCE_RENDERING_ERROR will be set", null); return IWXBridge.INSTANCE_RENDERING_ERROR; @@ -729,7 +731,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callUpdateAttrs exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callUpdateAttrs", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateAttrs", WXLogUtils.getStackTrace(e), null); } @@ -747,7 +749,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { if (TextUtils.isEmpty(task)) { WXLogUtils.e("[WXBridgeManager] callUpdateStyle: call UpdateStyle tasks is null"); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callUpdateStyle", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateStyle", "task is empty", null); return IWXBridge.INSTANCE_RENDERING_ERROR; } @@ -784,7 +786,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callUpdateStyle exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callUpdateStyle", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callUpdateStyle", WXLogUtils.getStackTrace(e), null); } @@ -823,7 +825,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callRemoveElement exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callRemoveElement", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callRemoveElement", WXLogUtils.getStackTrace(e), null); } @@ -860,7 +862,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callMoveElement exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callMoveElement", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callMoveElement", WXLogUtils.getStackTrace(e), null); } @@ -900,7 +902,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callAddEvent exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callAddEvent", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callAddEvent", WXLogUtils.getStackTrace(e), null); } @@ -939,7 +941,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callRemoveEvent exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callAddEvent", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callAddEvent", WXLogUtils.getStackTrace(e), null); } @@ -1037,7 +1039,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Exception e) { WXLogUtils.e("[WXBridgeManager] callReloadPage exception: ", e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "callReloadPage", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "callReloadPage", WXLogUtils.getStackTrace(e), null); } return IWXBridge.INSTANCE_RENDERING_ERROR; @@ -1415,8 +1417,8 @@ public class WXBridgeManager implements Callback, BactchExecutor { WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId); if (instance != null) { instance.onRenderError( - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorCode(), - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorMsg() + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(), + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() + "invokeRefreshInstance FAILED for JSFrameworkInit FAILED, intance will invoke instance.onRenderError" ); } @@ -1443,7 +1445,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Throwable e) { String err = "[WXBridgeManager] invokeRefreshInstance " + WXLogUtils.getStackTrace(e); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "invokeRefreshInstance", + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "invokeRefreshInstance", err, null); WXLogUtils.e(err); } @@ -1509,7 +1511,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { extParams.put("jscCrashStack", errMsg); IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter(); if (adapter != null) { - WXJSExceptionInfo jsException = new WXJSExceptionInfo(instanceId, url, errorCode.getErrorCode(), method, exception, extParams); + WXJSExceptionInfo jsException = new WXJSExceptionInfo(instanceId, url, errorCode, method, exception, extParams); adapter.onJSException(jsException); // if (WXEnvironment.isApkDebugable()) { WXLogUtils.e(jsException.toString()); @@ -1529,8 +1531,8 @@ public class WXBridgeManager implements Callback, BactchExecutor { } if (TextUtils.isEmpty(instanceId) || TextUtils.isEmpty(template) || mJSHandler == null) { instance.onRenderError( - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorCode(), - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorMsg() + + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(), + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() + " instanceId==" + instanceId + " template ==" + template + " mJSHandler== " + mJSHandler.toString() ); return; @@ -1538,8 +1540,8 @@ public class WXBridgeManager implements Callback, BactchExecutor { if (!isJSFrameworkInit() && reInitCount == 1 && !WXEnvironment.sDebugServerConnectable) { instance.onRenderError( - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorCode(), - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorMsg() + + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(), + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() + " isJSFrameworkInit==" + isJSFrameworkInit() + " reInitCount == 1" ); post(new Runnable() { @Override @@ -1556,11 +1558,13 @@ public class WXBridgeManager implements Callback, BactchExecutor { public void run() { long start = System.currentTimeMillis(); invokeCreateInstance(instance, template, options, data); - final long totalTime = System.currentTimeMillis() - start; + final long endTime = System.currentTimeMillis(); + final long totalTime = endTime- start; WXSDKManager.getInstance().postOnUiThread(new Runnable() { @Override public void run() { + instance.getWXPerformance().callCreateInstanceTime = endTime; instance.createInstanceFinished(totalTime); } }, 0); @@ -1579,8 +1583,8 @@ public class WXBridgeManager implements Callback, BactchExecutor { if (!isJSFrameworkInit()) { String err = "[WXBridgeManager] invokeCreateInstance: framework.js uninitialized."; instance.onRenderError( - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorCode(), - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorMsg() + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(), + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() ); WXLogUtils.e(err); return; @@ -1610,8 +1614,8 @@ public class WXBridgeManager implements Callback, BactchExecutor { + instance.getTemplateInfo(); instance.onRenderError( - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorCode(), - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorMsg() + err); + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(), + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() + err); WXLogUtils.e(err); } } @@ -1658,7 +1662,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Throwable e) { String err = "[WXBridgeManager] invokeDestroyInstance " + e.getCause(); WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE.getErrorCode(), "invokeDestroyInstance", err, null); + WXErrorCode.WX_KEY_EXCEPTION_INVOKE, "invokeDestroyInstance", err, null); WXLogUtils.e(err); } } @@ -1713,7 +1717,12 @@ public class WXBridgeManager implements Callback, BactchExecutor { WXLogUtils.d(mLodBuilder.substring(0)); mLodBuilder.setLength(0); } + final long start = System.currentTimeMillis(); mWXBridge.execJS(instanceId, namespace, function, args); + WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId); + if (null != instance){ + instance.callJsTime(System.currentTimeMillis()-start); + } } private byte[] invokeExecJSWithResult(String instanceId, String namespace, String function, @@ -1766,7 +1775,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } if (TextUtils.isEmpty(framework)) { setJSFrameworkInit(false); - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK.getErrorCode(), + WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK, "initFramework", "framework is empty!! ", null); return; } @@ -1809,23 +1818,23 @@ public class WXBridgeManager implements Callback, BactchExecutor { String reinitInfo = ""; if (reInitCount > 1) { reinitInfo = "reinit Framework:"; - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_REINIT_SUCCESS.getErrorCode(), + WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_REINIT_SUCCESS, "initFramework", reinitInfo + "success", null); } else { - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_INIT_SUCCESS.getErrorCode(), - "initFramework", reinitInfo + "success", null); +// WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_JS_FRAMEWORK_INIT_SUCCESS.getErrorCode(), +// "initFramework", reinitInfo + "success", null); } } else { if (reInitCount > 1) { WXLogUtils.e("[WXBridgeManager] invokeReInitFramework ExecuteJavaScript fail"); String err = "[WXBridgeManager] invokeReInitFramework ExecuteJavaScript fail reinit FrameWork"; - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK.getErrorCode(), + WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK, "initFramework", "reInitCount = " + reInitCount + err, null); } else { WXLogUtils.e("[WXBridgeManager] invokeInitFramework ExecuteJavaScript fail"); String err = "[WXBridgeManager] invokeInitFramework ExecuteJavaScript fail"; - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK.getErrorCode(), + WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK, "initFramework", err, null); } } @@ -1833,12 +1842,12 @@ public class WXBridgeManager implements Callback, BactchExecutor { if (reInitCount > 1) { WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e); String err = "[WXBridgeManager] invokeInitFramework reinit FrameWork exception!#" + e.toString(); - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK.getErrorCode(), + WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_REINIT_FRAMEWORK, "initFramework", "reInitCount ==" + reInitCount + err, null); } else { WXLogUtils.e("[WXBridgeManager] invokeInitFramework ", e); String err = "[WXBridgeManager] invokeInitFramework exception!#" + e.toString(); - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK.getErrorCode(), + WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK, "initFramework", err, null); } } @@ -1883,7 +1892,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Throwable e) { WXLogUtils.e("WXBridgeManager", e); String err = "invokeCallJSBatch#" + WXLogUtils.getStackTrace(e); - WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK.getErrorCode(), + WXExceptionUtils.commitCriticalExceptionRT(null, WXErrorCode.WX_ERR_JS_FRAMEWORK, "invokeCallJSBatch", err, null); } @@ -2016,7 +2025,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { data.put("inputParams",service + "||" + receiver.toString()); WXExceptionUtils.commitCriticalExceptionRT("invokeExecJSService", - WXErrorCode.WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE.getErrorCode(), + WXErrorCode.WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE, "invokeExecJSService", WXErrorCode.WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE.getErrorMsg() + "[WXBridgeManager] invokeRegisterService:" @@ -2044,7 +2053,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { mWXBridge.execJS("", null, METHOD_REGISTER_MODULES, args); } catch (Throwable e) { WXExceptionUtils.commitCriticalExceptionRT(null, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES.getErrorCode(), + WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES, "invokeRegisterModules", WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES.getErrorMsg() + " \n " + e.getMessage() + modules.entrySet().toString(), null ); @@ -2076,7 +2085,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { } catch (Throwable e) { WXLogUtils.e("[WXBridgeManager] invokeRegisterComponents ", e); WXExceptionUtils.commitCriticalExceptionRT(null, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED.getErrorCode(), + WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED, METHOD_REGISTER_COMPONENTS, WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED.getErrorMsg() + args.toString() @@ -2118,12 +2127,14 @@ public class WXBridgeManager implements Callback, BactchExecutor { return; } else { instance.onRenderError(//DegradPassivity to H5 - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorCode(), - WXRenderErrorCode.DegradPassivityCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getDegradErrorMsg() + + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorCode(), + WXErrorCode.WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED.getErrorMsg() + "reportJSException >>>> instanceId:" + instanceId + ", exception function:" + function + ", exception:" + exception ); + //doReportJSException(instanceId,function,exception); + WXExceptionUtils.commitCriticalExceptionRT(instanceId,WXErrorCode.WX_RENDER_ERR_JS_CREATE_INSTANCE,function,exception,null); return; } } catch (Exception e) { @@ -2132,10 +2143,13 @@ public class WXBridgeManager implements Callback, BactchExecutor { } instance.onJSException(WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception); } + doReportJSException(instanceId,function,exception); + } + private void doReportJSException(String instanceId, String function, String exception){ + WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId); IWXJSExceptionAdapter adapter = WXSDKManager.getInstance().getIWXJSExceptionAdapter(); if (adapter != null) { - String bundleUrl; String exceptionId = instanceId; if (instanceId == "" || instanceId == null) { @@ -2144,7 +2158,6 @@ public class WXBridgeManager implements Callback, BactchExecutor { if (instance == null) { if (("initFramework").equals(function)) { - bundleUrl = "jsExceptionBeforeRenderInstanceNull"; String exceptionExt = null; try { if (WXEnvironment.getApplication() != null) { @@ -2170,7 +2183,7 @@ public class WXBridgeManager implements Callback, BactchExecutor { file.delete(); } } catch (Throwable throwable) { - + throwable.printStackTrace(); } } } catch (Throwable e) { @@ -2179,25 +2192,45 @@ public class WXBridgeManager implements Callback, BactchExecutor { exception += "\n" + exceptionExt; WXLogUtils.e("reportJSException:" + exception); - } else if (function == null) { - bundleUrl = "jsExceptionInstanceAndFunctionNull"; - } else { - bundleUrl = "jsExceptionInstanceNull" + function; } - } else { - bundleUrl = instance.getBundleUrl(); } -// WXJSExceptionInfo jsException = new WXJSExceptionInfo(exceptionId, bundleUrl, WXErrorCode.WX_ERR_JS_EXECUTE.getErrorCode(), function, exception, null); -// adapter.onJSException(jsException); + if (checkEmptyScreen(instance)){ + if (WXEnvironment.isApkDebugable()){ + WXLogUtils.d("render error 4 js error !"); + } + WXExceptionUtils.commitCriticalExceptionRT(exceptionId, WXErrorCode.WX_RENDER_ERR_JS_RUNTIME, + function, + WXErrorCode.WX_RENDER_ERR_JS_RUNTIME.getErrorMsg() + exception, + null); + } else { + WXExceptionUtils.commitCriticalExceptionRT(exceptionId, WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE, + function, + WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE.getErrorMsg() + exception, + null); + } + } + } + + private boolean checkEmptyScreen(WXSDKInstance instance){ + if (null == instance || instance.isDestroy()){ + return false; + } - WXExceptionUtils.commitCriticalExceptionRT(exceptionId, WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE.getErrorCode(), - function, - WXErrorCode.WX_KEY_EXCEPTION_WXBRIDGE.getErrorMsg() + exception, - null); + View rootView = instance.getRootView(); + if (null == rootView){ + return true; + } + + if (rootView instanceof ViewGroup){ + return ((ViewGroup) rootView).getChildCount() > 0; + }else { + return false; } } + + private void registerDomModule() throws WXException { /** Tell Javascript Framework what methods you have. This is Required.**/ Map<String, Object> domMap = new HashMap<>(); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java index 9e87e6a..9c6273d 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXModuleManager.java @@ -171,7 +171,7 @@ public class WXModuleManager { } } catch (Exception e) { WXExceptionUtils.commitCriticalExceptionRT(instanceId, - WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED.getErrorCode(), + WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED, "callModuleMethod", WXErrorCode.WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED.getErrorMsg() + "callModuleMethod >>> invoke module:" + moduleStr + ", method:" + methodStr + " failed. " http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/common/WXErrorCode.java ---------------------------------------------------------------------- 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 36a03db..2bd2d16 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 @@ -18,29 +18,32 @@ */ package com.taobao.weex.common; + public enum WXErrorCode { + + /* * environment **/ /** * Failure for load so library */ - WX_ERR_LOAD_SO("-2001", "load so error"), + WX_ERR_LOAD_SO("-2001", "load so error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for load JSLib */ - WX_ERR_LOAD_JSLIB("-2002", "unzip JSLib error!"), + WX_ERR_LOAD_JSLIB("-2002", "unzip JSLib error!",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * So library corrupted */ - WX_ERR_BAD_SO("-2003", "so size error, to reload apk so"), + WX_ERR_BAD_SO("-2003", "so size error, to reload apk so",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for extract and copy so from apk */ - WX_ERR_COPY_FROM_APK("-2007", "system load so errorï¼copy from APK also error!"), + WX_ERR_COPY_FROM_APK("-2007", "system load so errorï¼copy from APK also error!",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * jsBridge @@ -48,171 +51,230 @@ public enum WXErrorCode { /** * Error for JavaScript function parameter */ - WX_ERR_JSFUNC_PARAM("-2009", "JS params error!"), + WX_ERR_JSFUNC_PARAM("-2009", "JS params error!",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Error for parsing JSON object */ - WX_ERR_JSON_OBJECT("-2008", "transform JSON->OBJ error!"), + WX_ERR_JSON_OBJECT("-2008", "transform JSON->OBJ error!",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for invoking JavaScript function */ - WX_ERR_INVOKE_NATIVE("-2012", "Native-> Call ->JS error!"), + WX_ERR_INVOKE_NATIVE("-2012", "Native-> Call ->JS error!",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for executing JavaScript function. */ - WX_ERR_JS_EXECUTE("-2013", "JavaScript execute error!"), + WX_ERR_JS_EXECUTE("-2013", "JavaScript execute error!",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /* * domModule **/ - WX_SUCCESS("0", "successful"), + WX_SUCCESS("0", "successful",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for createBody */ - WX_ERR_DOM_CREATEBODY("-2100", "createBody error"), + WX_ERR_DOM_CREATEBODY("-2100", "createBody error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for updateAttrs */ - WX_ERR_DOM_UPDATEATTRS("-2101", "updateAttrs error"), + WX_ERR_DOM_UPDATEATTRS("-2101", "updateAttrs error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for updateAttr */ - WX_ERR_DOM_UPDATESTYLE("-2102", "updateStyle error"), + WX_ERR_DOM_UPDATESTYLE("-2102", "updateStyle error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for addElement */ - WX_ERR_DOM_ADDELEMENT("-2103", "addElement error"), + WX_ERR_DOM_ADDELEMENT("-2103", "addElement error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for removeElement */ - WX_ERR_DOM_REMOVEELEMENT("-2104", "removeElement error"), + WX_ERR_DOM_REMOVEELEMENT("-2104", "removeElement error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for moveElement */ - WX_ERR_DOM_MOVEELEMENT("-2105", "moveElement error"), + WX_ERR_DOM_MOVEELEMENT("-2105", "moveElement error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for addEvent */ - WX_ERR_DOM_ADDEVENT("-2106", "addEvent error"), + WX_ERR_DOM_ADDEVENT("-2106", "addEvent error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for removeEvent */ - WX_ERR_DOM_REMOVEEVENT("-2107", "removeEvent error"), + WX_ERR_DOM_REMOVEEVENT("-2107", "removeEvent error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for invoking createFinish */ - WX_ERROR_DOM_CREATEFINISH("-2108", "createFinish error"), + WX_ERROR_DOM_CREATEFINISH("-2108", "createFinish error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for invoking refreshFinish */ - WX_ERROR_DOM_REFRESHFINISH("-2109", "refreshFinish error"), + WX_ERROR_DOM_REFRESHFINISH("-2109", "refreshFinish error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * Failure for scrollToElement */ - WX_ERR_DOM_SCROLLTO("-2110", "scrollToElement"), + WX_ERR_DOM_SCROLLTO("-2110", "scrollToElement",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * */ - WX_ERR_RELOAD_PAGE("-2111", "reloadPage"), + WX_ERR_RELOAD_PAGE("-2111", "reloadPage",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * */ - WX_ERR_JSC_CRASH("-2112", "weexjscCrash"), + WX_ERR_JSC_CRASH("-2112", "weexjscCrash",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** *dom actions invalid for native */ - WX_ERR_FIRST_DOM_ACTION_EXCEPTION("-2113", "dom action is invalid "), + WX_ERR_FIRST_DOM_ACTION_EXCEPTION("-2113", "dom action is invalid ",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * JS Bundle download error */ - WX_ERR_JSDOWNLOAD_START("-2201", "js bundle download start"), + WX_ERR_JSDOWNLOAD_START("-2201", "js bundle download start",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), - WX_ERR_JSBUNDLE_DOWNLOAD("-2299", "js bundle download err"), + WX_ERR_JSBUNDLE_DOWNLOAD("-2299", "js bundle download err",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), - WX_ERR_JSBUNDLE_EMPTY("-2203", "js bundle empty"), + WX_ERR_JSBUNDLE_EMPTY("-2203", "js bundle empty",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), - WX_ERR_JSDOWNLOAD_END("-2299", "js bundle download end"), + WX_ERR_JSDOWNLOAD_END("-2299", "js bundle download end",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), // for js framework - WX_JS_FRAMEWORK_INIT_SUCCESS("-1000", "js framework success"), + WX_JS_FRAMEWORK_INIT_SUCCESS("-1000", "js framework success",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), - WX_JS_FRAMEWORK_REINIT_SUCCESS("-1001", "js framework reinit success"), + WX_JS_FRAMEWORK_REINIT_SUCCESS("-1001", "js framework reinit success",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * JS Framework run error */ - WX_ERR_JS_FRAMEWORK("-1002", "js framework error"), + WX_ERR_JS_FRAMEWORK("-1002", "js framework error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), - WX_ERR_JS_REINIT_FRAMEWORK("-1003", "js reinit framework error"), + WX_ERR_JS_REINIT_FRAMEWORK("-1003", "js reinit framework error",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * WX Key Exception Commit RT SDK Init */ - WX_KEY_EXCEPTION_SDK_INIT("-9000", "[WX_KEY_EXCEPTION_SDK_INIT]"), - WX_KEY_EXCEPTION_SDK_INIT_CPU_NOT_SUPPORT("-9001", "[WX_KEY_EXCEPTION_SDK_INIT_CPU_NOT_SUPPORT] for android cpu is x86"), - WX_KEY_EXCEPTION_SDK_INIT_TABLE_NOT_SUPPORT("-9002", "[WX_KEY_EXCEPTION_SDK_INIT_TABLE_NOT_SUPPORT] for device isTabletDevice"), - WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED("-9003", "[WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED] for jsfm init failed|detail error is:"), + WX_KEY_EXCEPTION_SDK_INIT("-9000", "[WX_KEY_EXCEPTION_SDK_INIT]",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_SDK_INIT_CPU_NOT_SUPPORT("-9001", "[WX_KEY_EXCEPTION_SDK_INIT_CPU_NOT_SUPPORT] for android cpu is x86",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_SDK_INIT_TABLE_NOT_SUPPORT("-9002", "[WX_KEY_EXCEPTION_SDK_INIT_TABLE_NOT_SUPPORT] for device isTabletDevice",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED("-9003", "[WX_KEY_EXCEPTION_SDK_INIT_JSFM_INIT_FAILED] for jsfm init failed|detail error is:",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * WX Key Exception Commit RT Register */ - WX_KEY_EXCEPTION_INVOKE("-9100", "[WX_KEY_EXCEPTION_INVOKE]"), - WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED("-9101", "[WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED] details"), - WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE("-9102", "[WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE] details"), - WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES("-9103", "[WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES] details"), + WX_KEY_EXCEPTION_INVOKE("-9100", "[WX_KEY_EXCEPTION_INVOKE]",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED("-9101", "[WX_KEY_EXCEPTION_INVOKE_REGISTER_CONTENT_FAILED] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE("-9102", "[WX_KEY_EXCEPTION_INVOKE_JSSERVICE_EXECUTE] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES("-9103", "[WX_KEY_EXCEPTION_INVOKE_REGISTER_MODULES] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * WX Key Exception Commit Bundle Js Download */ - WX_KEY_EXCEPTION_JS_DOWNLOAD("-9200", "[WX_KEY_EXCEPTION_JS_DOWNLOAD]|"), - WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED("-9201", "[WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED] | details"), + WX_KEY_EXCEPTION_JS_DOWNLOAD("-9200", "[WX_KEY_EXCEPTION_JS_DOWNLOAD]|",ErrorType.NATIVE_ERROR,ErrorGroup.NET), + WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED("-9201", "[WX_KEY_EXCEPTION_JS_DOWNLOAD_FAILED] | details",ErrorType.NATIVE_ERROR,ErrorGroup.NET), /** * WX Key Exception Commit RT DomAction Excute */ - WX_KEY_EXCEPTION_DOM("-9300", "[WX_KEY_EXCEPTION_DOM]"), - WX_KEY_EXCEPTION_DOM_ACTION_FIRST_ACTION("-9301", "[WX_KEY_EXCEPTION dom action exception] details: ACTION_FIRST_ACTION"), - WX_KEY_EXCEPTION_DOM_CREATE_BODY("-9302", "[WX_KEY_EXCEPTION dom action exception] details:CREATE_BODY"), - WX_KEY_EXCEPTION_DOM_UPDATE_ATTRS("-9303", "[WX_KEY_EXCEPTION dom action exception] details:UPDATE_ATTRS"), - WX_KEY_EXCEPTION_DOM_UPDATE_STYLE("-9304", "[WX_KEY_EXCEPTION dom action exception] details:UPDATE_STYLE"), - WX_KEY_EXCEPTION_DOM_REMOVE_ELEMENT("-9305", "[WX_KEY_EXCEPTION dom action exception] details:REMOVE_ELEMENT"), - WX_KEY_EXCEPTION_DOM_ADD_ELEMENT("-9306", "[WX_KEY_EXCEPTION dom action exception] details:ADD_ELEMENT"), - WX_KEY_EXCEPTION_DOM_MOVE_ELEMENT("-9307", "[WX_KEY_EXCEPTION dom action exception] details:MOVE_ELEMENT"), - WX_KEY_EXCEPTION_DOM_ADD_EVENT("-9308", "[WX_KEY_EXCEPTION dom action exception] details:DOM_ADD_EVENT"), - WX_KEY_EXCEPTION_DOM_REMOVE_EVENT("-9309", "[WX_KEY_EXCEPTION dom action exception] details:DOM_REMOVE_EVENT"), - WX_KEY_EXCEPTION_DOM_CREATE_FINISH("-9310", "[WX_KEY_EXCEPTION dom action exception] details:CREATE_FINISH"), - WX_KEY_EXCEPTION_DOM_REFRESH_FINISH("-9311", "[WX_KEY_EXCEPTION dom action exception] details:REFRESH_FINISH"), - WX_KEY_EXCEPTION_DOM_ADD_RULE("-9313", "[WX_KEY_EXCEPTION_DOM_ADD_RULE] details"), - WX_KEY_EXCEPTION_DOM_GET_COMPONENT_RECT("-9314", "[WX_KEY_EXCEPTION_DOM_GET_COMPONENT_RECT] details"), - WX_KEY_EXCEPTION_DOM_INVOKE_METHOD("-9315", "[WX_KEY_EXCEPTION_DOM_INVOKE_METHOD] details"), - WX_KEY_EXCEPTION_DOM_ANIMATION("-9316", "[WX_KEY_EXCEPTION_DOM_ANIMATION] details"), - WX_KEY_EXCEPTION_DOM_MODULEINVO("-9317", "[WX_KEY_EXCEPTION_DOM_MODULEINVO] details"), + WX_KEY_EXCEPTION_DOM("-9300", "[WX_KEY_EXCEPTION_DOM]",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_ACTION_FIRST_ACTION("-9301", "[WX_KEY_EXCEPTION dom action exception] details: ACTION_FIRST_ACTION",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_CREATE_BODY("-9302", "[WX_KEY_EXCEPTION dom action exception] details:CREATE_BODY",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_UPDATE_ATTRS("-9303", "[WX_KEY_EXCEPTION dom action exception] details:UPDATE_ATTRS",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_UPDATE_STYLE("-9304", "[WX_KEY_EXCEPTION dom action exception] details:UPDATE_STYLE",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_REMOVE_ELEMENT("-9305", "[WX_KEY_EXCEPTION dom action exception] details:REMOVE_ELEMENT",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_ADD_ELEMENT("-9306", "[WX_KEY_EXCEPTION dom action exception] details:ADD_ELEMENT",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_MOVE_ELEMENT("-9307", "[WX_KEY_EXCEPTION dom action exception] details:MOVE_ELEMENT",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_ADD_EVENT("-9308", "[WX_KEY_EXCEPTION dom action exception] details:DOM_ADD_EVENT",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_REMOVE_EVENT("-9309", "[WX_KEY_EXCEPTION dom action exception] details:DOM_REMOVE_EVENT",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_CREATE_FINISH("-9310", "[WX_KEY_EXCEPTION dom action exception] details:CREATE_FINISH",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_REFRESH_FINISH("-9311", "[WX_KEY_EXCEPTION dom action exception] details:REFRESH_FINISH",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_ADD_RULE("-9313", "[WX_KEY_EXCEPTION_DOM_ADD_RULE] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_GET_COMPONENT_RECT("-9314", "[WX_KEY_EXCEPTION_DOM_GET_COMPONENT_RECT] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_INVOKE_METHOD("-9315", "[WX_KEY_EXCEPTION_DOM_INVOKE_METHOD] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_ANIMATION("-9316", "[WX_KEY_EXCEPTION_DOM_ANIMATION] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), + WX_KEY_EXCEPTION_DOM_MODULEINVO("-9317", "[WX_KEY_EXCEPTION_DOM_MODULEINVO] details",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE), /** * WX Key Exception Commit RT JsBridge eg. js excute runtime error */ - WX_KEY_EXCEPTION_WXBRIDGE("-9400", "[js excute runtime error] detail js stack \n"), - WX_KEY_EXCEPTION_WXBRIDGE_EXCEPTION("-9401", "[js excute runtime error] detail js stack \n"); + WX_KEY_EXCEPTION_WXBRIDGE("-9400", "[js excute runtime error] detail js stack \n",ErrorType.JS_ERROR,ErrorGroup.JS), + WX_KEY_EXCEPTION_WXBRIDGE_EXCEPTION("-9401", "[js excute runtime error] detail js stack \n",ErrorType.JS_ERROR,ErrorGroup.JS), + + /** + * 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), + + + /** + * degrade code. + */ + WX_DEGRAD_ERR("-1000", "degradeToH5|Weex DegradPassivity \n",ErrorType.DEGRAD_ERROR,ErrorGroup.JS), + + /** + * degrade for instance create failed, once this case occured,detail js stack and other specific + * cause need track into errmsg. + */ + WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED("-1001", "degradeToH5|createInstance fail|wx_create_instance_error",ErrorType.DEGRAD_ERROR,ErrorGroup.NATIVE), + + /** + * degrade for network failed download js bundle.once this case occured,network requist response header + * and statuscode need track into errmsg. + */ + WX_DEGRAD_ERR_NETWORK_BUNDLE_DOWNLOAD_FAILED("-1002", "|wx_network_error|js bundle download failed",ErrorType.DEGRAD_ERROR,ErrorGroup.NET), + + /** + * degrade for network failed for bundlejs is unbroken , once this case occured,network requist response header + * and statuscode need track into errmsg. + */ + WX_DEGRAD_ERR_NETWORK_CHECK_CONTENT_LENGTH_FAILED("-1003", "degradeToH5|wx_network_error|js bundle content-length check failed",ErrorType.DEGRAD_ERROR,ErrorGroup.NET), + + /** + * degrade for Response header Content-Type is null or not "application/javascript". + * once this case occured,network requist response header and statuscode need track into errmsg. + */ + WX_DEGRAD_ERR_BUNDLE_CONTENTTYPE_ERROR("-1004", "degradeToH5|wx_user_intercept_error |Content-Type is not application/javascript, " + + "Weex render template must be javascript, please check your request!",ErrorType.DEGRAD_ERROR,ErrorGroup.NET), + + /** + * degrade for other reason. such as white screen which block error for some unknown reason. + * once this case occured,detail msg need track. + */ + WX_DEGRAD_ERR_OTHER_CAUSE_DEGRADTOH5("-1005", "degradeToH5|for other reason|",ErrorType.DEGRAD_ERROR,ErrorGroup.NATIVE), + + + WX_DEGRAD_ERR_INSTANCE_CREATE_FAILED_JS("-1006", "degradeToH5|createInstance fail|wx_create_instance_error",ErrorType.DEGRAD_ERROR,ErrorGroup.JS), + + + + /** + * TEST + */ + + WX_ERR_TEST("test", "test",ErrorType.NATIVE_ERROR,ErrorGroup.NATIVE); private String errorCode; private String errorMsg; private String appendMsg=""; private String args; + private ErrorType mErrorType; + private ErrorGroup mErrorGroup; - WXErrorCode(String errorCode, String errorMsg) { + WXErrorCode(String errorCode, String errorMsg,ErrorType errorType,ErrorGroup errorGroup) { this.errorCode = errorCode; this.errorMsg = errorMsg; + this.mErrorType = errorType; + this.mErrorGroup = errorGroup; } public void appendErrMsg(String err) { @@ -229,6 +291,14 @@ public enum WXErrorCode { return builder.toString(); } + public ErrorType getErrorType() { + return mErrorType; + } + + public ErrorGroup getErrorGroup() { + return mErrorGroup; + } + public String getArgs() { return args; } @@ -237,4 +307,16 @@ public enum WXErrorCode { this.args = args; } + public enum ErrorType{ + JS_ERROR, + NATIVE_ERROR, + RENDER_ERROR, + DEGRAD_ERROR + } + + public enum ErrorGroup{ + JS, + NATIVE, + NET + } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/495c7aca/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java b/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java index 723394c..6fd207e 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/WXJSExceptionInfo.java @@ -36,7 +36,7 @@ public class WXJSExceptionInfo { /** * error code */ - private String mErrCode; + private WXErrorCode mErrCode; /** * The function name of the exception */ @@ -61,8 +61,7 @@ public class WXJSExceptionInfo { */ private String mJsFrameworkVersion = WXEnvironment.JS_LIB_SDK_VERSION; - - public WXJSExceptionInfo(String instanceId, String bundleUrl, String errCode, String function, String exception, Map<String,String> extParams) { + public WXJSExceptionInfo(String instanceId, String bundleUrl, WXErrorCode errCode, String function, String exception, Map<String,String> extParams) { this.mInstanceId = instanceId; this.mBundleUrl = bundleUrl; this.mErrCode = errCode; @@ -87,11 +86,11 @@ public class WXJSExceptionInfo { mBundleUrl = bundleUrl; } - public String getErrCode() { + public WXErrorCode getErrCode() { return mErrCode; } - public void setErrCode(String errCode) { + public void setErrCode(WXErrorCode errCode) { mErrCode = errCode; } @@ -136,7 +135,7 @@ public class WXJSExceptionInfo { .append(" JSFrameworkVersion:").append(mJsFrameworkVersion) .append(" instanceId:").append(mInstanceId) .append(" bundleUrl:").append(mBundleUrl) - .append(" errCode:").append(mErrCode) + .append(" errCode:").append(mErrCode.getErrorCode()) .append(" function:").append(mFunction) .append(" exception:").append(mException) .append(" extParams:").append(mExtParams);
