Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9b773c7a authored by Riddle Hsu's avatar Riddle Hsu
Browse files

Attempt to reduce flakiness of ActivityThreadTest

Make sure:
 - The test activity can be resumed. Such as any unexpected event
   unrelated to the test causes the device to sleep.
 - Test virtual displays are closed after test.

Bug: 169550676
Test: ActivityThreadTest
Change-Id: Icf6571deba11b58cbf309989c9525f245f4ea0b6
parent 0a135546
Loading
Loading
Loading
Loading
+36 −6
Original line number Diff line number Diff line
@@ -51,6 +51,8 @@ import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
import android.hardware.display.DisplayManager;
import android.hardware.display.VirtualDisplay;
import android.os.Bundle;
import android.os.IBinder;
import android.platform.test.annotations.Presubmit;
import android.util.DisplayMetrics;
@@ -66,6 +68,7 @@ import androidx.test.runner.AndroidJUnit4;

import com.android.internal.content.ReferrerIntent;

import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;

@@ -95,6 +98,16 @@ public class ActivityThreadTest {
            new ActivityTestRule<>(TestActivity.class, true /* initialTouchMode */,
                    false /* launchActivity */);

    private ArrayList<VirtualDisplay> mCreatedVirtualDisplays;

    @After
    public void tearDown() {
        if (mCreatedVirtualDisplays != null) {
            mCreatedVirtualDisplays.forEach(VirtualDisplay::release);
            mCreatedVirtualDisplays = null;
        }
    }

    @Test
    public void testDoubleRelaunch() throws Exception {
        final Activity activity = mActivityTestRule.launchActivity(new Intent());
@@ -410,7 +423,6 @@ public class ActivityThreadTest {
            Context appContext = activity.getApplication();
            Configuration originalAppConfig =
                    new Configuration(appContext.getResources().getConfiguration());
            DisplayManager dm = appContext.getSystemService(DisplayManager.class);

            int virtualDisplayWidth;
            int virtualDisplayHeight;
@@ -421,8 +433,8 @@ public class ActivityThreadTest {
                virtualDisplayWidth = 200;
                virtualDisplayHeight = 100;
            }
            Display virtualDisplay = dm.createVirtualDisplay("virtual-display",
                    virtualDisplayWidth, virtualDisplayHeight, 200, null, 0).getDisplay();
            final Display virtualDisplay = createVirtualDisplay(appContext,
                    virtualDisplayWidth, virtualDisplayHeight);
            Context virtualDisplayContext = appContext.createDisplayContext(virtualDisplay);
            int originalVirtualDisplayOrientation = virtualDisplayContext.getResources()
                    .getConfiguration().orientation;
@@ -467,7 +479,6 @@ public class ActivityThreadTest {
        InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> {
            Configuration originalActivityConfig =
                    new Configuration(activity.getResources().getConfiguration());
            DisplayManager dm = activity.getSystemService(DisplayManager.class);

            int virtualDisplayWidth;
            int virtualDisplayHeight;
@@ -478,8 +489,8 @@ public class ActivityThreadTest {
                virtualDisplayWidth = 200;
                virtualDisplayHeight = 100;
            }
            Display virtualDisplay = dm.createVirtualDisplay("virtual-display",
                    virtualDisplayWidth, virtualDisplayHeight, 200, null, 0).getDisplay();
            final Display virtualDisplay = createVirtualDisplay(activity,
                    virtualDisplayWidth, virtualDisplayHeight);
            Context virtualDisplayContext = activity.createDisplayContext(virtualDisplay);
            int originalVirtualDisplayOrientation = virtualDisplayContext.getResources()
                    .getConfiguration().orientation;
@@ -704,6 +715,17 @@ public class ActivityThreadTest {
        return config.seq;
    }

    private Display createVirtualDisplay(Context context, int w, int h) {
        final DisplayManager dm = context.getSystemService(DisplayManager.class);
        final VirtualDisplay virtualDisplay = dm.createVirtualDisplay("virtual-display", w, h,
                200 /* densityDpi */, null /* surface */, 0 /* flags */);
        if (mCreatedVirtualDisplays == null) {
            mCreatedVirtualDisplays = new ArrayList<>();
        }
        mCreatedVirtualDisplays.add(virtualDisplay);
        return virtualDisplay.getDisplay();
    }

    private static ActivityClientRecord getActivityClientRecord(Activity activity) {
        final ActivityThread thread = activity.getActivityThread();
        final IBinder token = activity.getActivityToken();
@@ -795,6 +817,14 @@ public class ActivityThreadTest {
         */
        volatile CountDownLatch mConfigLatch;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            getWindow().getDecorView().setKeepScreenOn(true);
            setShowWhenLocked(true);
            setTurnScreenOn(true);
        }

        @Override
        public void onConfigurationChanged(Configuration config) {
            super.onConfigurationChanged(config);