You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2019/08/07 09:32:19 UTC
[incubator-weex] branch master updated: [Android] white_screen
check ignore unvisible view (alpha unvisible) (#2788)
This is an automated email from the ASF dual-hosted git repository.
kyork pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-weex.git
The following commit(s) were added to refs/heads/master by this push:
new 5862717 [Android] white_screen check ignore unvisible view (alpha unvisible) (#2788)
5862717 is described below
commit 5862717698d8d39d62b485862c34236ab3ffd815
Author: chen <lu...@users.noreply.github.com>
AuthorDate: Wed Aug 7 17:32:14 2019 +0800
[Android] white_screen check ignore unvisible view (alpha unvisible) (#2788)
[Android] sort wx state by time
---
.../java/com/taobao/weex/http/WXStreamModule.java | 4 ++-
.../com/taobao/weex/performance/WXStateRecord.java | 34 +++++++++++++++----
.../taobao/weex/performance/WhiteScreenUtils.java | 19 +++++++++++
.../java/com/taobao/weex/utils/WXViewUtils.java | 38 ++++++++++++++++++++++
4 files changed, 87 insertions(+), 8 deletions(-)
diff --git a/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java b/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
index db47501..3e8e9e5 100644
--- a/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
+++ b/android/sdk/src/main/java/com/taobao/weex/http/WXStreamModule.java
@@ -36,6 +36,7 @@ import com.taobao.weex.bridge.WXBridgeManager;
import com.taobao.weex.common.WXModule;
import com.taobao.weex.common.WXRequest;
import com.taobao.weex.common.WXResponse;
+import com.taobao.weex.performance.WXStateRecord;
import com.taobao.weex.utils.WXLogUtils;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
@@ -130,7 +131,7 @@ public class WXStreamModule extends WXModule {
fetch(optionsObj, callback, progressCallback, mWXSDKInstance.getInstanceId(), mWXSDKInstance.getBundleUrl());
}
- public void fetch(JSONObject optionsObj , final JSCallback callback, JSCallback progressCallback, String instanceId, String bundleURL){
+ public void fetch(JSONObject optionsObj , final JSCallback callback, JSCallback progressCallback, final String instanceId, String bundleURL){
boolean invaildOption = optionsObj==null || optionsObj.getString("url")==null;
if(invaildOption){
if(callback != null) {
@@ -202,6 +203,7 @@ public class WXStreamModule extends WXModule {
resp.put(STATUS_TEXT, Status.getStatusText(response.statusCode));
}
resp.put("headers", headers);
+ WXStateRecord.getInstance().recordAction(instanceId,"stream response code:"+(null!= response?response.statusCode:"null"));
callback.invoke(resp);
}
}
diff --git a/android/sdk/src/main/java/com/taobao/weex/performance/WXStateRecord.java b/android/sdk/src/main/java/com/taobao/weex/performance/WXStateRecord.java
index e2e1bd6..0740881 100644
--- a/android/sdk/src/main/java/com/taobao/weex/performance/WXStateRecord.java
+++ b/android/sdk/src/main/java/com/taobao/weex/performance/WXStateRecord.java
@@ -20,9 +20,13 @@
package com.taobao.weex.performance;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
import java.util.Map;
+import android.support.annotation.NonNull;
import com.taobao.weex.bridge.WXBridgeManager;
import com.taobao.weex.ui.IFComponentHolder;
import com.taobao.weex.utils.WXUtils;
@@ -103,13 +107,21 @@ public class WXStateRecord {
public Map<String, String> getStateInfo() {
Map<String, String> stateInfo = new HashMap<>(5);
- stateInfo.put("exceptionHistory", mExceptionHistory.toString());
- stateInfo.put("actionHistory", mActionHistory.toString());
- stateInfo.put("jsfmInitHistory", mJsfmInitHistory.toString());
- stateInfo.put("jscCrashHistory", mJscCrashHistory.toString());
- stateInfo.put("jscReloadHistory", mJscReloadHistory.toString());
- stateInfo.put("jsThreadWatch", mJsThradWatchHistory.toString());
stateInfo.put("reInitCount", String.valueOf(WXBridgeManager.reInitCount));
+
+ int size = mExceptionHistory.size()+mActionHistory.size()+mJsfmInitHistory.size()
+ +mJscCrashHistory.size()+mJscReloadHistory.size()+mJsThradWatchHistory.size();
+
+ List<Info> reportTimeLineInfo = new RecordList<>(size);
+ reportTimeLineInfo.addAll(mExceptionHistory);
+ reportTimeLineInfo.addAll(mActionHistory);
+ reportTimeLineInfo.addAll(mJsfmInitHistory);
+ reportTimeLineInfo.addAll(mJscCrashHistory);
+ reportTimeLineInfo.addAll(mJscReloadHistory);
+ reportTimeLineInfo.addAll(mJsThradWatchHistory);
+ Collections.sort(reportTimeLineInfo);
+ stateInfo.put("stateInfoList",reportTimeLineInfo.toString());
+
return stateInfo;
}
@@ -140,7 +152,7 @@ public class WXStateRecord {
}
}
- private static class Info {
+ private static class Info implements Comparable<Info>{
private long time;
private String instanceId;
private String msg;
@@ -157,6 +169,14 @@ public class WXStateRecord {
.append(instanceId).append(',').append(time).append(',').append(msg)
.toString();
}
+
+ @Override
+ public int compareTo(@NonNull Info next) {
+ if (this.time == next.time){
+ return 0;
+ }
+ return this.time > next.time? 1:-1;
+ }
}
public void startJSThreadWatchDog(){
diff --git a/android/sdk/src/main/java/com/taobao/weex/performance/WhiteScreenUtils.java b/android/sdk/src/main/java/com/taobao/weex/performance/WhiteScreenUtils.java
index fd92948..6e7543e 100644
--- a/android/sdk/src/main/java/com/taobao/weex/performance/WhiteScreenUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/performance/WhiteScreenUtils.java
@@ -21,12 +21,14 @@ package com.taobao.weex.performance;
import android.text.TextUtils;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewParent;
import com.taobao.weex.WXSDKInstance;
import com.taobao.weex.WXSDKManager;
import com.taobao.weex.adapter.IWXConfigAdapter;
import com.taobao.weex.ui.IFComponentHolder;
import com.taobao.weex.ui.component.WXComponent;
import com.taobao.weex.ui.component.WXVContainer;
+import com.taobao.weex.utils.WXViewUtils;
import org.json.JSONObject;
/**
@@ -59,6 +61,10 @@ public class WhiteScreenUtils {
if (!(v instanceof ViewGroup)) {
return false;
}
+
+ if (!WXViewUtils.isViewVisible(v) || !checkParentVisible(v.getParent())){
+ return false;
+ }
if (isInWhiteList(instance)){
return false;
}
@@ -88,6 +94,19 @@ public class WhiteScreenUtils {
return false;
}
+ private static boolean checkParentVisible(ViewParent parent){
+ //root view getParent is null
+ if (!(parent instanceof View)){
+ return true;
+ }
+ View vp = (View)parent;
+ boolean visible = vp.getVisibility() == View.VISIBLE && vp.getAlpha()>0;
+ if (!visible){
+ return false;
+ }
+ return checkParentVisible(vp.getParent());
+ }
+
private static boolean hasLeafViewOrSizeIgnore(View v,int checkDeep) {
if (!(v instanceof ViewGroup)) {
diff --git a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
index 730e14a..e6c0ee7 100644
--- a/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
+++ b/android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java
@@ -22,10 +22,14 @@ import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.graphics.RectF;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.os.Build;
@@ -557,4 +561,38 @@ public class WXViewUtils {
}
return true;
}
+
+ public static boolean isViewVisible(View v) {
+ if (null == v){
+ return false;
+ }
+
+ boolean isAttachToWindow = Build.VERSION.SDK_INT >= VERSION_CODES.KITKAT
+ ?v.isAttachedToWindow()
+ :v.getWindowToken() != null;
+
+ if (!isAttachToWindow){
+ return false;
+ }
+ if (v.getVisibility() != View.VISIBLE || v.getAlpha()<=0){
+ return false;
+ }
+
+ Drawable bacDrawable = v.getBackground();
+ if (null == bacDrawable){
+ return true;
+ }
+ if (Build.VERSION.SDK_INT >= VERSION_CODES.KITKAT){
+ return bacDrawable.getAlpha()>0;
+ }
+ //< 4.4
+ if (bacDrawable instanceof ColorDrawable){
+ int alpha = Color.alpha(((ColorDrawable) bacDrawable).getColor());
+ return alpha >0;
+ }else if (bacDrawable instanceof BitmapDrawable){
+ Paint paint = ((BitmapDrawable) bacDrawable).getPaint();
+ return paint.getAlpha() > 0;
+ }
+ return true;
+ }
}