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

Commit 6b29ea2c authored by Riddle Hsu's avatar Riddle Hsu Committed by Android (Google) Code Review
Browse files

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

parents 8b58515d 8c0a1a6e
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;