Skip to content

Commit 2331372

Browse files
committed
Enable metro tracing with integration
1 parent 8a4de9e commit 2331372

50 files changed

Lines changed: 402 additions & 286 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

android-application/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ kotlin {
4545
implementation(projects.injectScopes)
4646
implementation(projects.processLifecycle)
4747
implementation(projects.strictMode)
48+
implementation(projects.tracing)
4849
implementation(projects.updatable)
4950
}
5051
}

android-application/src/androidMain/kotlin/com/alexvanyo/composelife/BaseComposeLifeApplication.kt

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ import com.alexvanyo.composelife.scopes.ApplicationGraph
2929
import com.alexvanyo.composelife.scopes.ApplicationGraphArguments
3030
import com.alexvanyo.composelife.scopes.ApplicationGraphOwner
3131
import com.alexvanyo.composelife.strictmode.initStrictModeIfNeeded
32+
import com.alexvanyo.composelife.tracing.AbstractTraceDriver
33+
import com.alexvanyo.composelife.tracing.AbstractTraceDriverFactory
34+
import com.alexvanyo.composelife.tracing.Tracer
35+
import com.alexvanyo.composelife.tracing.createTraceDriver
36+
import com.alexvanyo.composelife.tracing.trace
3237
import com.alexvanyo.composelife.updatable.Updatable
3338
import dev.zacsweers.metro.AppScope
3439
import dev.zacsweers.metro.ContributesTo
@@ -49,24 +54,34 @@ internal val ApplicationGraph.composeLifeApplicationCtx: ComposeLifeApplicationC
4954
this as ComposeLifeApplicationCtx
5055

