diff options
author | 2024-10-28 12:54:52 -0700 | |
---|---|---|
committer | 2024-10-28 12:56:22 -0700 | |
commit | ba2f3e93d40327f4ab7bbb43305d70784f64f1ec (patch) | |
tree | eee5b6ace7aa6a814cee0745ca37854fff2a3eea | |
parent | c07bdc21a5499820be8c3f46e7a3dd0835d5ec79 (diff) |
Add new ASurfaceTransaction _setFrameRateParams API
The new overload uses same plumbing and same logic as the other
setFrameRate-like functions. This plumbing and logic will be upgraded to
accommodate new parameters in a future CL.
Bug: 362798998
Test: atest SetFrameRateTest
Flag: EXEMPT NDK
Change-Id: I48c63725697b0b23a4dde7da4f14a9f251c62e55
-rw-r--r-- | native/android/libandroid.map.txt | 1 | ||||
-rw-r--r-- | native/android/surface_control.cpp | 22 |
2 files changed, 23 insertions, 0 deletions
diff --git a/native/android/libandroid.map.txt b/native/android/libandroid.map.txt index 202535d45191..b025cb880ee7 100644 --- a/native/android/libandroid.map.txt +++ b/native/android/libandroid.map.txt @@ -283,6 +283,7 @@ LIBANDROID { ASurfaceTransaction_setEnableBackPressure; # introduced=31 ASurfaceTransaction_setFrameRate; # introduced=30 ASurfaceTransaction_setFrameRateWithChangeStrategy; # introduced=31 + ASurfaceTransaction_setFrameRateParams; # introduced=36 ASurfaceTransaction_clearFrameRate; # introduced=34 ASurfaceTransaction_setFrameTimeline; # introduced=Tiramisu ASurfaceTransaction_setGeometry; # introduced=29 diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp index e46db6bb3727..698bc84a78b9 100644 --- a/native/android/surface_control.cpp +++ b/native/android/surface_control.cpp @@ -731,6 +731,28 @@ void ASurfaceTransaction_setFrameRateWithChangeStrategy(ASurfaceTransaction* aSu transaction->setFrameRate(surfaceControl, frameRate, compatibility, changeFrameRateStrategy); } +void ASurfaceTransaction_setFrameRateParams( + ASurfaceTransaction* aSurfaceTransaction, ASurfaceControl* aSurfaceControl, + float desiredMinRate, float desiredMaxRate, float fixedSourceRate, + ANativeWindow_ChangeFrameRateStrategy changeFrameRateStrategy) { + CHECK_NOT_NULL(aSurfaceTransaction); + CHECK_NOT_NULL(aSurfaceControl); + Transaction* transaction = ASurfaceTransaction_to_Transaction(aSurfaceTransaction); + sp<SurfaceControl> surfaceControl = ASurfaceControl_to_SurfaceControl(aSurfaceControl); + + if (desiredMaxRate < desiredMinRate) { + ALOGW("desiredMaxRate must be greater than or equal to desiredMinRate"); + return; + } + // TODO(b/362798998): Fix plumbing to send modern params + int compatibility = fixedSourceRate == 0 ? ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_DEFAULT + : ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_FIXED_SOURCE; + double frameRate = compatibility == ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_FIXED_SOURCE + ? fixedSourceRate + : desiredMinRate; + transaction->setFrameRate(surfaceControl, frameRate, compatibility, changeFrameRateStrategy); +} + void ASurfaceTransaction_clearFrameRate(ASurfaceTransaction* aSurfaceTransaction, ASurfaceControl* aSurfaceControl) { CHECK_NOT_NULL(aSurfaceTransaction); |