|
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | 16 |
|
17 | | -#include <inttypes.h> |
18 | | -#include <pwd.h> |
19 | | -#include <sys/types.h> |
20 | | - |
21 | 17 | #define LOG_TAG "BufferQueueConsumer" |
22 | 18 | #define ATRACE_TAG ATRACE_TAG_GRAPHICS |
23 | 19 | //#define LOG_NDEBUG 0 |
|
48 | 44 |
|
49 | 45 | #include <com_android_graphics_libgui_flags.h> |
50 | 46 |
|
| 47 | +#include <inttypes.h> |
| 48 | +#include <pwd.h> |
| 49 | +#include <sys/types.h> |
| 50 | +#include <optional> |
| 51 | + |
51 | 52 | namespace android { |
52 | 53 |
|
53 | 54 | // Macros for include BufferQueueCore information in log messages |
@@ -767,11 +768,15 @@ status_t BufferQueueConsumer::setMaxBufferCount(int bufferCount) { |
767 | 768 | return NO_ERROR; |
768 | 769 | } |
769 | 770 |
|
| 771 | +status_t BufferQueueConsumer::setMaxAcquiredBufferCount(int maxAcquiredBuffers) { |
| 772 | + return setMaxAcquiredBufferCount(maxAcquiredBuffers, std::nullopt); |
| 773 | +} |
| 774 | + |
770 | 775 | status_t BufferQueueConsumer::setMaxAcquiredBufferCount( |
771 | | - int maxAcquiredBuffers) { |
| 776 | + int maxAcquiredBuffers, std::optional<OnBufferReleasedCallback> onBuffersReleasedCallback) { |
772 | 777 | ATRACE_FORMAT("%s(%d)", __func__, maxAcquiredBuffers); |
773 | 778 |
|
774 | | - sp<IConsumerListener> listener; |
| 779 | + std::optional<OnBufferReleasedCallback> callback; |
775 | 780 | { // Autolock scope |
776 | 781 | std::unique_lock<std::mutex> lock(mCore->mMutex); |
777 | 782 |
|
@@ -833,13 +838,20 @@ status_t BufferQueueConsumer::setMaxAcquiredBufferCount( |
833 | 838 | BQ_LOGV("setMaxAcquiredBufferCount: %d", maxAcquiredBuffers); |
834 | 839 | mCore->mMaxAcquiredBufferCount = maxAcquiredBuffers; |
835 | 840 | VALIDATE_CONSISTENCY(); |
836 | | - if (delta < 0 && mCore->mBufferReleasedCbEnabled) { |
837 | | - listener = mCore->mConsumerListener; |
| 841 | + if (delta < 0) { |
| 842 | + if (onBuffersReleasedCallback) { |
| 843 | + callback = std::move(onBuffersReleasedCallback); |
| 844 | + } else if (mCore->mBufferReleasedCbEnabled) { |
| 845 | + callback = [listener = mCore->mConsumerListener]() { |
| 846 | + listener->onBuffersReleased(); |
| 847 | + }; |
| 848 | + } |
838 | 849 | } |
839 | 850 | } |
| 851 | + |
840 | 852 | // Call back without lock held |
841 | | - if (listener != nullptr) { |
842 | | - listener->onBuffersReleased(); |
| 853 | + if (callback) { |
| 854 | + (*callback)(); |
843 | 855 | } |
844 | 856 |
|
845 | 857 | return NO_ERROR; |
|
0 commit comments