Reduce flicker memory consumption (Pt 4)

Improve flicker memory consumption with the following:
- Use a static factory for better compatibility with JUnit4 ParameterizedRunner
- Ensure `cleanUp` is always called, even when an exception occurs

Bug: 178572522
Test: atest FlickerTests WMShellFlickerTests
Change-Id: Id9e539c0e8bce350f94811cab58a726e47aac525
This commit is contained in:
Nataniel Borges
2021-01-28 18:06:09 +01:00
parent eeda0eb193
commit 1ee38b1c18
25 changed files with 121 additions and 198 deletions

View File

@@ -21,7 +21,6 @@ import android.platform.test.annotations.Presubmit
import android.os.SystemClock
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
@@ -46,10 +45,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class AppPairsTestCannotPairNonResizeableApps(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object : AppPairsTransition(InstrumentationRegistry.getInstrumentation()) {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
@@ -83,9 +80,8 @@ class AppPairsTestCannotPairNonResizeableApps(
}
}
return FlickerTestRunnerFactory(instrumentation,
repetitions = AppPairsHelper.TEST_REPETITIONS)
.buildTest(transition, testSpec)
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
transition, testSpec, repetitions = AppPairsHelper.TEST_REPETITIONS)
}
}
}

View File

@@ -21,13 +21,12 @@ import android.os.SystemClock
import android.platform.test.annotations.Presubmit
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
import com.android.server.wm.flicker.helpers.buildTestTag
import com.android.server.wm.flicker.traces.layers.getVisibleBounds
import com.android.wm.shell.flicker.FlickerTestBase
import com.android.wm.shell.flicker.FlickerTestBase.Companion.APP_PAIR_SPLIT_DIVIDER
import com.android.wm.shell.flicker.appPairsDividerIsVisible
import com.android.wm.shell.flicker.helpers.AppPairsHelper
import org.junit.FixMethodOrder
@@ -44,10 +43,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class AppPairsTestPairPrimaryAndSecondaryApps(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object : AppPairsTransition(InstrumentationRegistry.getInstrumentation()) {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
@@ -67,8 +64,7 @@ class AppPairsTestPairPrimaryAndSecondaryApps(
layersTrace {
appPairsDividerIsVisible()
end("appsEndingBounds", enabled = false) {
val dividerRegion = entry.getVisibleBounds(
FlickerTestBase.APP_PAIR_SPLIT_DIVIDER)
val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER)
this.hasVisibleRegion(primaryApp.defaultWindowName,
appPairsHelper.getPrimaryBounds(dividerRegion))
.hasVisibleRegion(secondaryApp.defaultWindowName,
@@ -83,8 +79,8 @@ class AppPairsTestPairPrimaryAndSecondaryApps(
}
}
}
return FlickerTestRunnerFactory(instrumentation,
repetitions = AppPairsHelper.TEST_REPETITIONS).buildTest(transition, testSpec)
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation, transition,
testSpec, repetitions = AppPairsHelper.TEST_REPETITIONS)
}
}
}

View File

@@ -21,13 +21,12 @@ import android.os.SystemClock
import android.platform.test.annotations.Presubmit
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
import com.android.server.wm.flicker.helpers.buildTestTag
import com.android.server.wm.flicker.traces.layers.getVisibleBounds
import com.android.wm.shell.flicker.FlickerTestBase
import com.android.wm.shell.flicker.FlickerTestBase.Companion.APP_PAIR_SPLIT_DIVIDER
import com.android.wm.shell.flicker.appPairsDividerIsInvisible
import com.android.wm.shell.flicker.helpers.AppPairsHelper
import org.junit.FixMethodOrder
@@ -44,10 +43,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class AppPairsTestUnpairPrimaryAndSecondaryApps(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object : AppPairsTransition(InstrumentationRegistry.getInstrumentation()) {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
@@ -72,8 +69,7 @@ class AppPairsTestUnpairPrimaryAndSecondaryApps(
layersTrace {
appPairsDividerIsInvisible()
start("appsStartingBounds", enabled = false) {
val dividerRegion = entry.getVisibleBounds(
FlickerTestBase.APP_PAIR_SPLIT_DIVIDER)
val dividerRegion = entry.getVisibleBounds(APP_PAIR_SPLIT_DIVIDER)
this.hasVisibleRegion(primaryApp.defaultWindowName,
appPairsHelper.getPrimaryBounds(dividerRegion))
.hasVisibleRegion(secondaryApp.defaultWindowName,
@@ -92,8 +88,8 @@ class AppPairsTestUnpairPrimaryAndSecondaryApps(
}
}
}
return FlickerTestRunnerFactory(instrumentation,
repetitions = AppPairsHelper.TEST_REPETITIONS).buildTest(transition, testSpec)
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation, transition,
testSpec, repetitions = AppPairsHelper.TEST_REPETITIONS)
}
}
}

