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

Commit edb5197e authored by Rachel Lee's avatar Rachel Lee Committed by Android (Google) Code Review
Browse files

Merge "Define new ASurfaceTransaction_setFrameRateParams API" into main

parents a62f5ab0 769de4ac
Loading
Loading
Loading
Loading
+63 −0
Original line number Original line Diff line number Diff line
@@ -762,6 +762,69 @@ void ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction* _No
                                                        int8_t changeFrameRateStrategy)
                                                        int8_t changeFrameRateStrategy)
                                                        __INTRODUCED_IN(31);
                                                        __INTRODUCED_IN(31);


/**
 * Sets the intended frame rate for the given \a surface_control.
 *
 * On devices that are capable of running the display at different frame rates,
 * the system may choose a display refresh rate to better match this surface's frame
 * rate. Usage of this API won't introduce frame rate throttling, or affect other
 * aspects of the application's frame production pipeline. However, because the system
 * may change the display refresh rate, calls to this function may result in changes
 * to Choreographer callback timings, and changes to the time interval at which the
 * system releases buffers back to the application.
 *
 * You can register for changes in the refresh rate using
 * \a AChoreographer_registerRefreshRateCallback.
 *
 * See ASurfaceTransaction_clearFrameRate().
 *
 * Available since API level 36.
 *
 * \param desiredMinRate The desired minimum frame rate (inclusive) for the surface, specifying that
 * the surface prefers the device render rate to be at least `desiredMinRate`.
 *
 * <p>Set `desiredMinRate` = `desiredMaxRate` to indicate the surface prefers an exact frame rate.
 *
 * <p>Set `desiredMinRate` = 0 to indicate the surface has no preference
 * and any frame rate is acceptable.
 *
 * <p>The value should be greater than or equal to 0.
 *
 * \param desiredMaxRate The desired maximum frame rate (inclusive) for the surface, specifying that
 * the surface prefers the device render rate to be at most `desiredMaxRate`.
 *
 * <p>Set `desiredMaxRate` = `desiredMinRate` to indicate the surface prefers an exact frame rate.
 *
 * <p>Set `desiredMaxRate` = positive infinity to indicate the surface has no preference
 * and any frame rate is acceptable.
 *
 * <p>The value should be greater than or equal to `desiredMinRate`.
 *
 * \param fixedSourceRate The "fixed source" frame rate of the surface if the content has an
 * inherently fixed frame rate, e.g. a video that has a specific frame rate.
 *
 * <p>When the frame rate chosen for the surface is the `fixedSourceRate` or a
 * multiple, the surface can render without frame pulldown, for optimal smoothness. For
 * example, a 30 fps video (`fixedSourceRate`=30) renders just as smoothly on 30 fps,
 * 60 fps, 90 fps, 120 fps, and so on.
 *
 * <p>Setting the fixed source rate can also be used together with a desired
 * frame rate min and max via setting `desiredMinRate` and `desiredMaxRate`. This still
 * means the surface's content has a fixed frame rate of `fixedSourceRate`, but additionally
 * specifies the preference to be in the range [`desiredMinRate`, `desiredMaxRate`]. For example, an
 * app might want to specify there is 30 fps video (`fixedSourceRate`=30) as well as a smooth
 * animation on the same surface which looks good when drawing within a frame rate range such as
 * [`desiredMinRate`, `desiredMaxRate`] = [60,120].
 *
 * \param changeFrameRateStrategy Whether display refresh rate transitions caused by this surface
 * should be seamless. A seamless transition is one that doesn't have any visual interruptions, such
 * as a black screen for a second or two.
 */
void ASurfaceTransaction_setFrameRateParams(
        ASurfaceTransaction* _Nonnull transaction, ASurfaceControl* _Nonnull surface_control,
        float desiredMinRate, float desiredMaxRate, float fixedSourceRate,
        ANativeWindow_ChangeFrameRateStrategy changeFrameRateStrategy) __INTRODUCED_IN(36);

/**
/**
 * Clears the frame rate which is set for \a surface_control.
 * Clears the frame rate which is set for \a surface_control.
 *
 *