为经过身份验证的屏幕生成基线配置文件android

问题描述 投票:0回答:1

Android 支持生成基线配置文件以提高性能。通过使用微基准与 UI 交互以在屏幕上显示某些内容。

此处的文档:https://developer.android.com/topic/performance/benchmarking/macrobenchmark-overview

https://developer.android.com/topic/performance/baselineprofiles/create-baselineprofile

但是通过使用功能

startActivityAndAwait
我只能打开登录屏幕,所以我无法在私人屏幕(登录屏幕)上进行交互。我使用
firebase auth
作为登录功能。

@LargeTest
@RunWith(AndroidJUnit4::class)
class SampleStartupBenchmark {
    @get:Rule
    val benchmarkRule = MacrobenchmarkRule()

    @Test
    fun startup() = benchmarkRule.measureRepeated(
        packageName = TARGET_PACKAGE,
        metrics = listOf(StartupTimingMetric()),
        iterations = DEFAULT_ITERATIONS,
        setupBlock = {
            // Press home button before each run to ensure the starting activity isn't visible.
            pressHome()
        }
    ) {
        // starts default launch activity
        startActivityAndWait()
    }
}

问题是如何与私人屏幕交互来生成期望的

baseline profile
文件?

android android-jetpack-compose microbenchmark
1个回答
0
投票

不确定其他方法,但我必须有一个登录步骤。

主要功能
fun MacrobenchmarkScope.startBenchmark() {
    pressHome()
    startActivityAndWait()

    loginByPhone()   

    // After login, do another steps
}
登录功能
fun MacrobenchmarkScope.loginByPhone() {
    waitAndClickElement("phoneLoginButton")

    setTextFieldValue("phoneNumberTextField", "1222223333")

    // Send OPT Next button
    waitAndClickElement("sendOTPButton")

    setTextFieldValue("smsVerifyTextField", "123456")

    // SMS verify Next button
    waitAndClickElement("verifyOTPButton")
}
一些帮手
fun MacrobenchmarkScope.waitAndClickElement(res: String) {
    val btnSelector = By.res(res)
    device.wait(Until.hasObject(btnSelector), 5000)

    val buttonObject = device.findObject(btnSelector)
    if (buttonObject == null) {
        Log.e("waitAndClickElement", "error at res=$res")
    }

    buttonObject.click()
}

fun MacrobenchmarkScope.setTextFieldValue(res: String, value: String) {
    val textFieldSelector = By.res(res)
    device.wait(Until.hasObject(textFieldSelector), 5_500)

    val textFieldObject = device.findObject(textFieldSelector)

    if (textFieldObject == null) {
        Log.e("setTextFieldValue", "error at res=$res")
    }

    textFieldObject.text = value
}

希望这对某人有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.