diff options
Diffstat (limited to 'services/surfaceflinger/TransactionCallbackInvoker.cpp')
-rw-r--r-- | services/surfaceflinger/TransactionCallbackInvoker.cpp | 39 |
1 files changed, 5 insertions, 34 deletions
diff --git a/services/surfaceflinger/TransactionCallbackInvoker.cpp b/services/surfaceflinger/TransactionCallbackInvoker.cpp index f3d46ea061..b705d9cf7b 100644 --- a/services/surfaceflinger/TransactionCallbackInvoker.cpp +++ b/services/surfaceflinger/TransactionCallbackInvoker.cpp @@ -24,6 +24,7 @@ #define ATRACE_TAG ATRACE_TAG_GRAPHICS #include "TransactionCallbackInvoker.h" +#include "BackgroundExecutor.h" #include <cinttypes> @@ -49,31 +50,6 @@ static bool containsOnCommitCallbacks(const std::vector<CallbackId>& callbacks) return !callbacks.empty() && callbacks.front().type == CallbackId::Type::ON_COMMIT; } -TransactionCallbackInvoker::TransactionCallbackInvoker() { - mThread = std::thread([&]() { - std::unique_lock lock(mCallbackThreadMutex); - - while (mKeepRunning) { - while (mCallbackThreadWork.size() > 0) { - mCallbackThreadWork.front()(); - mCallbackThreadWork.pop(); - } - mCallbackConditionVariable.wait(lock); - } - }); -} - -TransactionCallbackInvoker::~TransactionCallbackInvoker() { - { - std::unique_lock lock(mCallbackThreadMutex); - mKeepRunning = false; - mCallbackConditionVariable.notify_all(); - } - if (mThread.joinable()) { - mThread.join(); - } -} - void TransactionCallbackInvoker::addEmptyTransaction(const ListenerCallbacks& listenerCallbacks) { auto& [listener, callbackIds] = listenerCallbacks; auto& transactionStatsDeque = mCompletedTransactions[listener]; @@ -242,15 +218,10 @@ void TransactionCallbackInvoker::sendCallbacks(bool onCommitOnly) { // keep it as an IBinder due to consistency reasons: if we // interface_cast at the IPC boundary when reading a Parcel, // we get pointers that compare unequal in the SF process. - { - std::unique_lock lock(mCallbackThreadMutex); - mCallbackThreadWork.push( - [stats = std::move(listenerStats)]() { - interface_cast<ITransactionCompletedListener>(stats.listener) - ->onTransactionCompleted(stats); - }); - mCallbackConditionVariable.notify_all(); - } + BackgroundExecutor::getInstance().execute([stats = std::move(listenerStats)]() { + interface_cast<ITransactionCompletedListener>(stats.listener) + ->onTransactionCompleted(stats); + }); } } completedTransactionsItr++; |