Merge "Revert "Fix flicker when swiching resolution change"" into tm-qpr-dev

This commit is contained in:
Shawn Lin
2022-09-30 15:00:03 +00:00
committed by Android (Google) Code Review
4 changed files with 104 additions and 15 deletions

View File

@@ -455,6 +455,7 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
} }
} }
boolean needToUpdateProviderViews = false;
final String newUniqueId = mDisplayInfo.uniqueId; final String newUniqueId = mDisplayInfo.uniqueId;
if (!Objects.equals(newUniqueId, mDisplayUniqueId)) { if (!Objects.equals(newUniqueId, mDisplayUniqueId)) {
mDisplayUniqueId = newUniqueId; mDisplayUniqueId = newUniqueId;
@@ -472,6 +473,37 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
setupDecorations(); setupDecorations();
return; return;
} }
if (mScreenDecorHwcLayer != null) {
updateHwLayerRoundedCornerDrawable();
updateHwLayerRoundedCornerExistAndSize();
}
needToUpdateProviderViews = true;
}
final float newRatio = getPhysicalPixelDisplaySizeRatio();
if (mRoundedCornerResDelegate.getPhysicalPixelDisplaySizeRatio() != newRatio) {
mRoundedCornerResDelegate.setPhysicalPixelDisplaySizeRatio(newRatio);
if (mScreenDecorHwcLayer != null) {
updateHwLayerRoundedCornerExistAndSize();
}
needToUpdateProviderViews = true;
}
if (needToUpdateProviderViews) {
updateOverlayProviderViews(null);
} else {
updateOverlayProviderViews(new Integer[] {
mFaceScanningViewId,
R.id.display_cutout,
R.id.display_cutout_left,
R.id.display_cutout_right,
R.id.display_cutout_bottom,
});
}
if (mScreenDecorHwcLayer != null) {
mScreenDecorHwcLayer.onDisplayChanged(newUniqueId);
} }
} }
}; };
@@ -1037,8 +1069,6 @@ public class ScreenDecorations extends CoreStartable implements Tunable , Dumpab
&& (newRotation != mRotation || displayModeChanged(mDisplayMode, newMod))) { && (newRotation != mRotation || displayModeChanged(mDisplayMode, newMod))) {
mRotation = newRotation; mRotation = newRotation;
mDisplayMode = newMod; mDisplayMode = newMod;
mRoundedCornerResDelegate.setPhysicalPixelDisplaySizeRatio(
getPhysicalPixelDisplaySizeRatio());
if (mScreenDecorHwcLayer != null) { if (mScreenDecorHwcLayer != null) {
mScreenDecorHwcLayer.pendingConfigChange = false; mScreenDecorHwcLayer.pendingConfigChange = false;
mScreenDecorHwcLayer.updateRotation(mRotation); mScreenDecorHwcLayer.updateRotation(mRotation);

View File

@@ -78,18 +78,23 @@ class RoundedCornerResDelegate(
reloadMeasures() reloadMeasures()
} }
private fun reloadAll(newReloadToken: Int) {
if (reloadToken == newReloadToken) {
return
}
reloadToken = newReloadToken
reloadRes()
reloadMeasures()
}
fun updateDisplayUniqueId(newDisplayUniqueId: String?, newReloadToken: Int?) { fun updateDisplayUniqueId(newDisplayUniqueId: String?, newReloadToken: Int?) {
if (displayUniqueId != newDisplayUniqueId) { if (displayUniqueId != newDisplayUniqueId) {
displayUniqueId = newDisplayUniqueId displayUniqueId = newDisplayUniqueId
newReloadToken ?.let { reloadToken = it } newReloadToken ?.let { reloadToken = it }
reloadRes() reloadRes()
reloadMeasures() reloadMeasures()
} else if (newReloadToken != null) { } else {
if (reloadToken == newReloadToken) { newReloadToken?.let { reloadAll(it) }
return
}
reloadToken = newReloadToken
reloadMeasures()
} }
} }

View File

@@ -1005,13 +1005,18 @@ public class ScreenDecorationsTest extends SysuiTestCase {
assertEquals(new Size(3, 3), resDelegate.getTopRoundedSize()); assertEquals(new Size(3, 3), resDelegate.getTopRoundedSize());
assertEquals(new Size(4, 4), resDelegate.getBottomRoundedSize()); assertEquals(new Size(4, 4), resDelegate.getBottomRoundedSize());
doReturn(2f).when(mScreenDecorations).getPhysicalPixelDisplaySizeRatio(); setupResources(20 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
getTestsDrawable(com.android.systemui.tests.R.drawable.rounded4px)
/* roundedTopDrawable */,
getTestsDrawable(com.android.systemui.tests.R.drawable.rounded5px)
/* roundedBottomDrawable */,
0 /* roundedPadding */, true /* privacyDot */, false /* faceScanning*/);
mDisplayInfo.rotation = Surface.ROTATION_270; mDisplayInfo.rotation = Surface.ROTATION_270;
mScreenDecorations.onConfigurationChanged(null); mScreenDecorations.onConfigurationChanged(null);
assertEquals(new Size(6, 6), resDelegate.getTopRoundedSize()); assertEquals(new Size(4, 4), resDelegate.getTopRoundedSize());
assertEquals(new Size(8, 8), resDelegate.getBottomRoundedSize()); assertEquals(new Size(5, 5), resDelegate.getBottomRoundedSize());
} }
@Test @Test
@@ -1287,6 +1292,51 @@ public class ScreenDecorationsTest extends SysuiTestCase {
verifyFaceScanningViewExists(true); verifyFaceScanningViewExists(true);
} }
@Test
public void testOnDisplayChanged_hwcLayer() {
setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
null /* roundedTopDrawable */, null /* roundedBottomDrawable */,
0 /* roundedPadding */, false /* privacyDot */, false /* faceScanning */);
final DisplayDecorationSupport decorationSupport = new DisplayDecorationSupport();
decorationSupport.format = PixelFormat.R_8;
doReturn(decorationSupport).when(mDisplay).getDisplayDecorationSupport();
// top cutout
mMockCutoutList.add(new CutoutDecorProviderImpl(BOUNDS_POSITION_TOP));
mScreenDecorations.start();
final ScreenDecorHwcLayer hwcLayer = mScreenDecorations.mScreenDecorHwcLayer;
spyOn(hwcLayer);
doReturn(mDisplay).when(hwcLayer).getDisplay();
mScreenDecorations.mDisplayListener.onDisplayChanged(1);
verify(hwcLayer, times(1)).onDisplayChanged(any());
}
@Test
public void testOnDisplayChanged_nonHwcLayer() {
setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,
null /* roundedTopDrawable */, null /* roundedBottomDrawable */,
0 /* roundedPadding */, false /* privacyDot */, false /* faceScanning */);
// top cutout
mMockCutoutList.add(new CutoutDecorProviderImpl(BOUNDS_POSITION_TOP));
mScreenDecorations.start();
final ScreenDecorations.DisplayCutoutView cutoutView = (ScreenDecorations.DisplayCutoutView)
mScreenDecorations.getOverlayView(R.id.display_cutout);
assertNotNull(cutoutView);
spyOn(cutoutView);
doReturn(mDisplay).when(cutoutView).getDisplay();
mScreenDecorations.mDisplayListener.onDisplayChanged(1);
verify(cutoutView, times(1)).onDisplayChanged(any());
}
@Test @Test
public void testHasSameProvidersWithNullOverlays() { public void testHasSameProvidersWithNullOverlays() {
setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */, setupResources(0 /* radius */, 0 /* radiusTop */, 0 /* radiusBottom */,

View File

@@ -24,11 +24,12 @@ import androidx.annotation.DrawableRes
import androidx.test.filters.SmallTest import androidx.test.filters.SmallTest
import com.android.internal.R as InternalR import com.android.internal.R as InternalR
import com.android.systemui.R as SystemUIR import com.android.systemui.R as SystemUIR
import com.android.systemui.SysuiTestCase
import com.android.systemui.tests.R import com.android.systemui.tests.R
import com.android.systemui.SysuiTestCase
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.junit.runner.RunWith import org.junit.runner.RunWith
import org.mockito.Mock import org.mockito.Mock
import org.mockito.MockitoAnnotations import org.mockito.MockitoAnnotations
@@ -101,11 +102,14 @@ class RoundedCornerResDelegateTest : SysuiTestCase() {
assertEquals(Size(3, 3), roundedCornerResDelegate.topRoundedSize) assertEquals(Size(3, 3), roundedCornerResDelegate.topRoundedSize)
assertEquals(Size(4, 4), roundedCornerResDelegate.bottomRoundedSize) assertEquals(Size(4, 4), roundedCornerResDelegate.bottomRoundedSize)
roundedCornerResDelegate.physicalPixelDisplaySizeRatio = 2f setupResources(radius = 100,
roundedTopDrawable = getTestsDrawable(R.drawable.rounded4px),
roundedBottomDrawable = getTestsDrawable(R.drawable.rounded5px))
roundedCornerResDelegate.updateDisplayUniqueId(null, 1) roundedCornerResDelegate.updateDisplayUniqueId(null, 1)
assertEquals(Size(6, 6), roundedCornerResDelegate.topRoundedSize) assertEquals(Size(4, 4), roundedCornerResDelegate.topRoundedSize)
assertEquals(Size(8, 8), roundedCornerResDelegate.bottomRoundedSize) assertEquals(Size(5, 5), roundedCornerResDelegate.bottomRoundedSize)
} }
@Test @Test