From 892a873ff9b48126f0ddbe040e0e85ed61616d8a Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Tue, 11 Jun 2019 19:09:13 +0800 Subject: [PATCH 01/11] [Android] fix Android9 inaccurate SreenHeight problem --- .../main/java/com/taobao/weex/utils/WXViewUtils.java | 11 +++++++++++ 1 file changed, 11 insertions(+) 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 1f113440f8..379983f682 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 @@ -24,6 +24,7 @@ import android.graphics.Canvas; import android.graphics.Path; import android.graphics.PixelFormat; +import android.graphics.Point; import android.graphics.RectF; import android.graphics.drawable.Drawable; import android.graphics.drawable.LayerDrawable; @@ -36,6 +37,8 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; + import com.taobao.weex.WXEnvironment; import com.taobao.weex.WXSDKInstance; import com.taobao.weex.WXSDKManager; @@ -207,6 +210,14 @@ public static int getScreenHeight() { public static int getScreenHeight(Context cxt) { if(cxt!=null){ Resources res = cxt.getResources(); + if(Build.VERSION.SDK_INT >= 28){ + Point size = new Point(); + ((WindowManager)cxt.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRealSize(size); + mScreenHeight = size.y; + } + else { + mScreenHeight = cxt.getResources().getDisplayMetrics().heightPixels; + } mScreenHeight =cxt.getResources().getDisplayMetrics().heightPixels; if(WXEnvironment.SETTING_FORCE_VERTICAL_SCREEN){ mScreenWidth = res From c487703842baf428964b7ff419a5933bb4d4c188 Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Wed, 12 Jun 2019 11:54:09 +0800 Subject: [PATCH 02/11] fix bug --- android/sdk/src/main/java/com/taobao/weex/utils/WXViewUtils.java | 1 - 1 file changed, 1 deletion(-) 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 379983f682..2dd69cd9e5 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 @@ -218,7 +218,6 @@ public static int getScreenHeight(Context cxt) { else { mScreenHeight = cxt.getResources().getDisplayMetrics().heightPixels; } - mScreenHeight =cxt.getResources().getDisplayMetrics().heightPixels; if(WXEnvironment.SETTING_FORCE_VERTICAL_SCREEN){ mScreenWidth = res .getDisplayMetrics() From eeb8d1cab55eed344f57fb47f45104408d7a2b8a Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Thu, 13 Jun 2019 11:00:53 +0800 Subject: [PATCH 03/11] fix bug --- .../src/main/java/com/taobao/weex/utils/WXViewUtils.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 2dd69cd9e5..8d55daf9a7 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 @@ -209,10 +209,12 @@ public static int getScreenHeight() { public static int getScreenHeight(Context cxt) { if(cxt!=null){ + WindowManager wm; Resources res = cxt.getResources(); - if(Build.VERSION.SDK_INT >= 28){ + if(Build.VERSION.SDK_INT >= 28 && (wm = (WindowManager)cxt.getSystemService(Context.WINDOW_SERVICE)) != null + && wm.getDefaultDisplay() != null){ Point size = new Point(); - ((WindowManager)cxt.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRealSize(size); + wm.getDefaultDisplay().getRealSize(size); mScreenHeight = size.y; } else { From ff5366f3ffc8428ede8ada7e34cc575e44ad39f2 Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Wed, 19 Jun 2019 14:46:59 +0800 Subject: [PATCH 04/11] [Android]create a new module deviceInfo to enable full screen height --- .../java/com/taobao/weex/WXSDKEngine.java | 2 + .../java/com/taobao/weex/WXSDKInstance.java | 5 ++ .../ui/component/list/BasicListComponent.java | 2 +- .../weex/ui/module/WXDeviceInfoModule.java | 47 +++++++++++++++++++ .../com/taobao/weex/utils/WXViewUtils.java | 25 +++++++++- 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.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 e684082ede..9bc0d39d2e 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKEngine.java @@ -85,6 +85,7 @@ import com.taobao.weex.ui.component.list.template.WXRecyclerTemplateList; import com.taobao.weex.ui.component.richtext.WXRichText; import com.taobao.weex.ui.config.AutoScanConfigRegister; +import com.taobao.weex.ui.module.WXDeviceInfoModule; import com.taobao.weex.ui.module.WXLocaleModule; import com.taobao.weex.ui.module.WXMetaModule; import com.taobao.weex.ui.module.WXModalUIModule; @@ -377,6 +378,7 @@ private static void register() { registerModule("meta", WXMetaModule.class); registerModule("webSocket", WebSocketModule.class); registerModule("locale", WXLocaleModule.class); + registerModule("deviceInfo", WXDeviceInfoModule.class); } catch (WXException e) { WXLogUtils.e("[WXSDKEngine] register:", e); } 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 cfd23806e4..d486d8d3c3 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -142,6 +142,7 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan private boolean mNeedReLoad = false; private boolean mUseScroller = false; private int mInstanceViewPortWidth = 750; + private boolean enableFullScreenHeight = false; private WXInstanceApm mApmForInstance; private @NonNull FlatGUIContext mFlatGUIContext =new FlatGUIContext(); @@ -401,6 +402,10 @@ public void setNeedLoad(boolean load) { mNeedReLoad = load; } + public void setEnableFullScreenHeight(boolean fullScreenHeight){enableFullScreenHeight = fullScreenHeight;} + + public boolean isFullScreenHeightEnabled(){return enableFullScreenHeight;} + public boolean isUseScroller() { return mUseScroller; } diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java index 9f01b268fd..402f456d96 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/list/BasicListComponent.java @@ -244,7 +244,7 @@ public void triggerEvent(String type, Map args) { */ @Override protected MeasureOutput measure(int width, int height) { - int screenH = WXViewUtils.getScreenHeight(WXEnvironment.sApplication); + int screenH = WXViewUtils.getScreenHeight(getInstanceId()); int weexH = WXViewUtils.getWeexHeight(getInstanceId()); int outHeight = height > (weexH >= screenH ? screenH : weexH) ? weexH - getAbsoluteY() : height; return super.measure(width, outHeight); diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.java new file mode 100644 index 0000000000..22ddaaef62 --- /dev/null +++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.java @@ -0,0 +1,47 @@ +/** + * 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.ui.module; + +import com.taobao.weex.WXEnvironment; +import com.taobao.weex.annotation.JSMethod; +import com.taobao.weex.bridge.JSCallback; +import com.taobao.weex.common.WXModule; +import com.taobao.weex.utils.WXLogUtils; +import com.taobao.weex.utils.WXViewUtils; + +import java.util.HashMap; + +public class WXDeviceInfoModule extends WXModule { + + @JSMethod(uiThread = false) + public void enableFullScreenHeight(JSCallback callback){ + if(mWXSDKInstance != null) { + mWXSDKInstance.setEnableFullScreenHeight(true); + long fullheight = WXViewUtils.getScreenHeight(mWXSDKInstance.getInstanceId()); + long height = WXViewUtils.getScreenHeight(WXEnvironment.sApplication); + HashMap ret = new HashMap(); + WXLogUtils.d("jhy", String.valueOf(fullheight)); + ret.put("fullheight", String.valueOf(fullheight)); + ret.put("height", String.valueOf(height)); + callback.invoke(ret); + } + + } + +} 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 8d55daf9a7..006f12609d 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 @@ -207,11 +207,16 @@ public static int getScreenHeight() { return getScreenHeight(WXEnvironment.sApplication); } - public static int getScreenHeight(Context cxt) { + public static int getScreenHeight(String instanceId){ + WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId); + return instance.isFullScreenHeightEnabled()?getFullScreenHeight(WXEnvironment.sApplication):getScreenHeight(WXEnvironment.sApplication); + } + + public static int getFullScreenHeight(Context cxt) { if(cxt!=null){ WindowManager wm; Resources res = cxt.getResources(); - if(Build.VERSION.SDK_INT >= 28 && (wm = (WindowManager)cxt.getSystemService(Context.WINDOW_SERVICE)) != null + if(Build.VERSION.SDK_INT >= 17 && (wm = (WindowManager)cxt.getSystemService(Context.WINDOW_SERVICE)) != null && wm.getDefaultDisplay() != null){ Point size = new Point(); wm.getDefaultDisplay().getRealSize(size); @@ -231,6 +236,22 @@ public static int getScreenHeight(Context cxt) { } return mScreenHeight; } + public static int getScreenHeight(Context cxt) { + if(cxt!=null){ + Resources res = cxt.getResources(); + mScreenHeight = res.getDisplayMetrics().heightPixels; + if(WXEnvironment.SETTING_FORCE_VERTICAL_SCREEN){ + mScreenWidth = res + .getDisplayMetrics() + .widthPixels; + mScreenHeight = mScreenHeight > mScreenWidth ? mScreenHeight : mScreenWidth; + } + } else if (WXEnvironment.isApkDebugable()){ + throw new WXRuntimeException("Error Context is null When getScreenHeight"); + } + return mScreenHeight; + } + /** * Convert distance from JS,CSS to native. As the JS considers the width of the screen is 750px. From 6d4bd7df2cb51c78c5e52179ddf25c4f9b3fffd5 Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Wed, 19 Jun 2019 17:36:50 +0800 Subject: [PATCH 05/11] #fix bug --- .../java/com/taobao/weex/WXSDKInstance.java | 2 ++ .../weex/ui/module/WXDeviceInfoModule.java | 17 +++++++++-------- .../java/com/taobao/weex/utils/WXViewUtils.java | 3 +++ 3 files changed, 14 insertions(+), 8 deletions(-) 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 d486d8d3c3..ea144416ed 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -402,8 +402,10 @@ public void setNeedLoad(boolean load) { mNeedReLoad = load; } + @RestrictTo(Scope.LIBRARY) public void setEnableFullScreenHeight(boolean fullScreenHeight){enableFullScreenHeight = fullScreenHeight;} + @RestrictTo(Scope.LIBRARY) public boolean isFullScreenHeightEnabled(){return enableFullScreenHeight;} public boolean isUseScroller() { diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.java index 22ddaaef62..02392c6941 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXDeviceInfoModule.java @@ -18,6 +18,7 @@ */ package com.taobao.weex.ui.module; +import com.alibaba.fastjson.JSONObject; import com.taobao.weex.WXEnvironment; import com.taobao.weex.annotation.JSMethod; import com.taobao.weex.bridge.JSCallback; @@ -30,16 +31,16 @@ public class WXDeviceInfoModule extends WXModule { @JSMethod(uiThread = false) - public void enableFullScreenHeight(JSCallback callback){ + public void enableFullScreenHeight(final JSCallback callback,JSONObject extend){ if(mWXSDKInstance != null) { mWXSDKInstance.setEnableFullScreenHeight(true); - long fullheight = WXViewUtils.getScreenHeight(mWXSDKInstance.getInstanceId()); - long height = WXViewUtils.getScreenHeight(WXEnvironment.sApplication); - HashMap ret = new HashMap(); - WXLogUtils.d("jhy", String.valueOf(fullheight)); - ret.put("fullheight", String.valueOf(fullheight)); - ret.put("height", String.valueOf(height)); - callback.invoke(ret); + if(callback != null) { + long fullScreenHeight = WXViewUtils.getScreenHeight(mWXSDKInstance.getInstanceId()); + HashMap ret = new HashMap(); + ret.put("fullScreenHeight", String.valueOf(fullScreenHeight)); + callback.invoke(ret); + } + } } 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 006f12609d..730e14af1c 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 @@ -207,11 +207,13 @@ public static int getScreenHeight() { return getScreenHeight(WXEnvironment.sApplication); } + public static int getScreenHeight(String instanceId){ WXSDKInstance instance = WXSDKManager.getInstance().getSDKInstance(instanceId); return instance.isFullScreenHeightEnabled()?getFullScreenHeight(WXEnvironment.sApplication):getScreenHeight(WXEnvironment.sApplication); } +//get screen height with status bar on full screen public static int getFullScreenHeight(Context cxt) { if(cxt!=null){ WindowManager wm; @@ -236,6 +238,7 @@ public static int getFullScreenHeight(Context cxt) { } return mScreenHeight; } +// get screen height without status bar public static int getScreenHeight(Context cxt) { if(cxt!=null){ Resources res = cxt.getResources(); From f161125d3aedefb73cc7e86f3c146bea0929f9ff Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Mon, 24 Jun 2019 15:17:29 +0800 Subject: [PATCH 06/11] fix bug --- .../com/taobao/weex/ui/WXRenderManager.java | 88 ++++++++++--------- 1 file changed, 46 insertions(+), 42 deletions(-) diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java index 40d436f9c7..48eb78b2f9 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java @@ -66,6 +66,7 @@ public class WXRenderManager { private final int MAX_DROP_FRAME_NATIVE_BATCH = 2000; private final static String sKeyAction = "Action"; private static int nativeBatchTimes = 0; + private static int mOpenGLRenderLimitValue = 0; public WXRenderManager() { mRenderContext = new ConcurrentHashMap<>(); @@ -94,48 +95,51 @@ public WXSDKInstance getWXSDKInstance(String instanceId) { } public static int getOpenGLRenderLimitValue() { - int maxsize ; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - EGL10 egl = (EGL10) EGLContext.getEGL(); - EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); - int[] vers = new int[2]; - egl.eglInitialize(dpy, vers); - int[] configAttr = { - EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER, - EGL10.EGL_LEVEL,0, - EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT, - EGL10.EGL_NONE}; - EGLConfig[] configs =new EGLConfig[1]; - int[] numConfig =new int[1]; - egl.eglChooseConfig(dpy, configAttr, configs,1, numConfig); - if (numConfig[0] ==0) {// TROUBLE! No config found. - } - EGLConfig config = configs[0]; - int[] surfAttr = { - EGL10.EGL_WIDTH,64, - EGL10.EGL_HEIGHT,64, - EGL10.EGL_NONE}; - EGLSurface surf = egl.eglCreatePbufferSurface(dpy, config, surfAttr); - final int EGL_CONTEXT_CLIENT_VERSION =0x3098;// missing in EGL10 - int[] ctxAttrib = { - EGL_CONTEXT_CLIENT_VERSION,1, - EGL10.EGL_NONE}; - EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, ctxAttrib); - egl.eglMakeCurrent(dpy, surf, surf, ctx); - int[] maxSize =new int[1]; - GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize,0); - egl.eglMakeCurrent(dpy, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, - EGL10.EGL_NO_CONTEXT); - egl.eglDestroySurface(dpy, surf); - egl.eglDestroyContext(dpy, ctx); - egl.eglTerminate(dpy); - maxsize = maxSize[0]; - }else { - int[] maxSize =new int[1]; - GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize,0); - maxsize = maxSize[0]; - } - return maxsize == 0 ? 4096 : maxsize; + if(mOpenGLRenderLimitValue == 0){ + int maxsize; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + EGL10 egl = (EGL10) EGLContext.getEGL(); + EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); + int[] vers = new int[2]; + egl.eglInitialize(dpy, vers); + int[] configAttr = { + EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER, + EGL10.EGL_LEVEL, 0, + EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT, + EGL10.EGL_NONE}; + EGLConfig[] configs = new EGLConfig[1]; + int[] numConfig = new int[1]; + egl.eglChooseConfig(dpy, configAttr, configs, 1, numConfig); + if (numConfig[0] == 0) {// TROUBLE! No config found. + } + EGLConfig config = configs[0]; + int[] surfAttr = { + EGL10.EGL_WIDTH, 64, + EGL10.EGL_HEIGHT, 64, + EGL10.EGL_NONE}; + EGLSurface surf = egl.eglCreatePbufferSurface(dpy, config, surfAttr); + final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;// missing in EGL10 + int[] ctxAttrib = { + EGL_CONTEXT_CLIENT_VERSION, 1, + EGL10.EGL_NONE}; + EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, ctxAttrib); + egl.eglMakeCurrent(dpy, surf, surf, ctx); + int[] maxSize = new int[1]; + GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); + egl.eglMakeCurrent(dpy, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, + EGL10.EGL_NO_CONTEXT); + egl.eglDestroySurface(dpy, surf); + egl.eglDestroyContext(dpy, ctx); + egl.eglTerminate(dpy); + maxsize = maxSize[0]; + } else { + int[] maxSize = new int[1]; + GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); + maxsize = maxSize[0]; + } + mOpenGLRenderLimitValue = maxsize; + } + return mOpenGLRenderLimitValue; } @RestrictTo(Scope.LIBRARY) From 286541568ed0f075d5e7f65ab9453cf8e70e1b56 Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Mon, 24 Jun 2019 17:31:53 +0800 Subject: [PATCH 07/11] fix bugs --- .../java/com/taobao/weex/WXSDKInstance.java | 10 +-- .../taobao/weex/bridge/WXBridgeManager.java | 49 +++++------ .../com/taobao/weex/ui/WXRenderManager.java | 85 ++++++++++--------- .../taobao/weex/ui/component/WXComponent.java | 18 ++-- 4 files changed, 80 insertions(+), 82 deletions(-) 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 111552f4ac..48392124d4 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -152,7 +152,7 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan private Map mContainerInfo; public boolean isNewFsEnd = false; - private List componentsInfoExceedGPULimit = new ArrayList<>(); + private List> componentsInfoExceedGPULimit = new ArrayList<>(); /** * bundle type @@ -207,11 +207,11 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan * */ private boolean mAutoAdjustDeviceWidth = WXEnvironment.AUTO_ADJUST_ENV_DEVICE_WIDTH; - public List getComponentsExceedGPULimit(){return componentsInfoExceedGPULimit;} + public List> getComponentsExceedGPULimit(){return componentsInfoExceedGPULimit;} @RestrictTo(Scope.LIBRARY) - public void setComponentsInfoExceedGPULimit(String componentInfo){ - if(componentInfo != null && !TextUtils.isEmpty(componentInfo)){ - componentsInfoExceedGPULimit.add(componentInfo); + public void setComponentsInfoExceedGPULimit(Map component){ + if(component!= null && !component.isEmpty()){ + componentsInfoExceedGPULimit.add(component); } } 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 0a97406dc5..b285ecfc21 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 @@ -2951,15 +2951,20 @@ public int callUpdateAttrs(String instanceId, String ref, HashMap limit || layoutSize.getWidth() > limit) && shouldReportGPULimit()){ + if(limit > 0 && (layoutSize.getHeight() > limit || layoutSize.getWidth() > limit)){ Map ext = new ArrayMap<>(); WXComponent component = WXSDKManager.getInstance().getWXRenderManager().getWXComponent(instanceId,ref); ext.put("GPU limit",String.valueOf(limit)); @@ -2996,28 +3001,16 @@ public void reportIfReachGPULimit(String instanceId,String ref,GraphicSize layou if (component.getBorder() != null) { ext.put("component.border", component.getBorder().toString()); } - WXSDKManager.getInstance().getSDKInstance(instanceId).setComponentsInfoExceedGPULimit(transComponentInfo(ext)); - WXExceptionUtils.commitCriticalExceptionRT(instanceId - , WXErrorCode.WX_RENDER_WAR_GPU_LIMIT_LAYOUT, - "WXBridgeManager", - String.format(Locale.ENGLISH,"You are creating a component(%s x %2$s) which exceeds the limit of gpu(%3$s x %3$s),it may cause crash", - String.valueOf(layoutSize.getWidth()),String.valueOf(layoutSize.getHeight()),String.valueOf(limit)), - ext); - } - } - public String transComponentInfo(Map map){ - JSONObject data = new JSONObject(); - if(map != null) { - try { - for (String key : map.keySet()) { - data.put(key, map.get(key)); - } - } catch (Exception e) { - e.printStackTrace(); + WXSDKManager.getInstance().getSDKInstance(instanceId).setComponentsInfoExceedGPULimit(ext); + if(shouldReportGPULimit()) { + WXExceptionUtils.commitCriticalExceptionRT(instanceId + , WXErrorCode.WX_RENDER_WAR_GPU_LIMIT_LAYOUT, + "WXBridgeManager", + String.format(Locale.ENGLISH, "You are creating a component(%s x %2$s) which exceeds the limit of gpu(%3$s x %3$s),it may cause crash", + String.valueOf(layoutSize.getWidth()), String.valueOf(layoutSize.getHeight()), String.valueOf(limit)), + ext); } } - return data.toString(); - } public int callLayout(String pageId, String ref, int top, int bottom, int left, int right, int height, int width, boolean isRTL, int index) { diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java index 48eb78b2f9..cb018cf67c 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java @@ -18,16 +18,19 @@ */ package com.taobao.weex.ui; +import android.opengl.EGL14; +import android.opengl.EGLConfig; +import android.opengl.EGLContext; +import android.opengl.EGLDisplay; +import android.opengl.EGLSurface; import android.opengl.GLES10; import android.os.Build; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; import android.support.annotation.RestrictTo.Scope; -import android.support.v4.util.ArrayMap; import android.text.TextUtils; import com.taobao.weex.WXSDKInstance; -import com.taobao.weex.WXSDKManager; import com.taobao.weex.common.WXErrorCode; import com.taobao.weex.common.WXRuntimeException; import com.taobao.weex.common.WXThread; @@ -35,7 +38,6 @@ import com.taobao.weex.performance.WXInstanceApm; import com.taobao.weex.ui.action.BasicGraphicAction; import com.taobao.weex.ui.action.GraphicActionBatchAction; -import com.taobao.weex.ui.action.GraphicSize; import com.taobao.weex.ui.component.WXComponent; import com.taobao.weex.utils.WXExceptionUtils; import com.taobao.weex.utils.WXLogUtils; @@ -47,11 +49,6 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; -import javax.microedition.khronos.egl.EGL10; -import javax.microedition.khronos.egl.EGLConfig; -import javax.microedition.khronos.egl.EGLContext; -import javax.microedition.khronos.egl.EGLDisplay; -import javax.microedition.khronos.egl.EGLSurface; /** * Manager class for render operation, mainly for managing {@link RenderContextImpl}. @@ -96,42 +93,46 @@ public WXSDKInstance getWXSDKInstance(String instanceId) { public static int getOpenGLRenderLimitValue() { if(mOpenGLRenderLimitValue == 0){ - int maxsize; + int maxsize = 0; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - EGL10 egl = (EGL10) EGLContext.getEGL(); - EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); - int[] vers = new int[2]; - egl.eglInitialize(dpy, vers); - int[] configAttr = { - EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER, - EGL10.EGL_LEVEL, 0, - EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT, - EGL10.EGL_NONE}; - EGLConfig[] configs = new EGLConfig[1]; - int[] numConfig = new int[1]; - egl.eglChooseConfig(dpy, configAttr, configs, 1, numConfig); - if (numConfig[0] == 0) {// TROUBLE! No config found. + try { + EGLDisplay dpy = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); + int[] vers = new int[2]; + EGL14.eglInitialize(dpy, vers, 0, vers, 1); + int[] configAttr = { + EGL14.EGL_BUFFER_SIZE, 32, + EGL14.EGL_ALPHA_SIZE, 8, + EGL14.EGL_BLUE_SIZE, 8, + EGL14.EGL_GREEN_SIZE, 8, + EGL14.EGL_RED_SIZE, 8, + EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT, + EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT, + EGL14.EGL_NONE}; + EGLConfig[] configs = new EGLConfig[1]; + int[] numConfig = new int[1]; + EGL14.eglChooseConfig(dpy, configAttr, 0, configs, 0, configs.length, numConfig, 0); + EGLConfig config = configs[0]; + int[] surfAttr = { + EGL14.EGL_WIDTH, 64, + EGL14.EGL_HEIGHT, 64, + EGL14.EGL_NONE}; + EGLSurface surf = EGL14.eglCreatePbufferSurface(dpy, config, surfAttr, 0); + int[] ctxAttrib = { + EGL14.EGL_CONTEXT_CLIENT_VERSION, 1, + EGL14.EGL_NONE}; + EGLContext ctx = EGL14.eglCreateContext(dpy, config, EGL14.EGL_NO_CONTEXT, ctxAttrib, 0); + EGL14.eglMakeCurrent(dpy, surf, surf, ctx); + int[] maxSize = new int[1]; + GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); + EGL14.eglMakeCurrent(dpy, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, + EGL14.EGL_NO_CONTEXT); + EGL14.eglDestroySurface(dpy, surf); + EGL14.eglDestroyContext(dpy, ctx); + EGL14.eglTerminate(dpy); + maxsize = maxSize[0]; + } catch(Exception e){ + e.printStackTrace(); } - EGLConfig config = configs[0]; - int[] surfAttr = { - EGL10.EGL_WIDTH, 64, - EGL10.EGL_HEIGHT, 64, - EGL10.EGL_NONE}; - EGLSurface surf = egl.eglCreatePbufferSurface(dpy, config, surfAttr); - final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;// missing in EGL10 - int[] ctxAttrib = { - EGL_CONTEXT_CLIENT_VERSION, 1, - EGL10.EGL_NONE}; - EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, ctxAttrib); - egl.eglMakeCurrent(dpy, surf, surf, ctx); - int[] maxSize = new int[1]; - GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); - egl.eglMakeCurrent(dpy, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, - EGL10.EGL_NO_CONTEXT); - egl.eglDestroySurface(dpy, surf); - egl.eglDestroyContext(dpy, ctx); - egl.eglTerminate(dpy); - maxsize = maxSize[0]; } else { int[] maxSize = new int[1]; GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java index 14eb1bd88d..b478cc3846 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java @@ -1684,15 +1684,19 @@ public void setBackgroundImage(@NonNull String bgImage) { getOrCreateBorder().setImage(shader); } } - public boolean shouldCancelHardwareAccelerate() { + private boolean shouldCancelHardwareAccelerate() { IWXConfigAdapter adapter = WXSDKManager.getInstance().getWxConfigAdapter(); boolean cancel_hardware_accelerate = false; if (adapter != null) { - cancel_hardware_accelerate = Boolean.parseBoolean(adapter - .getConfig("android_weex_test_gpu", - "cancel_hardware_accelerate", - "false")); - WXLogUtils.e("cancel_hardware_accelerate : " + cancel_hardware_accelerate); + try { + cancel_hardware_accelerate = Boolean.parseBoolean(adapter + .getConfig("android_weex_test_gpu", + "cancel_hardware_accelerate", + "false")); + }catch (Exception e){ + e.printStackTrace(); + } + WXLogUtils.i("cancel_hardware_accelerate : " + cancel_hardware_accelerate); } return cancel_hardware_accelerate; } @@ -1703,7 +1707,7 @@ public void setOpacity(float opacity) { if (isLayerTypeEnabled()) { mHost.setLayerType(View.LAYER_TYPE_HARDWARE, null); } - if(shouldCancelHardwareAccelerate() && (getLayoutHeight() > limit || + if(shouldCancelHardwareAccelerate() && limit > 0 && (getLayoutHeight() > limit || getLayoutWidth() > limit)){ mHost.setLayerType(View.LAYER_TYPE_SOFTWARE,null); } From b7059bc58cd32e75c70aa9d4f0ea1065d01ce87d Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Tue, 25 Jun 2019 10:01:50 +0800 Subject: [PATCH 08/11] fix bugs --- .../taobao/weex/bridge/WXBridgeManager.java | 28 +++++++++---------- .../com/taobao/weex/ui/WXRenderManager.java | 6 +++- .../taobao/weex/ui/component/WXComponent.java | 2 +- 3 files changed, 20 insertions(+), 16 deletions(-) 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 b285ecfc21..a59ff64e9b 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 @@ -854,7 +854,7 @@ public int callReportCrashReloadPage(String instanceId, String crashFile) { Log.d("jsengine", "callReportCrashReloadPage crashFile:" + crashFile); } } catch (Throwable e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } WXStateRecord.getInstance().onJSCCrash(); callReportCrash(crashFile, instanceId, url); @@ -958,7 +958,7 @@ public void run() { commitJscCrashAlarmMonitor(IWXUserTrackAdapter.JS_BRIDGE, WXErrorCode.WX_ERR_JSC_CRASH, result.toString(), instanceId, url); br.close(); } catch (Exception e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } } else { WXLogUtils.e("[WXBridgeManager] callReportCrash crash file is empty"); @@ -1539,7 +1539,7 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa WXLogUtils.e("end getBundleType type:" + type.toString() + " time:" + (end - start)); } } catch (Throwable e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } try { @@ -1569,7 +1569,7 @@ private void invokeCreateInstance(@NonNull WXSDKInstance instance, Script templa options.put("env", mInitParams.toMap()); } } catch (Throwable e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } instance.bundleType = type; if (WXEnvironment.isApkDebugable() && BRIDGE_LOG_SWITCH) { @@ -1697,7 +1697,7 @@ public WXJSObject optionObjConvert(boolean useSandBox, BundType type, WXJSObject } return new WXJSObject(WXJSObject.JSON, obj.toString()); } catch (Throwable e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } return opt; @@ -1751,7 +1751,7 @@ else if(RAX.equalsIgnoreCase(type)){ } return BundType.Others; } catch (Throwable e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); return BundType.Others; } } @@ -2033,7 +2033,7 @@ private void initFramework(String framework) { adapter.commit(WXEnvironment.getApplication(),"sJSFMStartListener",IWXUserTrackAdapter.COUNTER,null,params); } }catch (Exception e){ - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } } @@ -2042,7 +2042,7 @@ private void initFramework(String framework) { try { crashFile = WXEnvironment.getApplication().getApplicationContext().getCacheDir().getPath(); } catch (Exception e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } boolean pieSupport = true; try { @@ -2050,7 +2050,7 @@ private void initFramework(String framework) { pieSupport = false; } } catch (Exception e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } sInitFrameWorkMsg.append(" | pieSupport:").append(pieSupport); WXLogUtils.d("[WXBridgeManager] initFrameworkEnv crashFile:" + crashFile + " pieSupport:" + pieSupport); @@ -2446,7 +2446,7 @@ public void reportJSException(String instanceId, String function, return; } } catch (Exception e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } } if (METHOD_CREATE_INSTANCE.equals(function) && !instance.getApmForInstance().hasAddView){ @@ -2492,17 +2492,17 @@ private void doReportJSException(String instanceId, String function,WXErrorCode exceptionExt = result.toString(); br.close(); } catch (Exception e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } } file.delete(); } } catch (Throwable throwable) { - throwable.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(throwable)); } } } catch (Throwable e) { - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } exception += "\n" + exceptionExt; WXLogUtils.e("reportJSException:" + exception); @@ -2962,7 +2962,7 @@ private boolean shouldReportGPULimit() { "sample_rate_of_report", "0")); }catch(Exception e){ - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } WXLogUtils.i("sample_rate_of_report : " + sample_rate_of_report); if(Math.random() < sample_rate_of_report){ diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java index cb018cf67c..4042f34472 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java @@ -111,6 +111,10 @@ public static int getOpenGLRenderLimitValue() { EGLConfig[] configs = new EGLConfig[1]; int[] numConfig = new int[1]; EGL14.eglChooseConfig(dpy, configAttr, 0, configs, 0, configs.length, numConfig, 0); + if(numConfig[0] == 0){ + //There is something wrong with opengl environment. + mOpenGLRenderLimitValue = -1; + } EGLConfig config = configs[0]; int[] surfAttr = { EGL14.EGL_WIDTH, 64, @@ -131,7 +135,7 @@ public static int getOpenGLRenderLimitValue() { EGL14.eglTerminate(dpy); maxsize = maxSize[0]; } catch(Exception e){ - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } } else { int[] maxSize = new int[1]; diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java index b478cc3846..d803784f90 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/component/WXComponent.java @@ -1694,7 +1694,7 @@ private boolean shouldCancelHardwareAccelerate() { "cancel_hardware_accelerate", "false")); }catch (Exception e){ - e.printStackTrace(); + WXLogUtils.e(WXLogUtils.getStackTrace(e)); } WXLogUtils.i("cancel_hardware_accelerate : " + cancel_hardware_accelerate); } From 1421a5c1322cd536ba9fb7bb1f3517097824a478 Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Wed, 26 Jun 2019 13:05:15 +0800 Subject: [PATCH 09/11] fix bug --- .../com/taobao/weex/ui/WXRenderManager.java | 79 +++++++++---------- 1 file changed, 36 insertions(+), 43 deletions(-) diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java index 4042f34472..6409e5d565 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java @@ -18,13 +18,7 @@ */ package com.taobao.weex.ui; -import android.opengl.EGL14; -import android.opengl.EGLConfig; -import android.opengl.EGLContext; -import android.opengl.EGLDisplay; -import android.opengl.EGLSurface; import android.opengl.GLES10; -import android.os.Build; import android.support.annotation.Nullable; import android.support.annotation.RestrictTo; import android.support.annotation.RestrictTo.Scope; @@ -49,6 +43,13 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import javax.microedition.khronos.egl.EGL10; +import javax.microedition.khronos.egl.EGLConfig; +import javax.microedition.khronos.egl.EGLContext; +import javax.microedition.khronos.egl.EGLDisplay; +import javax.microedition.khronos.egl.EGLSurface; + + /** * Manager class for render operation, mainly for managing {@link RenderContextImpl}. @@ -94,54 +95,46 @@ public WXSDKInstance getWXSDKInstance(String instanceId) { public static int getOpenGLRenderLimitValue() { if(mOpenGLRenderLimitValue == 0){ int maxsize = 0; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { try { - EGLDisplay dpy = EGL14.eglGetDisplay(EGL14.EGL_DEFAULT_DISPLAY); + EGL10 egl = (EGL10) EGLContext.getEGL(); + EGLDisplay dpy = egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY); int[] vers = new int[2]; - EGL14.eglInitialize(dpy, vers, 0, vers, 1); + egl.eglInitialize(dpy, vers); int[] configAttr = { - EGL14.EGL_BUFFER_SIZE, 32, - EGL14.EGL_ALPHA_SIZE, 8, - EGL14.EGL_BLUE_SIZE, 8, - EGL14.EGL_GREEN_SIZE, 8, - EGL14.EGL_RED_SIZE, 8, - EGL14.EGL_RENDERABLE_TYPE, EGL14.EGL_OPENGL_ES2_BIT, - EGL14.EGL_SURFACE_TYPE, EGL14.EGL_WINDOW_BIT, - EGL14.EGL_NONE}; + EGL10.EGL_COLOR_BUFFER_TYPE, EGL10.EGL_RGB_BUFFER, + EGL10.EGL_LEVEL, 0, + EGL10.EGL_SURFACE_TYPE, EGL10.EGL_PBUFFER_BIT, + EGL10.EGL_NONE}; EGLConfig[] configs = new EGLConfig[1]; int[] numConfig = new int[1]; - EGL14.eglChooseConfig(dpy, configAttr, 0, configs, 0, configs.length, numConfig, 0); + egl.eglChooseConfig(dpy, configAttr, configs, 1, numConfig); if(numConfig[0] == 0){ //There is something wrong with opengl environment. mOpenGLRenderLimitValue = -1; } - EGLConfig config = configs[0]; - int[] surfAttr = { - EGL14.EGL_WIDTH, 64, - EGL14.EGL_HEIGHT, 64, - EGL14.EGL_NONE}; - EGLSurface surf = EGL14.eglCreatePbufferSurface(dpy, config, surfAttr, 0); - int[] ctxAttrib = { - EGL14.EGL_CONTEXT_CLIENT_VERSION, 1, - EGL14.EGL_NONE}; - EGLContext ctx = EGL14.eglCreateContext(dpy, config, EGL14.EGL_NO_CONTEXT, ctxAttrib, 0); - EGL14.eglMakeCurrent(dpy, surf, surf, ctx); - int[] maxSize = new int[1]; - GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); - EGL14.eglMakeCurrent(dpy, EGL14.EGL_NO_SURFACE, EGL14.EGL_NO_SURFACE, - EGL14.EGL_NO_CONTEXT); - EGL14.eglDestroySurface(dpy, surf); - EGL14.eglDestroyContext(dpy, ctx); - EGL14.eglTerminate(dpy); - maxsize = maxSize[0]; - } catch(Exception e){ + EGLConfig config = configs[0]; + int[] surfAttr = { + EGL10.EGL_WIDTH, 64, + EGL10.EGL_HEIGHT, 64, + EGL10.EGL_NONE}; + EGLSurface surf = egl.eglCreatePbufferSurface(dpy, config, surfAttr); + final int EGL_CONTEXT_CLIENT_VERSION = 0x3098;// missing in EGL10 + int[] ctxAttrib = { + EGL_CONTEXT_CLIENT_VERSION, 1, + EGL10.EGL_NONE}; + EGLContext ctx = egl.eglCreateContext(dpy, config, EGL10.EGL_NO_CONTEXT, ctxAttrib); + egl.eglMakeCurrent(dpy, surf, surf, ctx); + int[] maxSize = new int[1]; + GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); + egl.eglMakeCurrent(dpy, EGL10.EGL_NO_SURFACE, EGL10.EGL_NO_SURFACE, + EGL10.EGL_NO_CONTEXT); + egl.eglDestroySurface(dpy, surf); + egl.eglDestroyContext(dpy, ctx); + egl.eglTerminate(dpy); + maxsize = maxSize[0]; + } catch(Exception e){ WXLogUtils.e(WXLogUtils.getStackTrace(e)); } - } else { - int[] maxSize = new int[1]; - GLES10.glGetIntegerv(GLES10.GL_MAX_TEXTURE_SIZE, maxSize, 0); - maxsize = maxSize[0]; - } mOpenGLRenderLimitValue = maxsize; } return mOpenGLRenderLimitValue; From 719e366b543374bb552261810ee3f3e4af56f019 Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Wed, 26 Jun 2019 14:45:03 +0800 Subject: [PATCH 10/11] fix bug --- .../src/main/java/com/taobao/weex/ui/WXRenderManager.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java index 6409e5d565..85f54b7202 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/WXRenderManager.java @@ -110,8 +110,9 @@ public static int getOpenGLRenderLimitValue() { egl.eglChooseConfig(dpy, configAttr, configs, 1, numConfig); if(numConfig[0] == 0){ //There is something wrong with opengl environment. - mOpenGLRenderLimitValue = -1; - } + maxsize = -1; + egl.eglTerminate(dpy); + }else { EGLConfig config = configs[0]; int[] surfAttr = { EGL10.EGL_WIDTH, 64, @@ -132,7 +133,8 @@ public static int getOpenGLRenderLimitValue() { egl.eglDestroyContext(dpy, ctx); egl.eglTerminate(dpy); maxsize = maxSize[0]; - } catch(Exception e){ + } + } catch(Exception e){ WXLogUtils.e(WXLogUtils.getStackTrace(e)); } mOpenGLRenderLimitValue = maxsize; From 13b74108fd71a283308bb14b943fe2d2bbfa8658 Mon Sep 17 00:00:00 2001 From: Katherine Jiang Date: Wed, 26 Jun 2019 18:00:15 +0800 Subject: [PATCH 11/11] fix bug --- .../sdk/src/main/java/com/taobao/weex/WXSDKInstance.java | 6 +++--- .../main/java/com/taobao/weex/bridge/WXBridgeManager.java | 4 +++- 2 files changed, 6 insertions(+), 4 deletions(-) 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 48392124d4..00579f74fc 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -152,7 +152,7 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan private Map mContainerInfo; public boolean isNewFsEnd = false; - private List> componentsInfoExceedGPULimit = new ArrayList<>(); + private List componentsInfoExceedGPULimit = new ArrayList<>(); /** * bundle type @@ -207,9 +207,9 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan * */ private boolean mAutoAdjustDeviceWidth = WXEnvironment.AUTO_ADJUST_ENV_DEVICE_WIDTH; - public List> getComponentsExceedGPULimit(){return componentsInfoExceedGPULimit;} + public List getComponentsExceedGPULimit(){return componentsInfoExceedGPULimit;} @RestrictTo(Scope.LIBRARY) - public void setComponentsInfoExceedGPULimit(Map component){ + public void setComponentsInfoExceedGPULimit(JSONObject component){ if(component!= null && !component.isEmpty()){ componentsInfoExceedGPULimit.add(component); } 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 a59ff64e9b..0708a1b9d7 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 @@ -3001,7 +3001,9 @@ private void reportIfReachGPULimit(String instanceId,String ref,GraphicSize layo if (component.getBorder() != null) { ext.put("component.border", component.getBorder().toString()); } - WXSDKManager.getInstance().getSDKInstance(instanceId).setComponentsInfoExceedGPULimit(ext); + Map map = new JSONObject(); + map.putAll(ext); + WXSDKManager.getInstance().getSDKInstance(instanceId).setComponentsInfoExceedGPULimit((JSONObject)map); if(shouldReportGPULimit()) { WXExceptionUtils.commitCriticalExceptionRT(instanceId , WXErrorCode.WX_RENDER_WAR_GPU_LIMIT_LAYOUT,