Line data Source code
1 : #include "MemoryResource.h" 2 : 3 : #include "UniversalResource.h" 4 : #include "AllocationHint.h" 5 : 6 : #include <mutex> 7 : 8 : namespace elsa::mr 9 : { 10 : /* 11 : * Memory-Resource Singleton 12 : */ 13 : static std::mutex mrSingletonLock; 14 : static MemoryResource mrSingleton; 15 : 16 : void setGlobalResource(const MemoryResource& r) 17 14 : { 18 14 : if (!r) 19 0 : return; 20 14 : std::lock_guard<std::mutex> _lock(mrSingletonLock); 21 14 : mrSingleton = r; 22 14 : } 23 : MemoryResource globalResource() 24 58566 : { 25 58566 : std::lock_guard<std::mutex> _lock(mrSingletonLock); 26 58566 : if (!mrSingleton) 27 112 : mrSingleton = UniversalResource::make(); 28 58566 : return mrSingleton; 29 58566 : } 30 : MemoryResource defaultResource() 31 58531 : { 32 58531 : std::optional<MemoryResource> resource = hint::selectMemoryResource(); 33 58531 : if (resource) { 34 6 : return std::move(*resource); 35 58525 : } else { 36 58525 : return globalResource(); 37 58525 : } 38 58531 : } 39 : bool isBaselineMRSet() 40 0 : { 41 0 : return bool(mrSingleton); 42 0 : } 43 : } // namespace elsa::mr