Skip to content

Commit 9f97886

Browse files
committed
Separate startup profile from baseline profile
1 parent dcef2e7 commit 9f97886

File tree

9 files changed

+117
-4335
lines changed

9 files changed

+117
-4335
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ format:
3636

3737
baseline-profile:
3838
@echo "Generate baseline profile"
39-
@./gradlew :app:generateReleaseBaselineProfile
39+
@./gradlew :app:generateReleaseBaselineProfile --console verbose
4040

4141
build-aab:
4242
@echo "Build AAB"

app/src/main/kotlin/com/w2sv/wifiwidget/ui/screens/home/HomeScreen.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ import androidx.compose.runtime.remember
2222
import androidx.compose.runtime.rememberCoroutineScope
2323
import androidx.compose.ui.Alignment
2424
import androidx.compose.ui.Modifier
25-
import androidx.compose.ui.res.stringResource
2625
import androidx.compose.ui.unit.dp
2726
import androidx.compose.ui.unit.sp
2827
import androidx.hilt.navigation.compose.hiltViewModel
@@ -31,7 +30,6 @@ import com.ramcosta.composedestinations.annotation.Destination
3130
import com.ramcosta.composedestinations.annotation.RootGraph
3231
import com.w2sv.composed.CollectFromFlow
3332
import com.w2sv.composed.isLandscapeModeActive
34-
import com.w2sv.wifiwidget.R
3533
import com.w2sv.wifiwidget.ui.designsystem.AppSnackbarHost
3634
import com.w2sv.wifiwidget.ui.designsystem.AppTopBar
3735
import com.w2sv.wifiwidget.ui.designsystem.drawer.NavigationDrawer

app/src/release/generated/baselineProfiles/baseline-prof.txt

Lines changed: 34 additions & 18 deletions
Large diffs are not rendered by default.

app/src/release/generated/baselineProfiles/startup-prof.txt

Lines changed: 6 additions & 4299 deletions
Large diffs are not rendered by default.

benchmarking/src/main/kotlin/com/w2sv/baselineprofile/StartupBenchmarks.kt renamed to benchmarking/src/main/kotlin/com/w2sv/wifiwidget/StartupBenchmarks.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.w2sv.baselineprofile
1+
package com.w2sv.wifiwidget
22

33
import androidx.benchmark.macro.BaselineProfileMode
44
import androidx.benchmark.macro.CompilationMode
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package com.w2sv.wifiwidget
2+
3+
import androidx.test.uiautomator.By
4+
import androidx.test.uiautomator.Direction
5+
import androidx.test.uiautomator.UiDevice
6+
import androidx.test.uiautomator.UiSelector
7+
import java.io.ByteArrayOutputStream
8+
9+
internal fun UiDevice.criticalUserJourney() {
10+
closeLocationAccessPermissionRationalAndRequestDialogIfOpen()
11+
flingListDown("scrollableWifiPropertyList")
12+
13+
goToWidgetConfigurationScreen()
14+
waitForIdle()
15+
16+
flingListDown("scrollableWidgetConfigurationColumn")
17+
18+
pressBack()
19+
}
20+
21+
private fun UiDevice.closeLocationAccessPermissionRationalAndRequestDialogIfOpen() {
22+
findObject(By.text("Understood"))?.let { // 'Understood' button is part of the location access rational dialog
23+
it.click() // Closes the rational dialog
24+
waitForIdle() // Wait until location access permission request dialog appears
25+
pressBack() // Closes location access permission request dialog
26+
}
27+
}
28+
29+
private fun UiDevice.dumpWindowHierarchy(): String {
30+
val outputStream = ByteArrayOutputStream()
31+
dumpWindowHierarchy(outputStream)
32+
return outputStream.toString("UTF-8")
33+
}
34+
35+
private fun UiDevice.flingListDown(resourceName: String) {
36+
findObject(By.res(resourceName)).fling(Direction.DOWN)
37+
waitForIdle()
38+
}
39+
40+
private fun UiDevice.goToWidgetConfigurationScreen() {
41+
findObject(UiSelector().description("Open the widget configuration screen.")).click()
42+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package com.w2sv.wifiwidget.baselineprofile
2+
3+
import androidx.benchmark.macro.junit4.BaselineProfileRule
4+
import androidx.test.ext.junit.runners.AndroidJUnit4
5+
import androidx.test.filters.LargeTest
6+
import com.w2sv.wifiwidget.criticalUserJourney
7+
import org.junit.Rule
8+
import org.junit.Test
9+
import org.junit.runner.RunWith
10+
11+
@RunWith(AndroidJUnit4::class)
12+
@LargeTest
13+
class CriticalUserJourneyBaselineProfile {
14+
15+
@get:Rule
16+
val rule = BaselineProfileRule()
17+
18+
@Test
19+
fun generate() {
20+
rule.collect(packageName = "com.w2sv.wifiwidget") {
21+
startActivityAndWait()
22+
device.criticalUserJourney()
23+
}
24+
}
25+
}

benchmarking/src/main/kotlin/com/w2sv/baselineprofile/BaselineProfileGenerator.kt renamed to benchmarking/src/main/kotlin/com/w2sv/wifiwidget/baselineprofile/StartupBaselineProfile.kt

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
package com.w2sv.baselineprofile
1+
package com.w2sv.wifiwidget.baselineprofile
22

3-
import android.content.Context
3+
import androidx.benchmark.macro.MacrobenchmarkScope
44
import androidx.benchmark.macro.junit4.BaselineProfileRule
5-
import androidx.test.core.app.ApplicationProvider
65
import androidx.test.ext.junit.runners.AndroidJUnit4
76
import androidx.test.filters.LargeTest
7+
import com.w2sv.wifiwidget.StartupBenchmarks
88
import org.junit.Rule
99
import org.junit.Test
1010
import org.junit.runner.RunWith
@@ -34,7 +34,7 @@ import org.junit.runner.RunWith
3434
**/
3535
@RunWith(AndroidJUnit4::class)
3636
@LargeTest
37-
class BaselineProfileGenerator {
37+
class StartupBaselineProfile {
3838

3939
@get:Rule
4040
val rule = BaselineProfileRule()
@@ -44,12 +44,8 @@ class BaselineProfileGenerator {
4444
rule.collect(
4545
packageName = "com.w2sv.wifiwidget",
4646
// See: https://d.android.com/topic/performance/baselineprofiles/dex-layout-optimizations
47-
includeInStartupProfile = true
48-
) {
49-
pressHome()
50-
startActivityAndWait()
51-
52-
device.criticalUserJourney()
53-
}
47+
includeInStartupProfile = true,
48+
profileBlock = MacrobenchmarkScope::startActivityAndWait
49+
)
5450
}
5551
}

core/widget/src/main/kotlin/com/w2sv/widget/di/WidgetModule.kt

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,6 @@ internal object WidgetModule {
5050

5151
@WidgetPinSuccessFlow
5252
@Provides
53-
fun widgetPinSuccessFlow(
54-
@MutableWidgetPinSuccessFlow mutableWidgetPinSuccessFlow: MutableSharedFlow<Unit>
55-
): SharedFlow<Unit> =
53+
fun widgetPinSuccessFlow(@MutableWidgetPinSuccessFlow mutableWidgetPinSuccessFlow: MutableSharedFlow<Unit>): SharedFlow<Unit> =
5654
mutableWidgetPinSuccessFlow.asSharedFlow()
5755
}

0 commit comments

Comments
 (0)