SurfaceFlinger: expose vsync id extra buffers
Expose a function for clients to call and query the number
of extra buffers needed when vsync id is passed with the buffer.
Test: launch an app and observe systrace
Test: SF unit tests
Bug: 178148035
Change-Id: Icbeec66073feeae9768f0dcc45831b26144ab6f6
diff --git a/libs/gui/Surface.cpp b/libs/gui/Surface.cpp
index 59ad8d2..07fc069 100644
--- a/libs/gui/Surface.cpp
+++ b/libs/gui/Surface.cpp
@@ -1499,6 +1499,9 @@
case NATIVE_WINDOW_SET_FRAME_TIMELINE_INFO:
res = dispatchSetFrameTimelineInfo(args);
break;
+ case NATIVE_WINDOW_GET_EXTRA_BUFFER_COUNT:
+ res = dispatchGetExtraBufferCount(args);
+ break;
default:
res = NAME_NOT_FOUND;
break;
@@ -1815,6 +1818,14 @@
return setFrameTimelineInfo({frameTimelineVsyncId, inputEventId});
}
+int Surface::dispatchGetExtraBufferCount(va_list args) {
+ ATRACE_CALL();
+ auto extraBuffers = static_cast<int*>(va_arg(args, int*));
+
+ ALOGV("Surface::dispatchGetExtraBufferCount");
+ return getExtraBufferCount(extraBuffers);
+}
+
bool Surface::transformToDisplayInverse() {
return (mTransform & NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY) ==
NATIVE_WINDOW_TRANSFORM_INVERSE_DISPLAY;
@@ -2584,4 +2595,8 @@
return composerService()->setFrameTimelineInfo(mGraphicBufferProducer, frameTimelineInfo);
}
+status_t Surface::getExtraBufferCount(int* extraBuffers) const {
+ return composerService()->getExtraBufferCount(extraBuffers);
+}
+
}; // namespace android