NDK attached Choreographer from SurfaceControl.
The API to get a native attached choreographer from
ASurfaceControl.
Bug: 255838011
Test: atest ChoreographerTests
Test: atest ChoreographerNativeTest
Change-Id: I7ed0ebea9f735e102f2285edb3a1cc35b338c3c9
diff --git a/native/android/surface_control.cpp b/native/android/surface_control.cpp
index ea20c6c..b7f3596 100644
--- a/native/android/surface_control.cpp
+++ b/native/android/surface_control.cpp
@@ -180,6 +180,18 @@
reinterpret_cast<void*>(func));
}
+AChoreographer* ASurfaceControl_getChoreographer(ASurfaceControl* aSurfaceControl) {
+ LOG_ALWAYS_FATAL_IF(aSurfaceControl == nullptr, "aSurfaceControl should not be nullptr");
+ SurfaceControl* surfaceControl =
+ ASurfaceControl_to_SurfaceControl(reinterpret_cast<ASurfaceControl*>(aSurfaceControl));
+ if (!surfaceControl->isValid()) {
+ ALOGE("Attempted to get choreographer from invalid surface control");
+ return nullptr;
+ }
+ SurfaceControl_acquire(surfaceControl);
+ return reinterpret_cast<AChoreographer*>(surfaceControl->getChoreographer().get());
+}
+
int64_t ASurfaceControlStats_getAcquireTime(ASurfaceControlStats* stats) {
if (const auto* fence = std::get_if<sp<Fence>>(&stats->acquireTimeOrFence)) {
// We got a fence instead of the acquire time due to latch unsignaled.