Loading packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ScreenshotTestRule.kt +19 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.UiModeManager import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import android.os.Build import android.os.UserHandle import android.view.Display import android.view.View Loading @@ -32,6 +33,7 @@ import platform.test.screenshot.GoldenImagePathManager import platform.test.screenshot.PathConfig import platform.test.screenshot.PathElementNoContext import platform.test.screenshot.ScreenshotTestRule import platform.test.screenshot.matchers.MSSIMMatcher import platform.test.screenshot.matchers.PixelPerfectMatcher /** Loading @@ -55,7 +57,11 @@ class ScreenshotTestRule(private val testSpec: ScreenshotTestSpec) : TestRule { currentDisplay?.name ?: error("currentDisplay is null") }, ) private val defaultMatcher = PixelPerfectMatcher() private val matcher = if (shouldUsePerfectMatching()) { PixelPerfectMatcher() } else { MSSIMMatcher() } private val screenshotRule = ScreenshotTestRule( Loading @@ -67,6 +73,17 @@ class ScreenshotTestRule(private val testSpec: ScreenshotTestSpec) : TestRule { ) ) private fun shouldUsePerfectMatching(): Boolean { // Different CPU architectures can sometimes end up rendering differently, so we can't do // pixel-perfect matching on different architectures using the same golden. Given that our // presubmits are run on cf_x86_64_phone, our goldens should be perfectly matched on the // x86_64 architecture and use the Structural Similarity Index on others. // TODO(b/237511747): Run our screenshot presubmit tests on arm64 instead so that we can // do pixel perfect matching both at presubmit time and at development time with actual // devices. return Build.CPU_ABI == "x86_64" } override fun apply(base: Statement, description: Description): Statement { // The statement which call beforeTest() before running the test and afterTest() afterwards. val statement = Loading Loading @@ -147,7 +164,7 @@ class ScreenshotTestRule(private val testSpec: ScreenshotTestSpec) : TestRule { // device to assertBitmapAgainstGolden instead? currentDisplay = testSpec.display currentGoldenIdentifier = goldenIdentifier screenshotRule.assertBitmapAgainstGolden(bitmap, identifierWithSpec, defaultMatcher) screenshotRule.assertBitmapAgainstGolden(bitmap, identifierWithSpec, matcher) currentDisplay = null currentGoldenIdentifier = goldenIdentifier } Loading packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewScreenshotTestRule.kt +13 −3 Original line number Diff line number Diff line Loading @@ -60,11 +60,17 @@ class ViewScreenshotTestRule(testSpec: ScreenshotTestSpec) : TestRule { ) { var dialog: Dialog? = null activityRule.scenario.onActivity { activity -> // Make sure that the dialog draws full screen and fits the whole display instead of the // system bars. dialog = dialogProvider(activity).apply { // Make sure that the dialog draws full screen and fits the whole display // instead of the system bars. window.setDecorFitsSystemWindows(false) // Disable enter/exit animations. create() window.setWindowAnimations(0) // Show the dialog. show() } } Loading @@ -74,7 +80,11 @@ class ViewScreenshotTestRule(testSpec: ScreenshotTestSpec) : TestRule { activityRule.scenario.onActivity { // Check that the content is what we expected. val dialog = dialog ?: error("dialog is null") try { screenshotRule.screenshotTest(goldenIdentifier, dialog.window.decorView) } finally { dialog.dismiss() } } } } Loading
packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ScreenshotTestRule.kt +19 −2 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.UiModeManager import android.content.Context import android.graphics.Bitmap import android.graphics.Canvas import android.os.Build import android.os.UserHandle import android.view.Display import android.view.View Loading @@ -32,6 +33,7 @@ import platform.test.screenshot.GoldenImagePathManager import platform.test.screenshot.PathConfig import platform.test.screenshot.PathElementNoContext import platform.test.screenshot.ScreenshotTestRule import platform.test.screenshot.matchers.MSSIMMatcher import platform.test.screenshot.matchers.PixelPerfectMatcher /** Loading @@ -55,7 +57,11 @@ class ScreenshotTestRule(private val testSpec: ScreenshotTestSpec) : TestRule { currentDisplay?.name ?: error("currentDisplay is null") }, ) private val defaultMatcher = PixelPerfectMatcher() private val matcher = if (shouldUsePerfectMatching()) { PixelPerfectMatcher() } else { MSSIMMatcher() } private val screenshotRule = ScreenshotTestRule( Loading @@ -67,6 +73,17 @@ class ScreenshotTestRule(private val testSpec: ScreenshotTestSpec) : TestRule { ) ) private fun shouldUsePerfectMatching(): Boolean { // Different CPU architectures can sometimes end up rendering differently, so we can't do // pixel-perfect matching on different architectures using the same golden. Given that our // presubmits are run on cf_x86_64_phone, our goldens should be perfectly matched on the // x86_64 architecture and use the Structural Similarity Index on others. // TODO(b/237511747): Run our screenshot presubmit tests on arm64 instead so that we can // do pixel perfect matching both at presubmit time and at development time with actual // devices. return Build.CPU_ABI == "x86_64" } override fun apply(base: Statement, description: Description): Statement { // The statement which call beforeTest() before running the test and afterTest() afterwards. val statement = Loading Loading @@ -147,7 +164,7 @@ class ScreenshotTestRule(private val testSpec: ScreenshotTestSpec) : TestRule { // device to assertBitmapAgainstGolden instead? currentDisplay = testSpec.display currentGoldenIdentifier = goldenIdentifier screenshotRule.assertBitmapAgainstGolden(bitmap, identifierWithSpec, defaultMatcher) screenshotRule.assertBitmapAgainstGolden(bitmap, identifierWithSpec, matcher) currentDisplay = null currentGoldenIdentifier = goldenIdentifier } Loading
packages/SystemUI/screenshot/src/com/android/systemui/testing/screenshot/ViewScreenshotTestRule.kt +13 −3 Original line number Diff line number Diff line Loading @@ -60,11 +60,17 @@ class ViewScreenshotTestRule(testSpec: ScreenshotTestSpec) : TestRule { ) { var dialog: Dialog? = null activityRule.scenario.onActivity { activity -> // Make sure that the dialog draws full screen and fits the whole display instead of the // system bars. dialog = dialogProvider(activity).apply { // Make sure that the dialog draws full screen and fits the whole display // instead of the system bars. window.setDecorFitsSystemWindows(false) // Disable enter/exit animations. create() window.setWindowAnimations(0) // Show the dialog. show() } } Loading @@ -74,7 +80,11 @@ class ViewScreenshotTestRule(testSpec: ScreenshotTestSpec) : TestRule { activityRule.scenario.onActivity { // Check that the content is what we expected. val dialog = dialog ?: error("dialog is null") try { screenshotRule.screenshotTest(goldenIdentifier, dialog.window.decorView) } finally { dialog.dismiss() } } } }