Merge "Reduce unnecessary context creation for display" into udc-qpr-dev
This commit is contained in:
@@ -1713,9 +1713,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
}
|
}
|
||||||
|
|
||||||
private int getMinimalTaskSizeDp() {
|
private int getMinimalTaskSizeDp() {
|
||||||
final Context displayConfigurationContext =
|
final Resources res = getDisplayUiContext().getResources();
|
||||||
mAtmService.mContext.createConfigurationContext(getConfiguration());
|
|
||||||
final Resources res = displayConfigurationContext.getResources();
|
|
||||||
final TypedValue value = new TypedValue();
|
final TypedValue value = new TypedValue();
|
||||||
res.getValue(R.dimen.default_minimal_size_resizable_task, value, true /* resolveRefs */);
|
res.getValue(R.dimen.default_minimal_size_resizable_task, value, true /* resolveRefs */);
|
||||||
final int valueUnit = ((value.data >> COMPLEX_UNIT_SHIFT) & COMPLEX_UNIT_MASK);
|
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) {
|
if (mDisplayPolicy != null) {
|
||||||
mDisplayPolicy.onConfigurationChanged();
|
mDisplayPolicy.onConfigurationChanged();
|
||||||
mPinnedTaskController.onPostDisplayConfigurationChanged();
|
mPinnedTaskController.onPostDisplayConfigurationChanged();
|
||||||
|
mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp();
|
||||||
}
|
}
|
||||||
// Update IME parent if needed.
|
// Update IME parent if needed.
|
||||||
updateImeParent();
|
updateImeParent();
|
||||||
@@ -2857,7 +2856,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
|||||||
|
|
||||||
void onDisplayInfoChanged() {
|
void onDisplayInfoChanged() {
|
||||||
updateDisplayFrames(false /* notifyInsetsChange */);
|
updateDisplayFrames(false /* notifyInsetsChange */);
|
||||||
mMinSizeOfResizeableTaskDp = getMinimalTaskSizeDp();
|
|
||||||
mInputMonitor.layoutInputConsumers(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight);
|
mInputMonitor.layoutInputConsumers(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight);
|
||||||
mDisplayPolicy.onDisplayInfoChanged(mDisplayInfo);
|
mDisplayPolicy.onDisplayInfoChanged(mDisplayInfo);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -797,6 +797,7 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
final int baseDensity = 320;
|
final int baseDensity = 320;
|
||||||
final float baseXDpi = 60;
|
final float baseXDpi = 60;
|
||||||
final float baseYDpi = 60;
|
final float baseYDpi = 60;
|
||||||
|
final int originalMinTaskSizeDp = displayContent.mMinSizeOfResizeableTaskDp;
|
||||||
|
|
||||||
displayContent.mInitialDisplayWidth = baseWidth;
|
displayContent.mInitialDisplayWidth = baseWidth;
|
||||||
displayContent.mInitialDisplayHeight = baseHeight;
|
displayContent.mInitialDisplayHeight = baseHeight;
|
||||||
@@ -814,6 +815,9 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
displayContent.setForcedDensity(forcedDensity, 0 /* userId */);
|
displayContent.setForcedDensity(forcedDensity, 0 /* userId */);
|
||||||
verifySizes(displayContent, baseWidth, baseHeight, forcedDensity);
|
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.
|
// Verify that forcing resolution won't affect the already forced density.
|
||||||
displayContent.setForcedSize(1800, 1200);
|
displayContent.setForcedSize(1800, 1200);
|
||||||
verifySizes(displayContent, 1800, 1200, forcedDensity);
|
verifySizes(displayContent, 1800, 1200, forcedDensity);
|
||||||
@@ -1811,30 +1815,6 @@ public class DisplayContentTests extends WindowTestsBase {
|
|||||||
assertFalse(mDisplayContent.hasTopFixedRotationLaunchingApp());
|
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
|
@Test
|
||||||
public void testRecentsNotRotatingWithFixedRotation() {
|
public void testRecentsNotRotatingWithFixedRotation() {
|
||||||
unblockDisplayRotation(mDisplayContent);
|
unblockDisplayRotation(mDisplayContent);
|
||||||
|
|||||||
@@ -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.mock;
|
||||||
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
|
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.NonNull;
|
||||||
import android.annotation.Nullable;
|
import android.annotation.Nullable;
|
||||||
import android.content.Context;
|
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
|
||||||
import android.graphics.Insets;
|
import android.graphics.Insets;
|
||||||
import android.graphics.Rect;
|
import android.graphics.Rect;
|
||||||
import android.hardware.display.DisplayManagerGlobal;
|
import android.hardware.display.DisplayManagerGlobal;
|
||||||
import android.util.DisplayMetrics;
|
|
||||||
import android.util.TypedValue;
|
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
import android.view.DisplayCutout;
|
import android.view.DisplayCutout;
|
||||||
import android.view.DisplayInfo;
|
import android.view.DisplayInfo;
|
||||||
|
|
||||||
import com.android.server.wm.DisplayWindowSettings.SettingsProvider.SettingsEntry;
|
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 {
|
class TestDisplayContent extends DisplayContent {
|
||||||
|
|
||||||
public static final int DEFAULT_LOGICAL_DISPLAY_DENSITY = 300;
|
public static final int DEFAULT_LOGICAL_DISPLAY_DENSITY = 300;
|
||||||
@@ -105,13 +93,8 @@ class TestDisplayContent extends DisplayContent {
|
|||||||
private boolean mSystemDecorations = false;
|
private boolean mSystemDecorations = false;
|
||||||
private int mStatusBarHeight = 0;
|
private int mStatusBarHeight = 0;
|
||||||
private SettingsEntry mOverrideSettings;
|
private SettingsEntry mOverrideSettings;
|
||||||
private DisplayMetrics mDisplayMetrics;
|
|
||||||
@NonNull
|
@NonNull
|
||||||
private DeviceStateController mDeviceStateController = mock(DeviceStateController.class);
|
private DeviceStateController mDeviceStateController = mock(DeviceStateController.class);
|
||||||
@Mock
|
|
||||||
Context mMockContext;
|
|
||||||
@Mock
|
|
||||||
Resources mResources;
|
|
||||||
|
|
||||||
Builder(ActivityTaskManagerService service, int width, int height) {
|
Builder(ActivityTaskManagerService service, int width, int height) {
|
||||||
mService = service;
|
mService = service;
|
||||||
@@ -124,8 +107,6 @@ class TestDisplayContent extends DisplayContent {
|
|||||||
// Set unique ID so physical display overrides are not inheritted from
|
// Set unique ID so physical display overrides are not inheritted from
|
||||||
// DisplayWindowSettings.
|
// DisplayWindowSettings.
|
||||||
mInfo.uniqueId = generateUniqueId();
|
mInfo.uniqueId = generateUniqueId();
|
||||||
mDisplayMetrics = new DisplayMetrics();
|
|
||||||
updateDisplayMetrics();
|
|
||||||
}
|
}
|
||||||
Builder(ActivityTaskManagerService service, DisplayInfo info) {
|
Builder(ActivityTaskManagerService service, DisplayInfo info) {
|
||||||
mService = service;
|
mService = service;
|
||||||
@@ -195,31 +176,7 @@ class TestDisplayContent extends DisplayContent {
|
|||||||
mInfo.logicalDensityDpi = dpi;
|
mInfo.logicalDensityDpi = dpi;
|
||||||
return this;
|
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) {
|
Builder setDeviceStateController(@NonNull DeviceStateController deviceStateController) {
|
||||||
mDeviceStateController = deviceStateController;
|
mDeviceStateController = deviceStateController;
|
||||||
return this;
|
return this;
|
||||||
|
|||||||
Reference in New Issue
Block a user