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;
+  }
 }