SF: Extract utils::OnceFuture

Make `mRenderEnginePrimeCacheFuture` thread-safe and release its shared
state after the wait.

Bug: 328459745
Test: presubmit
Change-Id: I2bf3029823109a8c97e599d20c15e46ac1e4aeb9
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index b9ea0c3..0cc8fbb 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -89,6 +89,7 @@
 #include "Tracing/TransactionTracing.h"
 #include "TransactionCallbackInvoker.h"
 #include "TransactionState.h"
+#include "Utils/OnceFuture.h"
 
 #include <atomic>
 #include <cstdint>
@@ -1189,10 +1190,9 @@
     pid_t mPid;
 
     // TODO: b/328459745 - Encapsulate in a SystemProperties object.
-    std::mutex mInitBootPropsFutureMutex;
-    std::future<void> mInitBootPropsFuture GUARDED_BY(mInitBootPropsFutureMutex);
+    utils::OnceFuture mInitBootPropsFuture;
 
-    std::future<void> mRenderEnginePrimeCacheFuture;
+    utils::OnceFuture mRenderEnginePrimeCacheFuture;
 
     // mStateLock has conventions related to the current thread, because only
     // the main thread should modify variables protected by mStateLock.