From d6ac7795876884aa18e565ebdd1400b49acc5c64 Mon Sep 17 00:00:00 2001 From: Ady Abraham Date: Wed, 20 Dec 2023 13:33:56 -0800 Subject: SF: make RenderEngineThreaded::waitUntilInitialized more efficient RenderEngineThreaded::waitUntilInitialized is called from multiple threads. Use atomic to avoid contending on a mutex. Bug: 313924033 Test: presubmit Change-Id: I4d61240a76f3ca814c28ccba62626f8b43a125cd Merged-In: I4d61240a76f3ca814c28ccba62626f8b43a125cd (cherry picked from commit 36135d0e0f880d28a77792bd1b7519e3a2110a8d) --- libs/renderengine/threaded/RenderEngineThreaded.cpp | 6 ++++-- libs/renderengine/threaded/RenderEngineThreaded.h | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'libs') diff --git a/libs/renderengine/threaded/RenderEngineThreaded.cpp b/libs/renderengine/threaded/RenderEngineThreaded.cpp index 6a1561abcd..528115d7f6 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.cpp +++ b/libs/renderengine/threaded/RenderEngineThreaded.cpp @@ -127,8 +127,10 @@ void RenderEngineThreaded::threadMain(CreateInstanceFactory factory) NO_THREAD_S } void RenderEngineThreaded::waitUntilInitialized() const { - std::unique_lock lock(mInitializedMutex); - mInitializedCondition.wait(lock, [=] { return mIsInitialized; }); + if (!mIsInitialized) { + std::unique_lock lock(mInitializedMutex); + mInitializedCondition.wait(lock, [this] { return mIsInitialized.load(); }); + } } std::future RenderEngineThreaded::primeCache() { diff --git a/libs/renderengine/threaded/RenderEngineThreaded.h b/libs/renderengine/threaded/RenderEngineThreaded.h index 6eb108e064..4ba26bf926 100644 --- a/libs/renderengine/threaded/RenderEngineThreaded.h +++ b/libs/renderengine/threaded/RenderEngineThreaded.h @@ -100,7 +100,7 @@ private: // Used to allow select thread safe methods to be accessed without requiring the // method to be invoked on the RenderEngine thread - bool mIsInitialized = false; + std::atomic_bool mIsInitialized = false; mutable std::mutex mInitializedMutex; mutable std::condition_variable mInitializedCondition; -- cgit v1.2.3-59-g8ed1b