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

Commit 487f234f authored by Riddle Hsu's avatar Riddle Hsu Committed by Automerger Merge Worker
Browse files

Merge "Reduce unnecessary context creation for display" into udc-qpr-dev am:...

Merge "Reduce unnecessary context creation for display" into udc-qpr-dev am: 6b29ea2c am: 5957356c

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23734150



Change-Id: I25b018ffc5b9d3e94eaca7fadd25b022f62ed795
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 8cf6f037 5957356c
Loading
Loading
Loading
Loading
+2 −4
Original line number Diff line number Diff line
@@ -1713,9 +1713,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    }

    private int getMinimalTaskSizeDp() {
        final Context displayConfigurationContext =
                mAtmService.mContext.createConfigurationContext(getConfiguration());
        final Resources res = displayConfigurationContext.getResources();
        final Resources res = getDisplayUiContext().getResources();
        final TypedValue value = new TypedValue();
        res.getValue(R.dimen.default_minimal_size_resizable_task, value, true /* resolveRefs */);
        final int valueUnit = ((value.data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK);
@@ -2716,6 +2714,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
        if (mDisplayPolicy != null) {
            mDisplayPolicy.onConfigurationChanged();
            mPinnedTaskController.onPostDisplayConfigurationChanged();
            mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp();
        }
        // Update IME parent if needed.
        updateImeParent();
@@ -2857,7 +2856,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp

    void onDisplayInfoChanged() {
        updateDisplayFrames(false /* notifyInsetsChange */);
        mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp();
        mInputMonitor.layoutInputConsumers(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight);
        mDisplayPolicy.onDisplayInfoChanged(mDisplayInfo);
    }
+4 −24
Original line number Diff line number Diff line
@@ -797,6 +797,7 @@ public class DisplayContentTests extends WindowTestsBase {
        final int baseDensity = 320;
        final float baseXDpi = 60;
        final float baseYDpi = 60;
        final int originalMinTaskSizeDp = displayContent.mMinSizeOfResizeableTaskDp;

        displayContent.mInitialDisplayWidth = baseWidth;
        displayContent.mInitialDisplayHeight = baseHeight;
@@ -814,6 +815,9 @@ public class DisplayContentTests extends WindowTestsBase {
        displayContent.setForcedDensity(forcedDensity, 0 /* userId */);
        verifySizes(displayContent, baseWidth, baseHeight, forcedDensity);

        // Verify that minimal task size (dp) doesn't change with density of display.
        assertEquals(originalMinTaskSizeDp, displayContent.mMinSizeOfResizeableTaskDp);

        // Verify that forcing resolution won't affect the already forced density.
        displayContent.setForcedSize(1800, 1200);
        verifySizes(displayContent, 1800, 1200, forcedDensity);
@@ -1811,30 +1815,6 @@ public class DisplayContentTests extends WindowTestsBase {
        assertFalse(mDisplayContent.hasTopFixedRotationLaunchingApp());
    }

    /**
     * Creates different types of displays, verifies that minimal task size doesn't change
     * with density of display.
     */
    @Test
    public void testCalculatesDisplaySpecificMinTaskSizes() {
        DisplayContent defaultTestDisplay =
                new TestDisplayContent.Builder(mAtm, 1000, 2000).build();
        final int defaultMinTaskSize = defaultTestDisplay.mMinSizeOfResizeableTaskDp;
        DisplayContent firstDisplay = new TestDisplayContent.Builder(mAtm, 1000, 2000)
                .setDensityDpi(300)
                .updateDisplayMetrics()
                .setDefaultMinTaskSizeDp(defaultMinTaskSize + 10)
                .build();
        assertEquals(defaultMinTaskSize + 10, firstDisplay.mMinSizeOfResizeableTaskDp);

        DisplayContent secondDisplay = new TestDisplayContent.Builder(mAtm, 200, 200)
                .setDensityDpi(320)
                .updateDisplayMetrics()
                .setDefaultMinTaskSizeDp(defaultMinTaskSize + 20)
                .build();
        assertEquals(defaultMinTaskSize + 20, secondDisplay.mMinSizeOfResizeableTaskDp);
    }

    @Test
    public void testRecentsNotRotatingWithFixedRotation() {
        unblockDisplayRotation(mDisplayContent);
+1 −44
Original line number Diff line number Diff line
@@ -30,30 +30,18 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;

import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doAnswer;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Insets;
import android.graphics.Rect;
import android.hardware.display.DisplayManagerGlobal;
import android.util.DisplayMetrics;
import android.util.TypedValue;
import android.view.Display;
import android.view.DisplayCutout;
import android.view.DisplayInfo;

import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry;

import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

class TestDisplayContent extends DisplayContent {

    public static final int DEFAULT_LOGICAL_DISPLAY_DENSITY = 300;
@@ -105,13 +93,8 @@ class TestDisplayContent extends DisplayContent {
        private boolean mSystemDecorations = false;
        private int mStatusBarHeight = 0;
        private SettingsEntry mOverrideSettings;
        private DisplayMetrics mDisplayMetrics;
        @NonNull
        private DeviceStateController mDeviceStateController = mock(DeviceStateController.class);
        @Mock
        Context mMockContext;
        @Mock
        Resources mResources;

        Builder(ActivityTaskManagerService service, int width, int height) {
            mService = service;
@@ -124,8 +107,6 @@ class TestDisplayContent extends DisplayContent {
            // Set unique ID so physical display overrides are not inheritted from
            // DisplayWindowSettings.
            mInfo.uniqueId = generateUniqueId();
            mDisplayMetrics = new DisplayMetrics();
            updateDisplayMetrics();
        }
        Builder(ActivityTaskManagerService service, DisplayInfo info) {
            mService = service;
@@ -195,31 +176,7 @@ class TestDisplayContent extends DisplayContent {
            mInfo.logicalDensityDpi = dpi;
            return this;
        }
        Builder updateDisplayMetrics() {
            mInfo.getAppMetrics(mDisplayMetrics);
            return this;
        }
        Builder setDefaultMinTaskSizeDp(int valueDp) {
            MockitoAnnotations.initMocks(this);
            doReturn(mMockContext).when(mService.mContext).createConfigurationContext(any());
            doReturn(mResources).when(mMockContext).getResources();
            doAnswer(
                    new Answer() {
                        @Override
                        public Object answer(InvocationOnMock i) {
                            Object[] args = i.getArguments();
                            TypedValue v = (TypedValue) args[1];
                            v.type = TypedValue.TYPE_DIMENSION;
                            v.data = TypedValue.createComplexDimension(valueDp,
                                    TypedValue.COMPLEX_UNIT_DIP);
                            return null;
                        }
                    }
            ).when(mResources).getValue(
                    eq(com.android.internal.R.dimen.default_minimal_size_resizable_task),
                    any(TypedValue.class), eq(true));
            return this;
        }

        Builder setDeviceStateController(@NonNull DeviceStateController deviceStateController) {
            mDeviceStateController = deviceStateController;
            return this;