From 564f9deb6d5c9ee27bd6a84f7c6e4544ad9e174a Mon Sep 17 00:00:00 2001 From: Ady Abraham Date: Wed, 3 Feb 2021 18:34:33 -0800 Subject: 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 --- libs/gui/ISurfaceComposer.cpp | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'libs/gui/ISurfaceComposer.cpp') diff --git a/libs/gui/ISurfaceComposer.cpp b/libs/gui/ISurfaceComposer.cpp index f68f3e134e..e3aaf6dfd7 100644 --- a/libs/gui/ISurfaceComposer.cpp +++ b/libs/gui/ISurfaceComposer.cpp @@ -1232,6 +1232,18 @@ public: } return reply.readInt32(); } + + status_t getExtraBufferCount(int* extraBuffers) const override { + Parcel data, reply; + data.writeInterfaceToken(ISurfaceComposer::getInterfaceDescriptor()); + status_t err = remote()->transact(BnSurfaceComposer::GET_EXTRA_BUFFER_COUNT, data, &reply); + if (err != NO_ERROR) { + ALOGE("getExtraBufferCount failed to read data: %s (%d)", strerror(-err), err); + return err; + } + + return reply.readInt32(extraBuffers); + } }; // Out-of-line virtual method definition to trigger vtable emission in this @@ -2101,6 +2113,16 @@ status_t BnSurfaceComposer::onTransact( SAFE_PARCEL(reply->writeInt32, priority); return NO_ERROR; } + case GET_EXTRA_BUFFER_COUNT: { + CHECK_INTERFACE(ISurfaceComposer, data, reply); + int extraBuffers = 0; + int err = getExtraBufferCount(&extraBuffers); + if (err != NO_ERROR) { + return err; + } + SAFE_PARCEL(reply->writeInt32, extraBuffers); + return NO_ERROR; + } default: { return BBinder::onTransact(code, data, reply, flags); } -- cgit v1.2.3-59-g8ed1b