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 2018/05/28 02:52:08 UTC
[1/2] incubator-weex git commit: [WEEX-411][Core] Fix memory leak due
to return render time
Repository: incubator-weex
Updated Branches:
refs/heads/master dd60f6fd7 -> 2e9c22b84
[WEEX-411][Core] Fix memory leak due to return render time
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/ffddb376
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/ffddb376
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/ffddb376
Branch: refs/heads/master
Commit: ffddb376eef6ccdca378cece481995af3e8e6e9a
Parents: 8838d6c
Author: miomin <mi...@foxmail.com>
Authored: Sat May 26 23:08:07 2018 +0800
Committer: miomin <mi...@foxmail.com>
Committed: Sat May 26 23:08:07 2018 +0800
----------------------------------------------------------------------
.../bridge/impl/weexcore_impl_android.cpp | 58 ++++++++++++++++----
1 file changed, 48 insertions(+), 10 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ffddb376/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
----------------------------------------------------------------------
diff --git a/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp b/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
index 039174e..8e206ed 100644
--- a/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
+++ b/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp
@@ -38,6 +38,8 @@ jclass jWMBridgeClazz = nullptr;
jmethodID jDoubleValueMethodId;
jobject jThis;
jobject jWMThis;
+jlongArray jFirstScreenRenderTime = nullptr;
+jlongArray jRenderFinishTime = nullptr;
std::map<std::string, jobject> componentTypeCache;
JStringCache refCache(2048);
@@ -139,11 +141,17 @@ static void SetRenderContainerWrapContent(JNIEnv* env, jobject jcaller, jboolean
}
static jlongArray GetFirstScreenRenderTime(JNIEnv *env, jobject jcaller, jstring instanceId) {
- jlongArray jRet = env->NewLongArray(3);
+ jlongArray jTemp = env->NewLongArray(3);
RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
- if (page == nullptr)
- return jRet;
+ if (page == nullptr) {
+ if (jFirstScreenRenderTime != nullptr) {
+ env->DeleteGlobalRef(jFirstScreenRenderTime);
+ jFirstScreenRenderTime = nullptr;
+ }
+ jFirstScreenRenderTime = static_cast<jlongArray>(env->NewGlobalRef(jTemp));
+ return jFirstScreenRenderTime;
+ }
std::vector<long> temp = page->PrintFirstScreenLog();
@@ -152,17 +160,30 @@ static jlongArray GetFirstScreenRenderTime(JNIEnv *env, jobject jcaller, jstring
ret[0] = temp[0];
ret[1] = temp[1];
ret[2] = temp[2];
- env->SetLongArrayRegion(jRet, 0, 3, ret);
+ env->SetLongArrayRegion(jTemp, 0, 3, ret);
- return jRet;
+ if (jFirstScreenRenderTime != nullptr) {
+ env->DeleteGlobalRef(jFirstScreenRenderTime);
+ jFirstScreenRenderTime = nullptr;
+ }
+ jFirstScreenRenderTime = static_cast<jlongArray>(env->NewGlobalRef(jTemp));
+
+ env->DeleteLocalRef(jTemp);
+ return jFirstScreenRenderTime;
}
static jlongArray GetRenderFinishTime(JNIEnv *env, jobject jcaller, jstring instanceId) {
- jlongArray jRet = env->NewLongArray(3);
+ jlongArray jTemp = env->NewLongArray(3);
RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId));
- if (page == nullptr)
- return 0;
+ if (page == nullptr) {
+ if (jRenderFinishTime != nullptr) {
+ env->DeleteGlobalRef(jRenderFinishTime);
+ jRenderFinishTime = nullptr;
+ }
+ jRenderFinishTime = static_cast<jlongArray>(env->NewGlobalRef(jTemp));
+ return jRenderFinishTime;
+ }
std::vector<long> temp = page->PrintRenderSuccessLog();
@@ -171,9 +192,16 @@ static jlongArray GetRenderFinishTime(JNIEnv *env, jobject jcaller, jstring inst
ret[0] = temp[0];
ret[1] = temp[1];
ret[2] = temp[2];
- env->SetLongArrayRegion(jRet, 0, 3, ret);
+ env->SetLongArrayRegion(jTemp, 0, 3, ret);
+
+ if (jRenderFinishTime != nullptr) {
+ env->DeleteGlobalRef(jRenderFinishTime);
+ jRenderFinishTime = nullptr;
+ }
+ jRenderFinishTime = static_cast<jlongArray>(env->NewGlobalRef(jTemp));
- return jRet;
+ env->DeleteLocalRef(jTemp);
+ return jRenderFinishTime;
}
//Notice that this method is invoked from main thread.
@@ -547,6 +575,16 @@ jint OnLoad(JavaVM *vm, void *reserved) {
env->DeleteGlobalRef(jWXLogUtils);
env->DeleteGlobalRef(jMapClazz);
+ if (jFirstScreenRenderTime != nullptr) {
+ env->DeleteLocalRef(jFirstScreenRenderTime);
+ jFirstScreenRenderTime = nullptr;
+ }
+
+ if (jRenderFinishTime != nullptr) {
+ env->DeleteLocalRef(jRenderFinishTime);
+ jRenderFinishTime = nullptr;
+ }
+
for (auto iter = componentTypeCache.begin(); iter != componentTypeCache.end(); iter++) {
if (iter->second != nullptr) {
env->DeleteGlobalRef(iter->second);
[2/2] incubator-weex git commit: [WEEX-411][Core] Fix memory leak due
to return render time
Posted by ky...@apache.org.
[WEEX-411][Core] Fix memory leak due to return render time
This closes #1214
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/2e9c22b8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/2e9c22b8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/2e9c22b8
Branch: refs/heads/master
Commit: 2e9c22b842d9ff31115cca6c19838a00d1c1db3b
Parents: dd60f6f ffddb37
Author: YorkShen <sh...@gmail.com>
Authored: Mon May 28 10:50:56 2018 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Mon May 28 10:50:56 2018 +0800
----------------------------------------------------------------------
.../bridge/impl/weexcore_impl_android.cpp | 58 ++++++++++++++++----
1 file changed, 48 insertions(+), 10 deletions(-)
----------------------------------------------------------------------