Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82eed535 authored by Steven Thomas's avatar Steven Thomas Committed by Android (Google) Code Review
Browse files

Merge changes I4851c742,If399edd6

* changes:
  2) DM Generalization of Refresh Rates: Rename listener
  1a) DM: create Class to pass around Specs
parents 31669e14 9fcc79a7
Loading
Loading
Loading
Loading
+35 −4
Original line number Diff line number Diff line
@@ -162,7 +162,7 @@ public final class SurfaceControl implements Parcelable {
                                                                 int[] allowedConfigs);
    private static native int[] nativeGetAllowedDisplayConfigs(IBinder displayToken);
    private static native boolean nativeSetDesiredDisplayConfigSpecs(IBinder displayToken,
            int defaultModeId, float minRefreshRate, float maxRefreshRate);
            SurfaceControl.DesiredDisplayConfigSpecs desiredDisplayConfigSpecs);
    private static native int[] nativeGetDisplayColorModes(IBinder displayToken);
    private static native SurfaceControl.DisplayPrimaries nativeGetDisplayNativePrimaries(
            IBinder displayToken);
@@ -1492,16 +1492,47 @@ public final class SurfaceControl implements Parcelable {
    }

    /**
     * Contains information about desired display configuration.
     *
     * @hide
     */
    public static boolean setDesiredDisplayConfigSpecs(IBinder displayToken,
    public static final class DesiredDisplayConfigSpecs {
        /**
         * @hide
         */
        public int mDefaultModeId;

        /**
         * @hide
         */
        public float mMinRefreshRate;

        /**
         * @hide
         */
        public float mMaxRefreshRate;

        /**
         * @hide
         */
        public DesiredDisplayConfigSpecs(
                int defaultModeId, float minRefreshRate, float maxRefreshRate) {
            mDefaultModeId = defaultModeId;
            mMinRefreshRate = minRefreshRate;
            mMaxRefreshRate = maxRefreshRate;
        }
    }

    /**
     * @hide
     */
    public static boolean setDesiredDisplayConfigSpecs(IBinder displayToken,
            SurfaceControl.DesiredDisplayConfigSpecs desiredDisplayConfigSpecs) {
        if (displayToken == null) {
            throw new IllegalArgumentException("displayToken must not be null");
        }

        return nativeSetDesiredDisplayConfigSpecs(displayToken, defaultModeId, minRefreshRate,
            maxRefreshRate);
        return nativeSetDesiredDisplayConfigSpecs(displayToken, desiredDisplayConfigSpecs);
    }

    /**
+33 −4
Original line number Diff line number Diff line
@@ -138,6 +138,14 @@ static struct {
    jmethodID builder;
} gScreenshotGraphicBufferClassInfo;

static struct {
    jclass clazz;
    jmethodID ctor;
    jfieldID defaultModeId;
    jfieldID minRefreshRate;
    jfieldID maxRefreshRate;
} gDesiredDisplayConfigSpecsClassInfo;

class JNamedColorSpace {
public:
    // ColorSpace.Named.SRGB.ordinal() = 0;
@@ -810,13 +818,20 @@ static jintArray nativeGetAllowedDisplayConfigs(JNIEnv* env, jclass clazz, jobje
    return allowedConfigsArray;
}

static jboolean nativeSetDesiredDisplayConfigSpecs(JNIEnv* env, jclass clazz,
        jobject tokenObj, jint displayModeId, jfloat minRefreshRate, jfloat maxRefreshRate) {
static jboolean nativeSetDesiredDisplayConfigSpecs(JNIEnv* env, jclass clazz, jobject tokenObj,
                                                   jobject desiredDisplayConfigSpecs) {
    sp<IBinder> token(ibinderForJavaObject(env, tokenObj));
    if (token == nullptr) return JNI_FALSE;

    jint defaultModeId = env->GetIntField(desiredDisplayConfigSpecs,
                                          gDesiredDisplayConfigSpecsClassInfo.defaultModeId);
    jfloat minRefreshRate = env->GetFloatField(desiredDisplayConfigSpecs,
                                               gDesiredDisplayConfigSpecsClassInfo.minRefreshRate);
    jfloat maxRefreshRate = env->GetFloatField(desiredDisplayConfigSpecs,
                                               gDesiredDisplayConfigSpecsClassInfo.maxRefreshRate);

    size_t result = SurfaceComposerClient::setDesiredDisplayConfigSpecs(
        token, displayModeId, minRefreshRate, maxRefreshRate);
            token, defaultModeId, minRefreshRate, maxRefreshRate);
    return result == NO_ERROR ? JNI_TRUE : JNI_FALSE;
}

@@ -1376,7 +1391,8 @@ static const JNINativeMethod sSurfaceControlMethods[] = {
            (void*)nativeSetAllowedDisplayConfigs },
    {"nativeGetAllowedDisplayConfigs", "(Landroid/os/IBinder;)[I",
            (void*)nativeGetAllowedDisplayConfigs },
    {"nativeSetDesiredDisplayConfigSpecs", "(Landroid/os/IBinder;IFF)Z",
    {"nativeSetDesiredDisplayConfigSpecs",
            "(Landroid/os/IBinder;Landroid/view/SurfaceControl$DesiredDisplayConfigSpecs;)Z",
            (void*)nativeSetDesiredDisplayConfigSpecs },
    {"nativeGetDisplayColorModes", "(Landroid/os/IBinder;)[I",
            (void*)nativeGetDisplayColorModes},
@@ -1547,6 +1563,19 @@ int register_android_view_SurfaceControl(JNIEnv* env)
    gDisplayPrimariesClassInfo.white = GetFieldIDOrDie(env, displayPrimariesClazz, "white",
            "Landroid/view/SurfaceControl$CieXyz;");

    jclass desiredDisplayConfigSpecsClazz =
            FindClassOrDie(env, "android/view/SurfaceControl$DesiredDisplayConfigSpecs");
    gDesiredDisplayConfigSpecsClassInfo.clazz =
            MakeGlobalRefOrDie(env, desiredDisplayConfigSpecsClazz);
    gDesiredDisplayConfigSpecsClassInfo.ctor =
            GetMethodIDOrDie(env, gDesiredDisplayConfigSpecsClassInfo.clazz, "<init>", "(IFF)V");
    gDesiredDisplayConfigSpecsClassInfo.defaultModeId =
            GetFieldIDOrDie(env, desiredDisplayConfigSpecsClazz, "mDefaultModeId", "I");
    gDesiredDisplayConfigSpecsClassInfo.minRefreshRate =
            GetFieldIDOrDie(env, desiredDisplayConfigSpecsClazz, "mMinRefreshRate", "F");
    gDesiredDisplayConfigSpecsClassInfo.maxRefreshRate =
            GetFieldIDOrDie(env, desiredDisplayConfigSpecsClazz, "mMaxRefreshRate", "F");

    return err;
}

+2 −2
Original line number Diff line number Diff line
@@ -431,7 +431,7 @@ public final class DisplayManagerService extends SystemService {
            recordTopInsetLocked(mLogicalDisplays.get(Display.DEFAULT_DISPLAY));
        }

        mDisplayModeDirector.setListener(new AllowedDisplayModeObserver());
        mDisplayModeDirector.setDisplayModeListener(new AllowedDisplayModeObserver());
        mDisplayModeDirector.start(mSensorManager);

        mHandler.sendEmptyMessage(MSG_REGISTER_ADDITIONAL_DISPLAY_ADAPTERS);
@@ -2488,7 +2488,7 @@ public final class DisplayManagerService extends SystemService {

    }

    class AllowedDisplayModeObserver implements DisplayModeDirector.Listener {
    class AllowedDisplayModeObserver implements DisplayModeDirector.DisplayModeListener {
        public void onAllowedDisplayModesChanged() {
            onAllowedDisplayModesChangedInternal();
        }
+9 −9
Original line number Diff line number Diff line
@@ -95,7 +95,7 @@ public class DisplayModeDirector {
    private final BrightnessObserver mBrightnessObserver;

    private final DeviceConfigDisplaySettings mDeviceConfigDisplaySettings;
    private Listener mListener;
    private DisplayModeListener mDisplayModeListener;

    public DisplayModeDirector(@NonNull Context context, @NonNull Handler handler) {
        mContext = context;
@@ -311,11 +311,11 @@ public class DisplayModeDirector {
    }

    /**
     * Sets the listener for changes to allowed display modes.
     * Sets the modeListener for changes to allowed display modes.
     */
    public void setListener(@Nullable Listener listener) {
    public void setDisplayModeListener(@Nullable DisplayModeListener displayModeListener) {
        synchronized (mLock) {
            mListener = listener;
            mDisplayModeListener = displayModeListener;
        }
    }

@@ -393,12 +393,12 @@ public class DisplayModeDirector {
    }

    private void notifyAllowedModesChangedLocked() {
        if (mListener != null && !mHandler.hasMessages(MSG_ALLOWED_MODES_CHANGED)) {
        if (mDisplayModeListener != null && !mHandler.hasMessages(MSG_ALLOWED_MODES_CHANGED)) {
            // We need to post this to a handler to avoid calling out while holding the lock
            // since we know there are things that both listen for changes as well as provide
            // information. If we did call out while holding the lock, then there's no guaranteed
            // lock order and we run the real of risk deadlock.
            Message msg = mHandler.obtainMessage(MSG_ALLOWED_MODES_CHANGED, mListener);
            Message msg = mHandler.obtainMessage(MSG_ALLOWED_MODES_CHANGED, mDisplayModeListener);
            msg.sendToTarget();
        }
    }
@@ -432,7 +432,7 @@ public class DisplayModeDirector {
    /**
     * Listens for changes to display mode coordination.
     */
    public interface Listener {
    public interface DisplayModeListener {
        /**
         * Called when the allowed display modes may have changed.
         */
@@ -448,8 +448,8 @@ public class DisplayModeDirector {
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case MSG_ALLOWED_MODES_CHANGED:
                    Listener listener = (Listener) msg.obj;
                    listener.onAllowedDisplayModesChanged();
                    DisplayModeListener displayModeListener = (DisplayModeListener) msg.obj;
                    displayModeListener.onAllowedDisplayModesChanged();
                    break;

                case MSG_BRIGHTNESS_THRESHOLDS_CHANGED:
+3 −2
Original line number Diff line number Diff line
@@ -693,8 +693,9 @@ final class LocalDisplayAdapter extends DisplayAdapter {
            }

            final IBinder token = getDisplayTokenLocked();
            SurfaceControl.setDesiredDisplayConfigSpecs(token, defaultModeId, minRefreshRate,
                    maxRefreshRate);
            SurfaceControl.setDesiredDisplayConfigSpecs(token,
                    new SurfaceControl.DesiredDisplayConfigSpecs(
                            defaultModeId, minRefreshRate, maxRefreshRate));
            int activePhysIndex = SurfaceControl.getActiveConfig(token);
            return updateActiveModeLocked(activePhysIndex);
        }