Skip to content

Commit af918e7

Browse files
committed
feat: improve discrete bonding curve table load performance
also utilize androidx startup where possible Signed-off-by: Brandon McAnsh <git@bmcreations.dev>
1 parent bcf1280 commit af918e7

17 files changed

Lines changed: 251 additions & 107 deletions

File tree

apps/flipcash/app/src/main/AndroidManifest.xml

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,27 @@
198198
android:name="androidx.work.WorkManagerInitializer"
199199
android:value="androidx.startup"
200200
tools:node="remove" />
201+
202+
<meta-data
203+
android:name="com.flipcash.app.internal.startup.TraceInitializer"
204+
android:value="androidx.startup" />
205+
206+
<meta-data
207+
android:name="com.flipcash.app.internal.startup.FirebaseInitializer"
208+
android:value="androidx.startup" />
209+
210+
<meta-data
211+
android:name="com.flipcash.app.internal.startup.LibSodiumInitializer"
212+
android:value="androidx.startup" />
213+
214+
<meta-data
215+
android:name="com.flipcash.app.internal.startup.MnemonicCacheInitializer"
216+
android:value="androidx.startup" />
217+
218+
<meta-data
219+
android:name="com.flipcash.app.internal.startup.DiscreteBondingCurveInitializer"
220+
android:value="androidx.startup" />
221+
201222
</provider>
202223
</application>
203224

apps/flipcash/app/src/main/kotlin/com/flipcash/app/FlipcashApp.kt

Lines changed: 0 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,13 @@ import coil3.disk.DiskCache
1111
import coil3.disk.directory
1212
import coil3.request.CachePolicy
1313
import coil3.request.crossfade
14-
import com.bugsnag.android.Bugsnag
15-
import com.flipcash.android.app.BuildConfig
1614
import com.flipcash.app.auth.AuthManager
1715
import com.flipcash.app.currency.PreferredCurrencyController
18-
import com.flipcash.libs.currency.math.Curves
19-
import com.getcode.crypt.MnemonicCache
2016
import com.getcode.opencode.repositories.EventRepository
2117
import com.getcode.utils.ErrorUtils
22-
import com.getcode.utils.TraceType
2318
import com.getcode.utils.trace
24-
import com.google.firebase.Firebase
25-
import com.google.firebase.crashlytics.crashlytics
26-
import com.google.firebase.initialize
27-
import com.ionspin.kotlin.crypto.LibsodiumInitializer
2819
import dagger.hilt.android.HiltAndroidApp
2920
import io.reactivex.rxjava3.plugins.RxJavaPlugins
30-
import timber.log.Timber
3121
import javax.inject.Inject
3222

3323
@HiltAndroidApp
@@ -53,45 +43,11 @@ class FlipcashApp : Application(), Configuration.Provider, SingletonImageLoader.
5343