View File

@@ -22,7 +22,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
@@ -54,16 +53,13 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class RotateTwoLaunchedAppsInAppPairsMode(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object : RotateTwoLaunchedAppsTransition(
InstrumentationRegistry.getInstrumentation()) {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): Collection<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testSpec: FlickerBuilder.(Bundle) -> Unit = { configuration ->
withTestName {
buildTestTag("testRotateTwoLaunchedAppsInAppPairsMode", configuration)
@@ -96,10 +92,10 @@ class RotateTwoLaunchedAppsInAppPairsMode(
}
}
return FlickerTestRunnerFactory(instrumentation,
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
transition, testSpec,
repetitions = SplitScreenHelper.TEST_REPETITIONS,
supportedRotations = listOf(Surface.ROTATION_90, Surface.ROTATION_270)
).buildTest(transition, testSpec)
supportedRotations = listOf(Surface.ROTATION_90, Surface.ROTATION_270))
}
}
}

View File

@@ -22,7 +22,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
@@ -54,16 +53,13 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class RotateTwoLaunchedAppsRotateAndEnterAppPairsMode(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object : RotateTwoLaunchedAppsTransition(
InstrumentationRegistry.getInstrumentation()) {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): Collection<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testSpec: FlickerBuilder.(Bundle) -> Unit = { configuration ->
withTestName {
buildTestTag("testRotateAndEnterAppPairsMode", configuration)
@@ -96,10 +92,11 @@ class RotateTwoLaunchedAppsRotateAndEnterAppPairsMode(
}
}
return FlickerTestRunnerFactory(instrumentation,
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
transition, testSpec,
repetitions = SplitScreenHelper.TEST_REPETITIONS,
supportedRotations = listOf(Surface.ROTATION_90, Surface.ROTATION_270)
).buildTest(transition, testSpec)
)
}
}
}

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.endRotation
@@ -48,10 +47,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class ExitLegacySplitScreenFromBottomTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
@@ -59,9 +56,9 @@ class ExitLegacySplitScreenFromBottomTest(
val instrumentation = InstrumentationRegistry.getInstrumentation()
val splitScreenApp = SplitScreenHelper.getPrimary(instrumentation)
// TODO(b/162923992) Use of multiple segments of flicker spec for testing
return FlickerTestRunnerFactory(instrumentation,
listOf(Surface.ROTATION_0, Surface.ROTATION_90))
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0, Surface.ROTATION_90)) {
configuration ->
withTestName {
buildTestTag("exitSplitScreenFromBottom", configuration)
}
@@ -87,6 +84,11 @@ class ExitLegacySplitScreenFromBottomTest(
transitions {
device.exitSplitScreenFromBottom()
}
assertions {
windowManagerTrace {
all("isNotEmpty") { isNotEmpty() }
}
}
}
}
}

View File

