Fixed
Status Update
Comments
xa...@google.com <xa...@google.com>
ma...@google.com <ma...@google.com> #2
Yigit, do you have time to fix it?
reemission of the same liveData is racy
reemission of the same liveData is racy
ap...@google.com <ap...@google.com> #3
yea i'll take it.
ma...@google.com <ma...@google.com>
xa...@google.com <xa...@google.com> #4
Thanks for the detailed analysis. This may not be an issue anymore since we've started using Main.immediate there but I' not sure; I'll try to create a test case.
ma...@google.com <ma...@google.com> #5
just emitting same live data reproduces the issue.
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
Description
The
androidx.baselineprofile
plugin generates additional<flavor>NonMinifiedRelease
and<flavor>BenchmarkRelease
variants for each original variant that's non-debuggable (release).Sometimes not all combinations of flavor + build type are needed so it makes sense to disable certain variants with the
androidComponents.beforeVariants
API.For example, a project has defined 1 flavor dimension "environment" with 4 flavors:
By default this produces 8 variants:
We can disable 4 of the variants that are irrelevant:
When baseline profile plugin is applied to the app module, before any variant filtering it adds the following variants:
Let's say I want to generate baseline profile and run benchmark with just the
devRelease
variant.The generated
devNonMinifiedRelease
anddevBenchmarkRelease
should be enough. So I would still filter outdevRelease
.I'm also able to filter out the generated
<mock|demo>NonMinifiedRelease
and<mock|demo>BenchmarkRelease
variants as well as the original<mock|demo>Release
.Now I also want to filter out
prodNonMinifiedRelease
andprodBenchmarkRelease
as I don't need to generate BP or run benchmark with theprod
flavor. So the variant filter looks like thisWith this the build fails during configuration:
It seems like the task wiring fails when a
release
variant (prodRelease
in this case) is enabled but the correspondingbenchmarkRelease
variant is disabled.Adding the
prodBenchmarkRelease
variant fixes it.But the
prodBenchmarkRelease
variant is useless while lot of tasks are registered for it.I'm not sure what the right solution should be as there seems to be a chicken and egg problem when variants are being filtered out by user but also being added by the plugin during configuration.
To reproduce, please checkout this sample .
app/build.gradle.kts
, comment out"prodBenchmarkRelease",
from line 170../gradlew
Studio Build: Android Studio Koala 2024.1.1 Canary 3
Version of Gradle Plugin: 8.5.0-alpha03
Version of Gradle: 8.7
Version of
androidx.baselineprofile
: 1.3.0-alpha02Version of Java: 21
OS: macOS