diff options
Diffstat (limited to 'libs/gui/BLASTBufferQueue.cpp')
| -rw-r--r-- | libs/gui/BLASTBufferQueue.cpp | 17 | 
1 files changed, 17 insertions, 0 deletions
| diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index c2793ac5de..dbccf30fae 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -165,6 +165,17 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, bool updateDestinati      mCurrentMaxAcquiredBufferCount = mMaxAcquiredBuffers;      mNumAcquired = 0;      mNumFrameAvailable = 0; + +    TransactionCompletedListener::getInstance()->addQueueStallListener( +        [&]() { +            std::function<void(bool)> callbackCopy; +            { +                std::unique_lock _lock{mMutex}; +                callbackCopy = mTransactionHangCallback; +            } +            if (callbackCopy) callbackCopy(true); +        }, this); +      BQA_LOGV("BLASTBufferQueue created");  } @@ -175,6 +186,7 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, const sp<SurfaceCont  }  BLASTBufferQueue::~BLASTBufferQueue() { +    TransactionCompletedListener::getInstance()->removeQueueStallListener(this);      if (mPendingTransactions.empty()) {          return;      } @@ -1113,4 +1125,9 @@ bool BLASTBufferQueue::isSameSurfaceControl(const sp<SurfaceControl>& surfaceCon      return SurfaceControl::isSameSurface(mSurfaceControl, surfaceControl);  } +void BLASTBufferQueue::setTransactionHangCallback(std::function<void(bool)> callback) { +    std::unique_lock _lock{mMutex}; +    mTransactionHangCallback = callback; +} +  } // namespace android |