@@ -18,35 +18,33 @@ using namespace tns;
1818
1919ObjectManager::ObjectManager ()
2020:
21- m_numberOfGC(0 ), m_currentObjectId(0 ), m_cache(NewWeakGlobalRefCallback, DeleteWeakGlobalRefCallback, 1000 , this )
21+ m_env(JEnv()), m_numberOfGC(0 ), m_currentObjectId(0 ), m_cache(NewWeakGlobalRefCallback, DeleteWeakGlobalRefCallback, 1000 , this )
2222{
23- JEnv env;
24-
25- PlatformClass = env.FindClass (" com/tns/Platform" );
23+ PlatformClass = m_env.FindClass (" com/tns/Platform" );
2624 assert (PlatformClass != nullptr );
2725
28- GET_JAVAOBJECT_BY_ID_METHOD_ID = env .GetStaticMethodID (PlatformClass, " getJavaObjectByID" , " (I)Ljava/lang/Object;" );
26+ GET_JAVAOBJECT_BY_ID_METHOD_ID = m_env .GetStaticMethodID (PlatformClass, " getJavaObjectByID" , " (I)Ljava/lang/Object;" );
2927 assert (GET_JAVAOBJECT_BY_ID_METHOD_ID != nullptr );
3028
31- GET_OR_CREATE_JAVA_OBJECT_ID_METHOD_ID = env .GetStaticMethodID (PlatformClass, " getOrCreateJavaObjectID" , " (Ljava/lang/Object;)I" );
29+ GET_OR_CREATE_JAVA_OBJECT_ID_METHOD_ID = m_env .GetStaticMethodID (PlatformClass, " getOrCreateJavaObjectID" , " (Ljava/lang/Object;)I" );
3230 assert (GET_OR_CREATE_JAVA_OBJECT_ID_METHOD_ID != nullptr );
3331
34- MAKE_INSTANCE_WEAK_BATCH_METHOD_ID = env .GetStaticMethodID (PlatformClass, " makeInstanceWeak" , " (Ljava/nio/ByteBuffer;IZ)V" );
32+ MAKE_INSTANCE_WEAK_BATCH_METHOD_ID = m_env .GetStaticMethodID (PlatformClass, " makeInstanceWeak" , " (Ljava/nio/ByteBuffer;IZ)V" );
3533 assert (MAKE_INSTANCE_WEAK_BATCH_METHOD_ID != nullptr );
3634
37- CHECK_WEAK_OBJECTS_ARE_ALIVE_METHOD_ID = env .GetStaticMethodID (PlatformClass, " checkWeakObjectAreAlive" , " (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)V" );
35+ CHECK_WEAK_OBJECTS_ARE_ALIVE_METHOD_ID = m_env .GetStaticMethodID (PlatformClass, " checkWeakObjectAreAlive" , " (Ljava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)V" );
3836 assert (CHECK_WEAK_OBJECTS_ARE_ALIVE_METHOD_ID != nullptr );
3937
40- JAVA_LANG_CLASS = env .FindClass (" java/lang/Class" );
38+ JAVA_LANG_CLASS = m_env .FindClass (" java/lang/Class" );
4139 assert (JAVA_LANG_CLASS != nullptr );
4240
43- GET_NAME_METHOD_ID = env .GetMethodID (JAVA_LANG_CLASS, " getName" , " ()Ljava/lang/String;" );
41+ GET_NAME_METHOD_ID = m_env .GetMethodID (JAVA_LANG_CLASS, " getName" , " ()Ljava/lang/String;" );
4442 assert (GET_NAME_METHOD_ID != nullptr );
4543
46- auto useGlobalRefsMethodID = env .GetStaticMethodID (PlatformClass, " useGlobalRefs" , " ()Z" );
44+ auto useGlobalRefsMethodID = m_env .GetStaticMethodID (PlatformClass, " useGlobalRefs" , " ()Z" );
4745 assert (useGlobalRefsMethodID != nullptr );
4846
49- auto useGlobalRefs = env .CallStaticBooleanMethod (PlatformClass, useGlobalRefsMethodID);
47+ auto useGlobalRefs = m_env .CallStaticBooleanMethod (PlatformClass, useGlobalRefsMethodID);
5048 m_useGlobalRefs = useGlobalRefs == JNI_TRUE;
5149
5250 ObjectManager::instance = this ;
@@ -74,15 +72,14 @@ JniLocalRef ObjectManager::GetJavaObjectByJsObject(const Local<Object>& object)
7472
7573 if (jsInstanceInfo != nullptr )
7674 {
77- JEnv env;
7875 if (m_useGlobalRefs)
7976 {
8077 JniLocalRef javaObject (GetJavaObjectByID (jsInstanceInfo->JavaObjectID ), true );
8178 return javaObject;
8279 }
8380 else
8481 {
85- JniLocalRef javaObject (env .NewLocalRef (GetJavaObjectByID (jsInstanceInfo->JavaObjectID )));
82+ JniLocalRef javaObject (m_env .NewLocalRef (GetJavaObjectByID (jsInstanceInfo->JavaObjectID )));
8683 return javaObject;
8784 }
8885 }
@@ -137,9 +134,9 @@ jweak ObjectManager::GetJavaObjectByID(uint32_t javaObjectID)
137134 return obj;
138135}
139136
140- jobject ObjectManager::GetJavaObjectByIDImpl (JEnv& env, uint32_t javaObjectID)
137+ jobject ObjectManager::GetJavaObjectByIDImpl (uint32_t javaObjectID)
141138{
142- jobject object = env .CallStaticObjectMethod (PlatformClass, GET_JAVAOBJECT_BY_ID_METHOD_ID, javaObjectID);
139+ jobject object = m_env .CallStaticObjectMethod (PlatformClass, GET_JAVAOBJECT_BY_ID_METHOD_ID, javaObjectID);
143140 return object;
144141}
145142
@@ -168,9 +165,7 @@ void ObjectManager::SetJavaClass(const Local<Object>& instance, jclass clazz)
168165
169166int ObjectManager::GetOrCreateObjectId (jobject object)
170167{
171- JEnv env;
172-
173- jint javaObjectID = env.CallStaticIntMethod (PlatformClass, GET_OR_CREATE_JAVA_OBJECT_ID_METHOD_ID, object);
168+ jint javaObjectID = m_env.CallStaticIntMethod (PlatformClass, GET_OR_CREATE_JAVA_OBJECT_ID_METHOD_ID, object);
174169
175170 return javaObjectID;
176171}
@@ -209,9 +204,7 @@ Local<Object> ObjectManager::CreateJSWrapper(jint javaObjectID, const string& ty
209204
210205Local<Object> ObjectManager::CreateJSWrapper (jint javaObjectID, const string& typeName, jobject instance)
211206{
212- JEnv env;
213-
214- JniLocalRef clazz (env.GetObjectClass (instance));
207+ JniLocalRef clazz (m_env.GetObjectClass (instance));
215208
216209 return CreateJSWrapperHelper (javaObjectID, typeName, clazz);
217210}
@@ -228,8 +221,7 @@ Local<Object> ObjectManager::CreateJSWrapperHelper(jint javaObjectID, const stri
228221
229222 if (!jsWrapper.IsEmpty ())
230223 {
231- JEnv env;
232- auto claz = env.FindClass (className);
224+ auto claz = m_env.FindClass (className);
233225 Link (jsWrapper, javaObjectID, claz);
234226 }
235227 return jsWrapper;
@@ -285,18 +277,14 @@ bool ObjectManager::CloneLink(const Local<Object>& src, const Local<Object>& des
285277
286278string ObjectManager::GetClassName (jobject javaObject)
287279{
288- JEnv env;
289-
290- JniLocalRef objectClass (env.GetObjectClass (javaObject));
280+ JniLocalRef objectClass (m_env.GetObjectClass (javaObject));
291281
292282 return GetClassName ((jclass) objectClass);
293283}
294284
295285string ObjectManager::GetClassName (jclass clazz)
296286{
297- JEnv env;
298-
299- JniLocalRef javaCanonicalName (env.CallObjectMethod (clazz, GET_NAME_METHOD_ID));
287+ JniLocalRef javaCanonicalName (m_env.CallObjectMethod (clazz, GET_NAME_METHOD_ID));
300288
301289 string className = ArgConverter::jstringToString (javaCanonicalName);
302290
@@ -339,8 +327,6 @@ void ObjectManager::JSObjectWeakCallback(Isolate *isolate, ObjectWeakCallbackSta
339327
340328 DEBUG_WRITE (" JSObjectWeakCallback objectId: %d, hasImplObj=%d" , javaObjectID, hasImplObj);
341329
342- JEnv env;
343-
344330 if (hasImplObj)
345331 {
346332 if (jsInstanceInfo->IsJavaObjectWeak )
@@ -652,8 +638,6 @@ void ObjectManager::OnGcFinished(GCType type, GCCallbackFlags flags)
652638
653639 m_markedForGC.pop ();
654640
655- JEnv env;
656-
657641 if (m_markedForGC.empty ())
658642 {
659643 MakeRegularObjectsWeak (m_released.m_IDs , m_buff);
@@ -673,8 +657,6 @@ void ObjectManager::OnGcFinished(GCType type, GCCallbackFlags flags)
673657
674658void ObjectManager::MakeRegularObjectsWeak (const set<int >& instances, DirectBuffer& inputBuff)
675659{
676- JEnv env;
677-
678660 jboolean keepAsWeak = JNI_FALSE;
679661
680662 for (auto javaObjectId : instances)
@@ -684,7 +666,7 @@ void ObjectManager::MakeRegularObjectsWeak(const set<int>& instances, DirectBuff
684666 if (!success)
685667 {
686668 int length = inputBuff.Length ();
687- env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, length, keepAsWeak);
669+ m_env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, length, keepAsWeak);
688670 inputBuff.Reset ();
689671 success = inputBuff.Write (javaObjectId);
690672 assert (success);
@@ -693,16 +675,14 @@ void ObjectManager::MakeRegularObjectsWeak(const set<int>& instances, DirectBuff
693675 int size = inputBuff.Size ();
694676 if (size > 0 )
695677 {
696- env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, size, keepAsWeak);
678+ m_env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, size, keepAsWeak);
697679 }
698680
699681 inputBuff.Reset ();
700682}
701683
702684void ObjectManager::MakeImplObjectsWeak (const vector<PersistentObjectIdPair>& instances, DirectBuffer& inputBuff)
703685{
704- JEnv env;
705-
706686 jboolean keepAsWeak = JNI_TRUE;
707687
708688 for (const auto & poIdPair : instances)
@@ -715,7 +695,7 @@ void ObjectManager::MakeImplObjectsWeak(const vector<PersistentObjectIdPair>& in
715695 {
716696 int length = inputBuff.Length ();
717697 jboolean keepAsWeak = JNI_TRUE;
718- env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, length, keepAsWeak);
698+ m_env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, length, keepAsWeak);
719699 inputBuff.Reset ();
720700 success = inputBuff.Write (javaObjectId);
721701 assert (success);
@@ -725,16 +705,14 @@ void ObjectManager::MakeImplObjectsWeak(const vector<PersistentObjectIdPair>& in
725705 if (size > 0 )
726706 {
727707 jboolean keepAsWeak = JNI_TRUE;
728- env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, size, keepAsWeak);
708+ m_env .CallStaticVoidMethod (PlatformClass, MAKE_INSTANCE_WEAK_BATCH_METHOD_ID, (jobject) inputBuff, size, keepAsWeak);
729709 }
730710
731711 inputBuff.Reset ();
732712}
733713
734714void ObjectManager::CheckWeakObjectsAreAlive (const vector<PersistentObjectIdPair>& instances, DirectBuffer& inputBuff, DirectBuffer& outputBuff)
735715{
736- JEnv env;
737-
738716 for (const auto & poIdPair : instances)
739717 {
740718 int javaObjectId = poIdPair.javaObjectId ;
@@ -744,7 +722,7 @@ void ObjectManager::CheckWeakObjectsAreAlive(const vector<PersistentObjectIdPair
744722 if (!success)
745723 {
746724 int length = inputBuff.Length ();
747- env .CallStaticVoidMethod (PlatformClass, CHECK_WEAK_OBJECTS_ARE_ALIVE_METHOD_ID, (jobject) inputBuff, (jobject) outputBuff, length);
725+ m_env .CallStaticVoidMethod (PlatformClass, CHECK_WEAK_OBJECTS_ARE_ALIVE_METHOD_ID, (jobject) inputBuff, (jobject) outputBuff, length);
748726 //
749727 int *released = outputBuff.GetData ();
750728 for (int i = 0 ; i < length; i++)
@@ -766,7 +744,7 @@ void ObjectManager::CheckWeakObjectsAreAlive(const vector<PersistentObjectIdPair
766744 int size = inputBuff.Size ();
767745 if (size > 0 )
768746 {
769- env .CallStaticVoidMethod (PlatformClass, CHECK_WEAK_OBJECTS_ARE_ALIVE_METHOD_ID, (jobject) inputBuff, (jobject) outputBuff, size);
747+ m_env .CallStaticVoidMethod (PlatformClass, CHECK_WEAK_OBJECTS_ARE_ALIVE_METHOD_ID, (jobject) inputBuff, (jobject) outputBuff, size);
770748 int *released = outputBuff.GetData ();
771749 for (int i = 0 ; i < size; i++)
772750 {
@@ -784,21 +762,20 @@ void ObjectManager::CheckWeakObjectsAreAlive(const vector<PersistentObjectIdPair
784762
785763jweak ObjectManager::NewWeakGlobalRefCallback (const int & javaObjectID, void *state)
786764{
787- ObjectManager *objManager = reinterpret_cast <ObjectManager*>(state);
788-
789- JEnv env;
765+ auto objManager = reinterpret_cast <ObjectManager*>(state);
790766
791- JniLocalRef obj (objManager->GetJavaObjectByIDImpl (env, javaObjectID));
767+ JniLocalRef obj (objManager->GetJavaObjectByIDImpl (javaObjectID));
792768
793- jweak weakRef = env .NewWeakGlobalRef (obj);
769+ jweak weakRef = objManager-> m_env .NewWeakGlobalRef (obj);
794770
795771 return weakRef;
796772}
797773
798774void ObjectManager::DeleteWeakGlobalRefCallback (const jweak& object, void *state)
799775{
800- JEnv env;
801- env.DeleteWeakGlobalRef (object);
776+ auto objManager = reinterpret_cast <ObjectManager*>(state);
777+
778+ objManager->m_env .DeleteWeakGlobalRef (object);
802779}
803780
804781Local<Object> ObjectManager::GetEmptyObject (Isolate *isolate)
0 commit comments