This is an automated email from the ASF dual-hosted git repository.
luckychen 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 3624206 Merge Release/20190925 into maser (#3044)
3624206 is described below
commit 362420665246b92c9a2e69fa4c72e08cb375b092
Author: YorkShen <[email protected]>
AuthorDate: Fri Nov 29 18:00:58 2019 +0800
Merge Release/20190925 into maser (#3044)
* Fix Poplayer multi Thread Native Crash
* Revert "Fix Poplayer multi Thread Native Crash"
This reverts commit 1d857d3df7100f5fac3856668ad8e71672c870ed.
* [Android] fix memleak for apm
* [Android] fix mmap leak and zombie process
* [Android] fix cell animation ,same as ios
demo:https://jsplayground.taobao.org/raxplayground/073b16df-c0b0-4b13-a04f-64f3bcee13f9?spm=a2o8d.corp_prod_issue_detail_v2.0.0.3c40274fTD2suj
---
.../sdk/src/main/java/org/apache/weex/bridge/WXParams.java | 13 +++++++++++++
.../apache/weex/ui/component/list/BasicListComponent.java | 2 +-
.../Source/android/multiprocess/weex_js_connection.cpp | 9 ++++++++-
weex_core/Source/android/utils/params_utils.cpp | 10 ++++++++++
weex_core/Source/core/manager/weex_core_manager.h | 12 +++++++++++-
weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp | 1 +
6 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java
b/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java
index 66b98e6..7f2c265 100644
--- a/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java
+++ b/android/sdk/src/main/java/org/apache/weex/bridge/WXParams.java
@@ -19,6 +19,8 @@
package org.apache.weex.bridge;
import org.apache.weex.WXEnvironment;
+import org.apache.weex.WXSDKManager;
+import org.apache.weex.adapter.IWXConfigAdapter;
import org.apache.weex.base.CalledByNative;
import org.apache.weex.utils.WXLogUtils;
@@ -142,6 +144,17 @@ public class WXParams implements Serializable {
return deviceWidth;
}
+ @CalledByNative
+ public boolean getReleaseMap() {
+ IWXConfigAdapter adapter = WXSDKManager.getInstance().getWxConfigAdapter();
+ if (null == adapter){
+ return false;
+ }
+ String doRelease = adapter.getConfigWhenInit("wxapm","release_map","true");
+ WXLogUtils.e("getReleaseMap:"+doRelease);
+ return "true".equalsIgnoreCase(doRelease);
+ }
+
/**
* Device should not be set manually, instead it suppose to represent the
width of device and
diff --git
a/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
b/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
index ecbd621..d4b8f52 100644
---
a/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
+++
b/android/sdk/src/main/java/org/apache/weex/ui/component/list/BasicListComponent.java
@@ -834,7 +834,7 @@ public abstract class BasicListComponent<T extends
ViewGroup & ListComponentView
}
boolean isRemoveAnimation = false;
- Object attr = getAttrs().get(Constants.Name.DELETE_CELL_ANIMATION);
+ Object attr = child.getAttrs().get(Constants.Name.DELETE_CELL_ANIMATION);
if (Constants.Value.DEFAULT.equals(attr)) {
isRemoveAnimation = true;
}
diff --git a/weex_core/Source/android/multiprocess/weex_js_connection.cpp
b/weex_core/Source/android/multiprocess/weex_js_connection.cpp
index 25e9673..51d25d9 100644
--- a/weex_core/Source/android/multiprocess/weex_js_connection.cpp
+++ b/weex_core/Source/android/multiprocess/weex_js_connection.cpp
@@ -181,10 +181,17 @@ static void *newIPCServer(void *_td) {
listener->listen();
} catch (IPCException &e) {
LOGE("IPCException server died %s",e.msg());
- base::android::DetachFromVM();
WeexCore::WeexCoreManager::Instance()->server_queue_= nullptr;
+ if (WeexCoreManager::Instance()->do_release_map()){
+ futexPageQueue.reset();
+ }
+ base::android::DetachFromVM();
pthread_exit(NULL);
}
+ WeexCore::WeexCoreManager::Instance()->server_queue_= nullptr;
+ if (WeexCoreManager::Instance()->do_release_map()){
+ futexPageQueue.reset();
+ }
return nullptr;
}
diff --git a/weex_core/Source/android/utils/params_utils.cpp
b/weex_core/Source/android/utils/params_utils.cpp
index 5c8d05f..abeaa86 100644
--- a/weex_core/Source/android/utils/params_utils.cpp
+++ b/weex_core/Source/android/utils/params_utils.cpp
@@ -17,6 +17,7 @@
* under the License.
*/
+#include <core/manager/weex_core_manager.h>
#include "android/utils/params_utils.h"
#include "android/base/string/string_utils.h"
#include "android/utils/so_utils.h"
@@ -221,6 +222,15 @@ std::vector<INIT_FRAMEWORK_PARAMS*> initFromParam(
}
}
+ jmethodID m_release_map = env->GetMethodID(c_params, "getReleaseMap",
"()Z");
+ if (m_release_map == nullptr) {
+ WeexCoreManager::Instance()->set_release_map(false);
+ LOGE("m_release_map method is missing");
+ } else {
+ jboolean j_release_map_bool = env->CallBooleanMethod(params,m_release_map);
+ WeexCoreManager::Instance()->set_release_map(j_release_map_bool==JNI_TRUE);
+ }
+
jmethodID m_get_jsc_so_path =
env->GetMethodID(c_params, "getLibJscPath", "()Ljava/lang/String;");
if (m_get_jsc_so_path != nullptr) {
diff --git a/weex_core/Source/core/manager/weex_core_manager.h
b/weex_core/Source/core/manager/weex_core_manager.h
index 018099a..e2b5fee 100644
--- a/weex_core/Source/core/manager/weex_core_manager.h
+++ b/weex_core/Source/core/manager/weex_core_manager.h
@@ -48,7 +48,12 @@ class WeexCoreManager {
inline ScriptBridge *script_bridge() { return script_bridge_; }
inline void set_script_bridge(ScriptBridge *script_bridge) {
+ ScriptBridge* pre_script_bridge = script_bridge_;
script_bridge_ = script_bridge;
+ if (nullptr != pre_script_bridge && do_release_map()){
+ delete pre_script_bridge;
+ pre_script_bridge = nullptr;
+ }
}
inline void set_measure_function_adapter(MeasureFunctionAdapter *adapter) {
@@ -72,6 +77,9 @@ class WeexCoreManager {
inline weex::base::Thread *script_thread() { return script_thread_; }
+ inline bool do_release_map() { return release_map_; }
+ inline void set_release_map(bool release) { release_map_ = release; }
+
IPCFutexPageQueue* client_queue_;
IPCFutexPageQueue* server_queue_;
@@ -81,6 +89,7 @@ class WeexCoreManager {
ScriptBridge *script_bridge_;
ProjectMode project_mode_;
weex::base::Thread *script_thread_;
+ volatile bool release_map_;
WeexCoreManager()
: platform_bridge_(nullptr),
@@ -89,7 +98,8 @@ class WeexCoreManager {
project_mode_(COMMON),
script_thread_(nullptr),
client_queue_(nullptr),
- server_queue_(nullptr){};
+ server_queue_(nullptr),
+ release_map_(false){};
~WeexCoreManager(){};
};
} // namespace WeexCore
diff --git a/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp
b/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp
index 23cf890..7f11493 100644
--- a/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp
+++ b/weex_core/Source/third_party/IPC/IPCFutexPageQueue.cpp
@@ -63,6 +63,7 @@ IPCFutexPageQueue::~IPCFutexPageQueue()
} catch (IPCException& e) {
IPC_LOGE("%s", e.msg());
}
+ IPC_LOGE("do munmap")
munmap(m_sharedMemory, m_pageSize << 2);
}