From d7b3a8bcf9946a32213812a46f9c88a910151686 Mon Sep 17 00:00:00 2001 From: Alec Mouri Date: Thu, 21 Mar 2019 11:44:18 -0700 Subject: Create EGLImages during buffer allocation EGLImage creation is now performed on an async binder thread, so now GPU composition should rarely be stalled by expensive image creation. Bug: 129008989 Test: systrace Change-Id: I9732f866933a8950a4c69ff51d5ac1622bbb3470 --- libs/gui/BufferQueueProducer.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'libs/gui/BufferQueueProducer.cpp') diff --git a/libs/gui/BufferQueueProducer.cpp b/libs/gui/BufferQueueProducer.cpp index a462b0362f..e657488969 100644 --- a/libs/gui/BufferQueueProducer.cpp +++ b/libs/gui/BufferQueueProducer.cpp @@ -530,6 +530,13 @@ status_t BufferQueueProducer::dequeueBuffer(int* outSlot, sp* ou return NO_INIT; } + if (mCore->mConsumerListener != nullptr) { + BufferItem item; + item.mGraphicBuffer = graphicBuffer; + item.mSlot = *outSlot; + mCore->mConsumerListener->onBufferAllocated(item); + } + VALIDATE_CONSISTENCY(); } // Autolock scope } @@ -1414,6 +1421,13 @@ void BufferQueueProducer::allocateBuffers(uint32_t width, uint32_t height, BQ_LOGV("allocateBuffers: allocated a new buffer in slot %d", *slot); + if (mCore->mConsumerListener != nullptr) { + BufferItem item; + item.mGraphicBuffer = buffers[i]; + item.mSlot = *slot; + mCore->mConsumerListener->onBufferAllocated(item); + } + // Make sure the erase is done after all uses of the slot // iterator since it will be invalid after this point. mCore->mFreeSlots.erase(slot); -- cgit v1.2.3-59-g8ed1b