summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/FrameRateCategoryRate.java113
-rw-r--r--core/java/android/view/SurfaceControl.java8
-rw-r--r--services/core/java/com/android/server/display/LocalDisplayAdapter.java13
-rw-r--r--services/core/java/com/android/server/display/LogicalDisplay.java1
4 files changed, 133 insertions, 2 deletions
diff --git a/core/java/android/view/FrameRateCategoryRate.java b/core/java/android/view/FrameRateCategoryRate.java
new file mode 100644
index 000000000000..3c674b8966d1
--- /dev/null
+++ b/core/java/android/view/FrameRateCategoryRate.java
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.view;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+/**
+ * A class to create and manage FrameRateCategoryRate for
+ * categories Normal and High.
+ * @hide
+ */
+public class FrameRateCategoryRate implements Parcelable {
+
+ private final float mNormal;
+ private final float mHigh;
+
+ /**
+ * Creates a FrameRateCategoryRate with the provided rates
+ * for the categories Normal and High respectively;
+ *
+ * @param normal rate for the category Normal.
+ * @param high rate for the category High.
+ * @hide
+ */
+ public FrameRateCategoryRate(float normal, float high) {
+ this.mNormal = normal;
+ this.mHigh = high;
+ }
+
+ /**
+ * @return the value for the category normal;
+ * @hide
+ */
+ public float getNormal() {
+ return mNormal;
+ }
+
+ /**
+ * @return the value for the category high;
+ * @hide
+ */
+ public float getHigh() {
+ return mHigh;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o == this) {
+ return true;
+ }
+ if (!(o instanceof FrameRateCategoryRate)) {
+ return false;
+ }
+ FrameRateCategoryRate that = (FrameRateCategoryRate) o;
+ return mNormal == that.mNormal && mHigh == that.mHigh;
+
+ }
+
+ @Override
+ public int hashCode() {
+ int result = 1;
+ result = 31 * result + Float.hashCode(mNormal);
+ result = 31 * result + Float.hashCode(mHigh);
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ return "FrameRateCategoryRate {"
+ + "normal=" + mNormal
+ + ", high=" + mHigh
+ + '}';
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeFloat(mNormal);
+ dest.writeFloat(mHigh);
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ public static final Creator<FrameRateCategoryRate> CREATOR =
+ new Creator<>() {
+ @Override
+ public FrameRateCategoryRate createFromParcel(Parcel in) {
+ return new FrameRateCategoryRate(in.readFloat(), in.readFloat());
+ }
+
+ @Override
+ public FrameRateCategoryRate[] newArray(int size) {
+ return new FrameRateCategoryRate[size];
+ }
+ };
+}
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index e6de478e3d3d..e068b41d7536 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -1811,6 +1811,7 @@ public final class SurfaceControl implements Parcelable {
public int activeDisplayModeId;
public float renderFrameRate;
public boolean hasArrSupport;
+ public FrameRateCategoryRate frameRateCategoryRate;
public int[] supportedColorModes;
public int activeColorMode;
@@ -1829,6 +1830,7 @@ public final class SurfaceControl implements Parcelable {
+ ", activeDisplayModeId=" + activeDisplayModeId
+ ", renderFrameRate=" + renderFrameRate
+ ", hasArrSupport=" + hasArrSupport
+ + ", frameRateCategoryRate=" + frameRateCategoryRate
+ ", supportedColorModes=" + Arrays.toString(supportedColorModes)
+ ", activeColorMode=" + activeColorMode
+ ", hdrCapabilities=" + hdrCapabilities
@@ -1849,13 +1851,15 @@ public final class SurfaceControl implements Parcelable {
&& activeColorMode == that.activeColorMode
&& Objects.equals(hdrCapabilities, that.hdrCapabilities)
&& preferredBootDisplayMode == that.preferredBootDisplayMode
- && hasArrSupport == that.hasArrSupport;
+ && hasArrSupport == that.hasArrSupport
+ && Objects.equals(frameRateCategoryRate, that.frameRateCategoryRate);
}
@Override
public int hashCode() {
return Objects.hash(Arrays.hashCode(supportedDisplayModes), activeDisplayModeId,
- renderFrameRate, activeColorMode, hdrCapabilities, hasArrSupport);
+ renderFrameRate, activeColorMode, hdrCapabilities, hasArrSupport,
+ frameRateCategoryRate);
}
}
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index f9c3a46828b9..a4bb8c348d3f 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -45,6 +45,7 @@ import android.view.DisplayAddress;
import android.view.DisplayCutout;
import android.view.DisplayEventReceiver;
import android.view.DisplayShape;
+import android.view.FrameRateCategoryRate;
import android.view.RoundedCorners;
import android.view.SurfaceControl;
@@ -247,6 +248,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
private boolean mDisplayModeSpecsInvalid;
private int mActiveColorMode;
private boolean mHasArrSupport;
+ private FrameRateCategoryRate mFrameRateCategoryRate;
private Display.HdrCapabilities mHdrCapabilities;
private boolean mAllmSupported;
private boolean mGameContentTypeSupported;
@@ -313,6 +315,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
changed |= updateAllmSupport(dynamicInfo.autoLowLatencyModeSupported);
changed |= updateGameContentTypeSupport(dynamicInfo.gameContentTypeSupported);
changed |= updateHasArrSupportLocked(dynamicInfo.hasArrSupport);
+ changed |= updateFrameRateCategoryRatesLocked(dynamicInfo.frameRateCategoryRate);
if (changed) {
mHavePendingChanges = true;
@@ -604,6 +607,15 @@ final class LocalDisplayAdapter extends DisplayAdapter {
return true;
}
+ private boolean updateFrameRateCategoryRatesLocked(
+ FrameRateCategoryRate newFrameRateCategoryRate) {
+ if (Objects.equals(mFrameRateCategoryRate, newFrameRateCategoryRate)) {
+ return false;
+ }
+ mFrameRateCategoryRate = newFrameRateCategoryRate;
+ return true;
+ }
+
private boolean updateHasArrSupportLocked(boolean newHasArrSupport) {
if (mHasArrSupport == newHasArrSupport) {
return false;
@@ -695,6 +707,7 @@ final class LocalDisplayAdapter extends DisplayAdapter {
}
mInfo.hdrCapabilities = mHdrCapabilities;
mInfo.hasArrSupport = mHasArrSupport;
+ mInfo.frameRateCategoryRate = mFrameRateCategoryRate;
mInfo.appVsyncOffsetNanos = mActiveSfDisplayMode.appVsyncOffsetNanos;
mInfo.presentationDeadlineNanos = mActiveSfDisplayMode.presentationDeadlineNanos;
mInfo.state = mState;
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java
index 074a4d851aef..7cfdcafcb610 100644
--- a/services/core/java/com/android/server/display/LogicalDisplay.java
+++ b/services/core/java/com/android/server/display/LogicalDisplay.java
@@ -507,6 +507,7 @@ final class LogicalDisplay {
mBaseDisplayInfo.modeId = deviceInfo.modeId;
mBaseDisplayInfo.renderFrameRate = deviceInfo.renderFrameRate;
mBaseDisplayInfo.hasArrSupport = deviceInfo.hasArrSupport;
+ mBaseDisplayInfo.frameRateCategoryRate = deviceInfo.frameRateCategoryRate;
mBaseDisplayInfo.defaultModeId = deviceInfo.defaultModeId;
mBaseDisplayInfo.userPreferredModeId = deviceInfo.userPreferredModeId;
mBaseDisplayInfo.supportedModes = Arrays.copyOf(