From 7c59130af9250e0f23f5922e3641925b29dc63bb Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Sat, 10 Jun 2023 02:39:14 +0530 Subject: [PATCH] feat(benchmark): restore full UI exploration --- .../benchmark/BaselineProfileBenchmark.kt | 12 ++++- .../benchmark/BaselineProfileGenerator.kt | 10 ++++ .../claw/benchmark/BenchmarkUtils.kt | 48 ++++++------------- .../claw/common/posts/LobstersCard.kt | 2 +- 4 files changed, 37 insertions(+), 35 deletions(-) diff --git a/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileBenchmark.kt b/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileBenchmark.kt index e9031145..a7c57285 100644 --- a/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileBenchmark.kt +++ b/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileBenchmark.kt @@ -1,5 +1,5 @@ /* - * Copyright © 2022 Harsh Shandilya. + * Copyright © 2022-2023 Harsh Shandilya. * Use of this source code is governed by an MIT-style * license that can be found in the LICENSE file or at * https://opensource.org/licenses/MIT. @@ -50,7 +50,17 @@ class BaselineProfileBenchmark { startupMode = StartupMode.COLD, compilationMode = compilationMode ) { + device.executeShellCommand("pm clear $PACKAGE_NAME") + startActivityAndWait() + + device.waitForIdle() + + device.savePosts() + + device.exploreScreens() + + device.returnToHottestScreen() } } } diff --git a/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileGenerator.kt b/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileGenerator.kt index a2dc7c9c..3eb56d2f 100644 --- a/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileGenerator.kt +++ b/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BaselineProfileGenerator.kt @@ -29,6 +29,16 @@ class BaselineProfileGenerator { packageName = PACKAGE_NAME, maxIterations = 8, ) { + device.executeShellCommand("pm clear $PACKAGE_NAME") + startActivityAndWait() + + device.waitForIdle() + + device.savePosts() + + device.exploreScreens() + + device.returnToHottestScreen() } } diff --git a/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BenchmarkUtils.kt b/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BenchmarkUtils.kt index e7548b58..325f7aea 100644 --- a/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BenchmarkUtils.kt +++ b/benchmark/src/main/kotlin/dev/msfjarvis/claw/benchmark/BenchmarkUtils.kt @@ -6,56 +6,38 @@ */ package dev.msfjarvis.claw.benchmark -import androidx.benchmark.macro.MacrobenchmarkScope import androidx.test.uiautomator.By +import androidx.test.uiautomator.BySelector import androidx.test.uiautomator.UiDevice import androidx.test.uiautomator.UiObject2 import androidx.test.uiautomator.Until const val PACKAGE_NAME = "dev.msfjarvis.claw.android.benchmark" private const val AWAIT_TIMEOUT = 10_000L -private const val SAVE_BUTTON_DESC = "Add to saved posts" +private const val SAVE_BUTTON_ID = "save_button" private const val NAV_ID_HOTTEST = "HOTTEST" private const val NAV_ID_NEWEST = "NEWEST" private const val NAV_ID_SAVED = "SAVED" -private const val COMMENT_BUTTON_DESC = "Open comments" -@Suppress("Unused") -fun MacrobenchmarkScope.exploreUI(device: UiDevice) { - startActivityAndWait() - device.run { - savePosts() - - exploreScreens() - - returnToHottestScreen() - - openCommentsScreen() - } -} - -private fun UiDevice.waitForSubmitterName() { - wait(Until.hasObject(By.textContains("Submitted by")), AWAIT_TIMEOUT) -} - -private fun UiDevice.savePosts() { - waitForSubmitterName() - findObjects(By.desc(SAVE_BUTTON_DESC)).forEach(UiObject2::click) +fun UiDevice.savePosts() { + waitForObject(By.res(SAVE_BUTTON_ID)).click() } -private fun UiDevice.exploreScreens() { +fun UiDevice.exploreScreens() { listOf(NAV_ID_HOTTEST, NAV_ID_NEWEST, NAV_ID_SAVED).forEach { tag -> - findObject(By.res(tag)).click() - waitForSubmitterName() + waitForObject(By.res(tag)).click() + waitForIdle() } } -private fun UiDevice.returnToHottestScreen() { - findObject(By.res(NAV_ID_HOTTEST)).click() - waitForSubmitterName() +fun UiDevice.returnToHottestScreen() { + waitForObject(By.res(NAV_ID_HOTTEST)).click() } -private fun UiDevice.openCommentsScreen() { - waitForSubmitterName() - findObjects(By.desc(COMMENT_BUTTON_DESC)).first().click() +private fun UiDevice.waitForObject(selector: BySelector, timeout: Long = AWAIT_TIMEOUT): UiObject2 { + if (wait(Until.hasObject(selector), timeout)) { + return findObject(selector) + } + + error("Object with selector [$selector] not found") } diff --git a/common/src/main/kotlin/dev/msfjarvis/claw/common/posts/LobstersCard.kt b/common/src/main/kotlin/dev/msfjarvis/claw/common/posts/LobstersCard.kt index 084cd1ef..5c0e37a3 100644 --- a/common/src/main/kotlin/dev/msfjarvis/claw/common/posts/LobstersCard.kt +++ b/common/src/main/kotlin/dev/msfjarvis/claw/common/posts/LobstersCard.kt @@ -207,7 +207,7 @@ private fun CommentsButton( imageVector = Icons.Filled.Comment, tint = MaterialTheme.colorScheme.secondary, contentDescription = "Open comments", - modifier = Modifier.align(Alignment.Center), + modifier = Modifier.align(Alignment.Center).testTag("comments_button"), ) } }