@@ -21,7 +21,6 @@ import android.support.test.launcherhelper.LauncherStrategyFactory
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.endRotation
@@ -60,10 +59,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class LegacySplitScreenToLauncherTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
@@ -74,8 +71,8 @@ class LegacySplitScreenToLauncherTest(
val testApp = SimpleAppHelper(instrumentation)
// b/161435597 causes the test not to work on 90 degrees
return FlickerTestRunnerFactory(instrumentation, listOf(Surface.ROTATION_0))
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0)) { configuration ->
withTestName {
buildTestTag("splitScreenToLauncher", configuration)
}

View File

@@ -25,7 +25,6 @@ import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.uiautomator.By
import com.android.server.wm.flicker.DOCKED_STACK_DIVIDER
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.endRotation
@@ -69,10 +68,8 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 159096424)
class ResizeLegacySplitScreenTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
private const val sSimpleActivity = "SimpleActivity"
private const val sImeActivity = "ImeActivity"
@@ -86,9 +83,8 @@ class ResizeLegacySplitScreenTest(
val testAppTop = SimpleAppHelper(instrumentation)
val testAppBottom = ImeAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0))
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0)) { configuration ->
withTestName {
val description = (startRatio.toString().replace("/", "-") + "_to_" +
stopRatio.toString().replace("/", "-"))

View File

@@ -20,7 +20,6 @@ import android.view.Surface
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.helpers.buildTestTag
@@ -53,19 +52,16 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 152738416)
class EnterPipTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = PipAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0))
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0)) { configuration ->
withTestName { buildTestTag("enterPip", testApp, configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.endRotation
@@ -54,10 +53,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class PipRotationTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
@@ -65,9 +62,9 @@ class PipRotationTest(
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = FixedAppHelper(instrumentation)
val pipApp = PipAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation,
listOf(Surface.ROTATION_0, Surface.ROTATION_90))
.buildRotationTest { configuration ->
return FlickerTestRunnerFactory.getInstance().buildRotationTest(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0, Surface.ROTATION_90)) {
configuration ->
withTestName { buildTestTag("PipRotationTest", testApp, configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.view.Surface
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.focusChanges
@@ -54,18 +53,16 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 152738416)
class PipToAppTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = PipAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, listOf(Surface.ROTATION_0))
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0)) { configuration ->
withTestName { buildTestTag("exitPipModeToApp", testApp, configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.view.Surface
import androidx.test.filters.FlakyTest
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.focusChanges
@@ -53,18 +52,16 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 152738416)
class PipToHomeTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = PipAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, listOf(Surface.ROTATION_0))
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance().buildTest(instrumentation,
supportedRotations = listOf(Surface.ROTATION_0)) { configuration ->
withTestName { buildTestTag("exitPipModeToApp", testApp, configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.helpers.SimpleAppHelper
@@ -56,18 +55,16 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class CloseAppBackButtonTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = SimpleAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
withTestName { buildTestTag("closeAppBackButton", configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.helpers.SimpleAppHelper
@@ -55,18 +54,16 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class CloseAppHomeButtonTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = SimpleAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
withTestName { buildTestTag("closeAppHomeButton", configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -21,7 +21,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper
@@ -55,18 +54,16 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 178015460)
class CloseImeAutoOpenWindowToAppTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
val testApp = ImeAppAutoFocusHelper(instrumentation,
configuration.startRotation)
withTestName { buildTestTag("imeToAppAutoOpen", configuration) }

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper
@@ -53,18 +52,16 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class CloseImeAutoOpenWindowToHomeTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
val testApp = ImeAppAutoFocusHelper(instrumentation,
configuration.startRotation)
withTestName {
@@ -114,7 +111,8 @@ class CloseImeAutoOpenWindowToHomeTest(
enabled = !configuration.startRotation.isRotated())
statusBarLayerIsAlwaysVisible(
enabled = !configuration.startRotation.isRotated())
visibleLayersShownMoreThanOneConsecutiveEntry(listOf(IME_WINDOW_TITLE))
visibleLayersShownMoreThanOneConsecutiveEntry(listOf(IME_WINDOW_TITLE),
enabled = !configuration.startRotation.isRotated())
imeLayerBecomesInvisible()
imeAppLayerBecomesInvisible(testApp)

View File

@@ -21,7 +21,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.helpers.ImeAppHelper
@@ -54,10 +53,8 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 178015460)
class CloseImeWindowToAppTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@@ -65,8 +62,8 @@ class CloseImeWindowToAppTest(
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = ImeAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
withTestName { buildTestTag("imeToApp", configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -21,7 +21,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.helpers.ImeAppHelper
@@ -54,18 +53,16 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 178015460)
class CloseImeWindowToHomeTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = ImeAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
withTestName { buildTestTag("imeToHome", configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -21,7 +21,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.helpers.ImeAppHelper
@@ -57,18 +56,16 @@ import org.junit.runners.Parameterized
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@FlakyTest(bugId = 178015460)
class OpenImeWindowTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = ImeAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
withTestName { buildTestTag("openIme", configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.helpers.ImeAppAutoFocusHelper
@@ -58,18 +57,16 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class ReOpenImeWindowTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testAppComponentName = ActivityOptions.IME_ACTIVITY_AUTO_FOCUS_COMPONENT_NAME
return FlickerTestRunnerFactory(instrumentation, repetitions = 1)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 1) { configuration ->
val testApp = ImeAppAutoFocusHelper(instrumentation,
configuration.startRotation)
withTestName { buildTestTag("reOpenImeAutoFocus", configuration) }
@@ -90,7 +87,6 @@ class ReOpenImeWindowTest(
transitions {
device.reopenAppFromOverview()
wmHelper.waitImeWindowShown()
// wmHelper.waitForFullScreenApp(testAppComponentName)
}
teardown {
test {

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.endRotation
@@ -57,18 +56,16 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class OpenAppColdTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = SimpleAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation) { configuration ->
withTestName { buildTestTag("openAppCold", testApp, configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.endRotation
@@ -58,18 +57,16 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class OpenAppFromOverviewTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = SimpleAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation, repetitions = 5) { configuration ->
withTestName { buildTestTag("openAppFromOverview", configuration) }
repeat { configuration.repetitions }
setup {
@@ -118,7 +115,7 @@ class OpenAppFromOverviewTest(
navBarLayerIsAlwaysVisible(
enabled = Surface.ROTATION_0 == configuration.endRotation)
visibleLayersShownMoreThanOneConsecutiveEntry(
enabled = Surface.ROTATION_0 == configuration.endRotation)
enabled = false)
appLayerReplacesWallpaperLayer(testApp.`package`)
}

View File

@@ -20,7 +20,6 @@ import android.platform.test.annotations.Presubmit
import android.view.Surface
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.endRotation
@@ -56,19 +55,15 @@ import org.junit.runners.Parameterized
@RequiresDevice
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class OpenAppWarmTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
class OpenAppWarmTest(testSpec: FlickerTestRunnerFactory.TestSpec) : FlickerTestRunner(testSpec) {
companion object {
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): List<Array<Any>> {
val instrumentation = InstrumentationRegistry.getInstrumentation()
val testApp = SimpleAppHelper(instrumentation)
return FlickerTestRunnerFactory(instrumentation)
.buildTest { configuration ->
return FlickerTestRunnerFactory.getInstance()
.buildTest(instrumentation) { configuration ->
withTestName { buildTestTag("openAppWarm", testApp, configuration) }
repeat { configuration.repetitions }
setup {

View File

@@ -20,7 +20,6 @@ import android.os.Bundle
import android.platform.test.annotations.Presubmit
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.dsl.FlickerBuilder
@@ -54,10 +53,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class ChangeAppRotationTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object : RotationTransition(InstrumentationRegistry.getInstrumentation()) {
override val testApp: StandardAppHelper
get() = SimpleAppHelper(instrumentation)
@@ -66,7 +63,7 @@ class ChangeAppRotationTest(
private const val SCREENSHOT_LAYER = "RotationLayer"
@Parameterized.Parameters(name = "{0}")
@Parameterized.Parameters(name = "{0}1}")
@JvmStatic
fun getParams(): Collection<Array<Any>> {
val testSpec: FlickerBuilder.(Bundle) -> Unit = { configuration ->
@@ -119,8 +116,8 @@ class ChangeAppRotationTest(
}
}
return FlickerTestRunnerFactory(instrumentation, repetitions = 5)
.buildRotationTest(transition, testSpec)
return FlickerTestRunnerFactory.getInstance()
.buildRotationTest(instrumentation, transition, testSpec, repetitions = 5)
}
}
}

View File

@@ -20,7 +20,6 @@ import android.os.Bundle
import android.platform.test.annotations.Presubmit
import androidx.test.filters.RequiresDevice
import androidx.test.platform.app.InstrumentationRegistry
import com.android.server.wm.flicker.Flicker
import com.android.server.wm.flicker.FlickerTestRunner
import com.android.server.wm.flicker.FlickerTestRunnerFactory
import com.android.server.wm.flicker.endRotation
@@ -32,7 +31,6 @@ import com.android.server.wm.flicker.helpers.StandardAppHelper
import com.android.server.wm.flicker.layerAlwaysVisible
import com.android.server.wm.flicker.helpers.WindowUtils
import com.android.server.wm.flicker.helpers.buildTestTag
import com.android.server.wm.flicker.helpers.isRotated
import com.android.server.wm.flicker.navBarLayerIsAlwaysVisible
import com.android.server.wm.flicker.navBarLayerRotatesAndScales
import com.android.server.wm.flicker.navBarWindowIsAlwaysVisible
@@ -58,10 +56,8 @@ import org.junit.runners.Parameterized
@RunWith(Parameterized::class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
class SeamlessAppRotationTest(
testName: String,
flickerProvider: () -> Flicker,
cleanUp: Boolean
) : FlickerTestRunner(testName, flickerProvider, cleanUp) {
testSpec: FlickerTestRunnerFactory.TestSpec
) : FlickerTestRunner(testSpec) {
companion object : RotationTransition(InstrumentationRegistry.getInstrumentation()) {
override val testApp: StandardAppHelper
get() = SeamlessRotationAppHelper(instrumentation)
@@ -70,6 +66,8 @@ class SeamlessAppRotationTest(
ActivityOptions.EXTRA_STARVE_UI_THREAD to configuration.starveUiThread.toString()
)
private val testFactory = FlickerTestRunnerFactory.getInstance()
private val Bundle.starveUiThread
get() = this.getBoolean(ActivityOptions.EXTRA_STARVE_UI_THREAD, false)
@@ -80,8 +78,8 @@ class SeamlessAppRotationTest(
}
@JvmStatic
private fun FlickerTestRunnerFactory.getConfigurations(): List<Bundle> {
return this.getConfigRotationTests().flatMap {
private fun getConfigurations(): List<Bundle> {
return testFactory.getConfigRotationTests().flatMap {
val defaultRun = it.createConfig(starveUiThread = false)
val busyUiRun = it.createConfig(starveUiThread = true)
listOf(defaultRun, busyUiRun)
@@ -91,8 +89,7 @@ class SeamlessAppRotationTest(
@Parameterized.Parameters(name = "{0}")
@JvmStatic
fun getParams(): Collection<Array<Any>> {
val factory = FlickerTestRunnerFactory(instrumentation, repetitions = 2)
val configurations = factory.getConfigurations()
val configurations = getConfigurations()
val testSpec: FlickerBuilder.(Bundle) -> Unit = { configuration ->
withTestName {
val extra = if (configuration.starveUiThread) {
@@ -161,7 +158,8 @@ class SeamlessAppRotationTest(
}
}
return factory.buildRotationTest(transition, testSpec, configurations)
return testFactory.buildRotationTest(instrumentation, transition, testSpec,
deviceConfigurations = configurations, repetitions = 2)
}
}
}