5156
@Suppress("UnnecessaryAbstractClass", "AbstractClassCanBeConcreteClass")
52-
abstract class BaseComposeLifeApplication<G>(private val createGlobalGraph: () -> G) :
57+
abstract class BaseComposeLifeApplication<G>(private val createGlobalGraph: (tracer: Tracer) -> G) :
5358
Application(),
59+
AbstractTraceDriverFactory,
5460
ApplicationGraphOwner {
5561
override lateinit var applicationGraph: ApplicationGraph
5662

63+
private val traceDriver by lazy { createTraceDriver(this) }
64+
65+
override fun create(): AbstractTraceDriver = traceDriver
66+
5767
override fun onCreate() {
5868
super.onCreate()
5969

6070
initStrictModeIfNeeded()
6171
Composer.setDiagnosticStackTraceMode(ComposeStackTraceMode.Auto)
6272

63-
val globalGraph = createGlobalGraph()
64-
applicationGraph =
73+
val tracer = traceDriver.tracer
74+
75+
val globalGraph = tracer.trace("startup", "createGlobalGraph") {
76+
createGlobalGraph(tracer)
77+
}
78+
applicationGraph = tracer.trace("startup", "createApplicationGraph") {
6579
(globalGraph as ApplicationGraph.Factory).create(
6680
object : ApplicationGraphArguments {
6781
override val applicationContext: Context = this@BaseComposeLifeApplication
6882
},
6983
)
84+
}
7085
val ctx = applicationGraph.composeLifeApplicationCtx
7186
val processLifecycleOwner = ctx.processLifecycleOwner
7287
val appUpdatables = ctx.appUpdatables

app-impl/src/androidMain/kotlin/com/alexvanyo/composelife/ComposeLifeApplication.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,20 @@
1717
package com.alexvanyo.composelife
1818

1919
import com.alexvanyo.composelife.scopes.GlobalScope
20+
import com.alexvanyo.composelife.tracing.Tracer
2021
import dev.zacsweers.metro.DependencyGraph
21-
import dev.zacsweers.metro.createGraph
22+
import dev.zacsweers.metro.Provides
23+
import dev.zacsweers.metro.createGraphFactory
2224

23-
class ComposeLifeApplication : BaseComposeLifeApplication<GlobalGraph>({ createGraph() })
25+
class ComposeLifeApplication :
26+
BaseComposeLifeApplication<GlobalGraph>({ tracer ->
27+
createGraphFactory<GlobalGraph.Factory>().create(tracer)
28+
})
2429

2530
@DependencyGraph(GlobalScope::class)
26-
interface GlobalGraph
31+
interface GlobalGraph {
32+
@DependencyGraph.Factory
33+
fun interface Factory {
34+
fun create(@Provides tracer: Tracer): GlobalGraph
35+
}
36+
}

app-test-fixtures/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ kotlin {
5454
implementation(projects.preferencesTestFixtures)
5555
implementation(projects.resourcesApp)
5656
implementation(projects.strictMode)
57+
implementation(projects.tracingTestFixtures)
5758
implementation(projects.uiApp)
5859
implementation(projects.uiCommon)
5960
implementation(projects.uiMobile)

app-test-fixtures/src/androidMain/kotlin/com/alexvanyo/composelife/GlobalGraph.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,18 +17,28 @@
1717
package com.alexvanyo.composelife
1818

1919
import com.alexvanyo.composelife.scopes.GlobalScope
20+
import com.alexvanyo.composelife.tracing.TestTraceDriver
21+
import com.alexvanyo.composelife.tracing.Tracer
2022
import com.alexvanyo.composelife.ui.app.UiWithLoadedPreferencesScope
2123
import com.alexvanyo.composelife.ui.app.UiWithLoadedPreferencesScopeBindings
2224
import dev.zacsweers.metro.BindingContainer
2325
import dev.zacsweers.metro.ContributesTo
2426
import dev.zacsweers.metro.DependencyGraph
2527
import dev.zacsweers.metro.Provides
26-
import dev.zacsweers.metro.createGraph
28+
import dev.zacsweers.metro.createGraphFactory
2729

2830
@DependencyGraph(GlobalScope::class)
29-
interface TestGlobalGraph
31+
interface TestGlobalGraph {
32+
@DependencyGraph.Factory
33+
fun interface Factory {
34+
fun create(@Provides tracer: Tracer): TestGlobalGraph
35+
}
36+
}
3037

31-
internal val testGlobalGraph = createGraph<TestGlobalGraph>()
38+
private val testTraceDriver = TestTraceDriver()
39+
internal val testGlobalGraph = createGraphFactory<TestGlobalGraph.Factory>().create(
40+
testTraceDriver.tracer,
41+
)
3242

3343
@ContributesTo(UiWithLoadedPreferencesScope::class, replaces = [UiWithLoadedPreferencesScopeBindings::class])
3444
@BindingContainer

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ plugins {
3131
}
3232

3333
metro {
34+
enableRuntimeTracing.set(true)
3435
unusedGraphInputsSeverity = DiagnosticSeverity.NONE
3536
}
3637

app/dependencies/releaseRuntimeClasspath.txt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,9 @@ com.squareup.okio:okio-jvm:3.18.1
172172
com.squareup.okio:okio:3.18.1
173173
com.squareup.wire:wire-runtime-jvm:7.0.0-alpha05
174174
com.squareup.wire:wire-runtime:7.0.0-alpha05
175-
dev.zacsweers.metro:runtime-jvm:1.2.1
176-
dev.zacsweers.metro:runtime:1.2.1
175+
dev.zacsweers.metro:metro-trace:1.3.2
176+
dev.zacsweers.metro:runtime-jvm:1.3.2
177+
dev.zacsweers.metro:runtime:1.3.2
177178
io.coil-kt.coil3:coil-compose-core-android:3.5.0
178179
io.coil-kt.coil3:coil-compose-core:3.5.0
179180
io.coil-kt.coil3:coil-core-android:3.5.0

data/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@ kotlin {
108108
implementation(projects.filesystemTestFixtures)
109109
implementation(projects.injectTest)
110110
implementation(projects.networkTestFixtures)
111+
implementation(projects.tracingTestFixtures)
111112
implementation(projects.workTestFixtures)
112113
}
113114
}

data/src/jvmTest/kotlin/com/alexvanyo/composelife/data/GlobalGraph.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,10 +17,19 @@
1717
package com.alexvanyo.composelife.data
1818

1919
import com.alexvanyo.composelife.scopes.GlobalScope
20+
import com.alexvanyo.composelife.tracing.TestTraceDriver
21+
import com.alexvanyo.composelife.tracing.Tracer
2022
import dev.zacsweers.metro.DependencyGraph
21-
import dev.zacsweers.metro.createGraph
23+
import dev.zacsweers.metro.Provides
24+
import dev.zacsweers.metro.createGraphFactory
2225

2326
@DependencyGraph(GlobalScope::class)
24-
interface GlobalGraph
27+
interface GlobalGraph {
28+
@DependencyGraph.Factory
29+
fun interface Factory {
30+
fun create(@Provides tracer: Tracer): GlobalGraph
31+
}
32+
}
2533

26-
internal val globalGraph = createGraph<GlobalGraph>()
34+
private val testTraceDriver = TestTraceDriver()
35+
internal val globalGraph = createGraphFactory<GlobalGraph.Factory>().create(testTraceDriver.tracer)

database/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ kotlin {
102102
implementation(projects.filesystemTestFixtures)
103103
implementation(projects.injectTest)
104104
implementation(projects.kmpAndroidRunner)
105+
implementation(projects.tracingTestFixtures)
105106
}
106107
}
107108
val jvmTest by creating {

0 commit comments

Comments
 (0)