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(-)
----------------------------------------------------------------------