5444
override fun onCreate() {
5545
super.onCreate()
56-
if (BuildConfig.DEBUG) {
57-
Timber.plant(object : Timber.DebugTree() {
58-
override fun createStackElementTag(element: StackTraceElement): String {
59-
val elementTag = super.createStackElementTag(element)
60-
.orEmpty()
61-
.split("$")
62-
.filter { it.isNotEmpty() }
63-
.take(2)
64-
.joinToString(" ")
65-
.replace("_", " ")
66-
67-
val methodName = element.methodName
68-
.split("$")
69-
.firstOrNull()
70-
.orEmpty()
71-
72-
return String.format(
73-
"%s | %s ",
74-
elementTag,
75-
methodName
76-
)
77-
}
78-
})
79-
} else {
80-
Bugsnag.start(this)
81-
}
82-
83-
LibsodiumInitializer.initializeWithCallback {
84-
trace("libsodium initialized", type = TraceType.Process)
85-
}
8646

8747
RxJavaPlugins.setErrorHandler {
8848
ErrorUtils.handleError(it)
8949
}
9050

91-
Firebase.initialize(this)
92-
Firebase.crashlytics.isCrashlyticsCollectionEnabled = BuildConfig.NOTIFY_ERRORS || !BuildConfig.DEBUG
93-
MnemonicCache.init(this)
94-
Curves.initialize(this)
9551
authManager.init()
9652

9753
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.flipcash.app.internal.startup
2+
3+
import android.content.Context
4+
import androidx.startup.Initializer
5+
import com.flipcash.libs.currency.math.Curves
6+
import kotlinx.coroutines.CoroutineScope
7+
import kotlinx.coroutines.Dispatchers
8+
import kotlinx.coroutines.launch
9+
10+
class DiscreteBondingCurveInitializer : Initializer<Unit> {
11+
override fun create(context: Context) {
12+
CoroutineScope(Dispatchers.IO).launch {
13+
Curves.initialize(context)
14+
}
15+
}
16+
17+
override fun dependencies(): List<Class<out Initializer<*>?>?> {
18+
return emptyList()
19+
}
20+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.flipcash.app.internal.startup
2+
3+
import android.content.Context
4+
import androidx.startup.Initializer
5+
import com.flipcash.android.app.BuildConfig
6+
import com.google.firebase.Firebase
7+
import com.google.firebase.crashlytics.crashlytics
8+
import com.google.firebase.initialize
9+
10+
class FirebaseInitializer: Initializer<Unit> {
11+
override fun create(context: Context) {
12+
Firebase.initialize(context)
13+
Firebase.crashlytics.isCrashlyticsCollectionEnabled = BuildConfig.NOTIFY_ERRORS || !BuildConfig.DEBUG
14+
}
15+
16+
override fun dependencies(): List<Class<out Initializer<*>?>?> {
17+
return emptyList()
18+
}
19+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.flipcash.app.internal.startup
2+
3+
import android.content.Context
4+
import androidx.startup.Initializer
5+
import com.getcode.utils.TraceType
6+
import com.getcode.utils.trace
7+
import com.ionspin.kotlin.crypto.LibsodiumInitializer
8+
9+
class LibSodiumInitializer: Initializer<Unit> {
10+
override fun create(context: Context) {
11+
LibsodiumInitializer.initializeWithCallback {
12+
trace("libsodium initialized", type = TraceType.Process)
13+
}
14+
}
15+
16+
override fun dependencies(): List<Class<out Initializer<*>?>?> {
17+
return emptyList()
18+
}
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package com.flipcash.app.internal.startup
2+
3+
import android.content.Context
4+
import androidx.startup.Initializer
5+
import com.getcode.crypt.MnemonicCache
6+
7+
class MnemonicCacheInitializer: Initializer<Unit> {
8+
override fun create(context: Context) {
9+
MnemonicCache.init(context)
10+
}
11+
12+
override fun dependencies(): List<Class<out Initializer<*>?>?> {
13+
return emptyList()
14+
}
15+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.flipcash.app.internal.startup
2+
3+
import android.content.Context
4+
import androidx.startup.Initializer
5+
import com.bugsnag.android.Bugsnag
6+
import com.flipcash.android.app.BuildConfig
7+
import timber.log.Timber
8+
9+
class TraceInitializer: Initializer<Unit> {
10+
override fun create(context: Context) {
11+
if (BuildConfig.DEBUG) {
12+
Timber.plant(object : Timber.DebugTree() {
13+
override fun createStackElementTag(element: StackTraceElement): String {
14+
val elementTag = super.createStackElementTag(element)
15+
.orEmpty()
16+
.split("$")
17+
.filter { it.isNotEmpty() }
18+
.take(2)
19+
.joinToString(" ")
20+
.replace("_", " ")
21+
22+
val methodName = element.methodName
23+
.split("$")
24+
.firstOrNull()
25+
.orEmpty()
26+
27+
return String.format(
28+
"%s | %s ",
29+
elementTag,
30+
methodName
31+
)
32+
}
33+
})
34+
} else {
35+
Bugsnag.start(context)
36+
}
37+
}
38+
39+
override fun dependencies(): List<Class<out Initializer<*>?>?> {
40+
return emptyList()
41+
}
42+
}

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/App.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@ import androidx.compose.runtime.mutableStateOf
1313
import androidx.compose.runtime.remember
1414
import androidx.compose.runtime.setValue
1515
import androidx.compose.ui.Modifier
16+
import androidx.compose.ui.platform.LocalContext
1617
import androidx.compose.ui.res.stringResource
1718
import androidx.compose.ui.unit.dp
1819
import androidx.lifecycle.Lifecycle
1920
import androidx.lifecycle.compose.LocalLifecycleOwner
2021
import androidx.lifecycle.compose.collectAsStateWithLifecycle
22+
import androidx.startup.AppInitializer
2123
import cafe.adriel.voyager.core.registry.ScreenRegistry
2224
import cafe.adriel.voyager.core.stack.StackEvent
2325
import cafe.adriel.voyager.navigator.CurrentScreen
@@ -29,6 +31,7 @@ import com.flipcash.app.bill.customization.BillPlaygroundScaffold
2931
import com.flipcash.app.core.LocalUserManager
3032
import com.flipcash.app.core.AppRoute
3133
import com.flipcash.app.core.navigation.DeeplinkType
34+
import com.flipcash.app.internal.startup.DiscreteBondingCurveInitializer
3235
import com.flipcash.app.internal.ui.navigation.AppScreenContent
3336
import com.flipcash.app.internal.ui.navigation.MainRoot
3437
import com.flipcash.app.onramp.ExternalWalletOnRampHandler

apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/ui/navigation/AppScreenContent.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@ import com.flipcash.app.scanner.ScannerScreen
3737
import com.flipcash.app.shareapp.ShareAppScreen
3838
import com.flipcash.app.tokens.BuySellFlow
3939
import com.flipcash.app.tokens.TokenBuySellEntryScreen
40-
import com.flipcash.app.tokens.TokenSelectScreen
4140
import com.flipcash.app.tokens.TokenInfoScreen
41+
import com.flipcash.app.tokens.TokenSelectScreen
4242
import com.flipcash.app.tokens.TokenSellReceiptScreen
4343
import com.flipcash.app.transactions.TransactionHistoryScreen
4444
import com.flipcash.app.transfers.TransferInformationalScreen

libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Curves.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ interface BondingCurve {
4242
}
4343

4444
object Curves {
45-
fun initialize(context: Context) {
45+
suspend fun initialize(context: Context) {
4646
// only discrete needs to be initialized
4747
val tableLoader = AndroidTableLoader(context)
4848
DiscreteBondingCurve.initialize(tableLoader)

0 commit comments

Comments
 (0)