RefreshRatePolicy: set both min and max refresh rate when camera is used
If app is using Camera, we set both the min and max refresh rate to the camera's preferred refresh rate to make sure we don't end up with a refresh rate lower than the camera capture rate, which will lead to dropping camera frames. Bug: 206056272 Change-Id: I5b6c49242fb6b87d662d26a29b2f159c052d386c Test: android.hardware.cts.CameraGLTest
This commit is contained in:
@@ -164,7 +164,19 @@ class RefreshRatePolicy {
|
||||
return 0;
|
||||
}
|
||||
|
||||
return w.mAttrs.preferredMinDisplayRefreshRate;
|
||||
if (w.mAttrs.preferredMinDisplayRefreshRate > 0) {
|
||||
return w.mAttrs.preferredMinDisplayRefreshRate;
|
||||
}
|
||||
|
||||
String packageName = w.getOwningPackage();
|
||||
// If app is using Camera, we set both the min and max refresh rate to the camera's
|
||||
// preferred refresh rate to make sure we don't end up with a refresh rate lower
|
||||
// than the camera capture rate, which will lead to dropping camera frames.
|
||||
if (mNonHighRefreshRatePackages.contains(packageName)) {
|
||||
return mLowRefreshRateMode.getRefreshRate();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
float getPreferredMaxRefreshRate(WindowState w) {
|
||||
|
||||
@@ -104,7 +104,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
||||
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
mPolicy.removeNonHighRefreshRatePackage("com.android.test");
|
||||
@@ -165,7 +166,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
||||
assertEquals(HI_MODE_ID, mPolicy.getPreferredModeId(overrideWindow));
|
||||
assertEquals(HI_REFRESH_RATE,
|
||||
mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
}
|
||||
@@ -180,7 +182,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
||||
assertEquals(0, mPolicy.getPreferredModeId(overrideWindow));
|
||||
assertEquals(HI_REFRESH_RATE,
|
||||
mPolicy.getPreferredRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(0, mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMinRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMaxRefreshRate(overrideWindow), FLOAT_TOLERANCE);
|
||||
}
|
||||
@@ -257,7 +260,8 @@ public class RefreshRatePolicyTest extends WindowTestsBase {
|
||||
mPolicy.addNonHighRefreshRatePackage("com.android.test");
|
||||
assertEquals(0, mPolicy.getPreferredModeId(cameraUsingWindow));
|
||||
assertEquals(0, mPolicy.getPreferredRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(0, mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMinRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
assertEquals(LOW_REFRESH_RATE,
|
||||
mPolicy.getPreferredMaxRefreshRate(cameraUsingWindow), FLOAT_TOLERANCE);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user