Create a realm locker to fast up next Realm.getInstance calls

This commit is contained in:
Benoit Marty 2019-07-05 16:28:15 +02:00
parent 03050c3f25
commit 302d23ba96
1 changed files with 9 additions and 0 deletions

View File

@ -31,6 +31,7 @@ import im.vector.matrix.android.internal.crypto.store.db.query.delete
import im.vector.matrix.android.internal.crypto.store.db.query.getById import im.vector.matrix.android.internal.crypto.store.db.query.getById
import im.vector.matrix.android.internal.crypto.store.db.query.getOrCreate import im.vector.matrix.android.internal.crypto.store.db.query.getOrCreate
import im.vector.matrix.android.internal.session.SessionScope import im.vector.matrix.android.internal.session.SessionScope
import io.realm.Realm
import io.realm.RealmConfiguration import io.realm.RealmConfiguration
import io.realm.Sort import io.realm.Sort
import io.realm.kotlin.where import io.realm.kotlin.where
@ -47,6 +48,9 @@ internal class RealmCryptoStore(private val realmConfiguration: RealmConfigurati
* Memory cache, to correctly release JNI objects * Memory cache, to correctly release JNI objects
* ========================================================================================== */ * ========================================================================================== */


// A realm instance, for faster future getInstance. Do not use it
private var realmLocker: Realm? = null

// The olm account // The olm account
private var olmAccount: OlmAccount? = null private var olmAccount: OlmAccount? = null


@ -86,6 +90,8 @@ internal class RealmCryptoStore(private val realmConfiguration: RealmConfigurati
} }


override fun open() { override fun open() {
realmLocker = Realm.getInstance(realmConfiguration)

// Ensure CryptoMetadataEntity is inserted in DB // Ensure CryptoMetadataEntity is inserted in DB
doWithRealm(realmConfiguration) { realm -> doWithRealm(realmConfiguration) { realm ->
var currentMetadata = realm.where<CryptoMetadataEntity>().findFirst() var currentMetadata = realm.where<CryptoMetadataEntity>().findFirst()
@ -131,6 +137,9 @@ internal class RealmCryptoStore(private val realmConfiguration: RealmConfigurati
inboundGroupSessionToRelease.clear() inboundGroupSessionToRelease.clear()


olmAccount?.releaseAccount() olmAccount?.releaseAccount()

realmLocker?.close()
realmLocker = null
} }


override fun storeDeviceId(deviceId: String) { override fun storeDeviceId(deviceId: String) {