Merge "SurfaceFlinger: Remove usage of window types to implement policy"

This commit is contained in:
Andy Labrada
2022-07-08 23:15:53 +00:00
committed by Android (Google) Code Review
5 changed files with 55 additions and 4 deletions

View File

@@ -22,7 +22,6 @@ import static android.graphics.Matrix.MSCALE_X;
import static android.graphics.Matrix.MSCALE_Y;
import static android.graphics.Matrix.MSKEW_X;
import static android.graphics.Matrix.MSKEW_Y;
import static android.view.SurfaceControl.METADATA_WINDOW_TYPE;
import static android.view.View.SYSTEM_UI_FLAG_VISIBLE;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
@@ -1168,12 +1167,14 @@ public abstract class WallpaperService extends Service {
mBbqSurfaceControl = new SurfaceControl.Builder()
.setName("Wallpaper BBQ wrapper")
.setHidden(false)
// TODO(b/192291754)
.setMetadata(METADATA_WINDOW_TYPE, TYPE_WALLPAPER)
.setBLASTLayer()
.setParent(mSurfaceControl)
.setCallsite("Wallpaper#relayout")
.build();
SurfaceControl.Transaction transaction =
new SurfaceControl.Transaction();
transaction.setDefaultFrameRateCompatibility(mBbqSurfaceControl,
Surface.FRAME_RATE_COMPATIBILITY_MIN).apply();
}
// Propagate transform hint from WM, so we can use the right hint for the
// first frame.

View File

@@ -228,6 +228,19 @@ public class Surface implements Parcelable {
*/
public static final int FRAME_RATE_COMPATIBILITY_EXACT = 100;
// From window.h. Keep these in sync.
/**
* This surface is ignored while choosing the refresh rate.
* @hide
*/
public static final int FRAME_RATE_COMPATIBILITY_NO_VOTE = 101;
// From window.h. Keep these in sync.
/**
* This surface will vote for the minimum refresh rate.
* @hide
*/
public static final int FRAME_RATE_COMPATIBILITY_MIN = 102;
/** @hide */
@Retention(RetentionPolicy.SOURCE)

View File

@@ -249,6 +249,8 @@ public final class SurfaceControl implements Parcelable {
private static native void nativeSetFrameRate(long transactionObj, long nativeObject,
float frameRate, int compatibility, int changeFrameRateStrategy);
private static native void nativeSetDefaultFrameRateCompatibility(long transactionObj,
long nativeObject, int compatibility);
private static native long nativeGetHandle(long nativeObject);
private static native void nativeSetFixedTransformHint(long transactionObj, long nativeObject,
@@ -3613,6 +3615,25 @@ public final class SurfaceControl implements Parcelable {
return this;
}
/**
* Sets the default frame rate compatibility for the surface {@link SurfaceControl}
*
* @param sc The SurfaceControl to specify the frame rate of.
* @param compatibility The frame rate compatibility of this surface. The compatibility
* value may influence the system's choice of display frame rate.
*
* @return This transaction object.
*
* @hide
*/
@NonNull
public Transaction setDefaultFrameRateCompatibility(@NonNull SurfaceControl sc,
@Surface.FrameRateCompatibility int compatibility) {
checkPreconditions(sc);
nativeSetDefaultFrameRateCompatibility(mNativeObject, sc.mNativeObject, compatibility);
return this;
}
/**
* Sets focus on the window identified by the input {@code token} if the window is focusable
* otherwise the request is dropped.

View File

@@ -3024,6 +3024,12 @@ public final class ViewRootImpl implements ViewParent,
if (surfaceControlChanged && mDisplayDecorationCached) {
updateDisplayDecoration();
}
if (surfaceControlChanged
&& mWindowAttributes.type
== WindowManager.LayoutParams.TYPE_STATUS_BAR) {
mTransaction.setDefaultFrameRateCompatibility(mSurfaceControl,
Surface.FRAME_RATE_COMPATIBILITY_NO_VOTE).apply();
}
}
if (DEBUG_LAYOUT) Log.v(mTag, "relayout: frame=" + frame.toShortString()
@@ -3064,7 +3070,6 @@ public final class ViewRootImpl implements ViewParent,
if (surfaceReplaced) {
mSurfaceSequenceId++;
}
if (alwaysConsumeSystemBarsChanged) {
mAttachInfo.mAlwaysConsumeSystemBars = mPendingAlwaysConsumeSystemBars;
dispatchApplyInsets = true;

View File

@@ -1018,6 +1018,15 @@ static void nativeSetFrameRate(JNIEnv* env, jclass clazz, jlong transactionObj,
static_cast<int8_t>(changeFrameRateStrategy));
}
static void nativeSetDefaultFrameRateCompatibility(JNIEnv* env, jclass clazz, jlong transactionObj,
jlong nativeObject, jint compatibility) {
auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
const auto ctrl = reinterpret_cast<SurfaceControl*>(nativeObject);
transaction->setDefaultFrameRateCompatibility(ctrl, static_cast<int8_t>(compatibility));
}
static void nativeSetFixedTransformHint(JNIEnv* env, jclass clazz, jlong transactionObj,
jlong nativeObject, jint transformHint) {
auto transaction = reinterpret_cast<SurfaceComposerClient::Transaction*>(transactionObj);
@@ -2157,6 +2166,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
(void*)nativeSetShadowRadius },
{"nativeSetFrameRate", "(JJFII)V",
(void*)nativeSetFrameRate },
{"nativeSetDefaultFrameRateCompatibility", "(JJI)V",
(void*)nativeSetDefaultFrameRateCompatibility},
{"nativeGetPhysicalDisplayIds", "()[J",
(void*)nativeGetPhysicalDisplayIds },
{"nativeGetPrimaryPhysicalDisplayId", "()J",