瀏覽代碼

Spawning priority threshold through SetReg

The priority threshold to consider a task high priority can now be configured through the Settings Registry under key "/O3DE/AzFramework/Spawnables/HighPriorityThreshold".
AMZN-koppersr 4 年之前
父節點
當前提交
1248dc5fb4

+ 13 - 21
Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.cpp

@@ -10,9 +10,11 @@
 *
 */
 
+#include <AzCore/Casting/numeric_cast.h>
 #include <AzCore/Component/ComponentApplicationBus.h>
 #include <AzCore/Serialization/IdUtils.h>
 #include <AzCore/Serialization/SerializeContext.h>
+#include <AzCore/Settings/SettingsRegistry.h>
 #include <AzCore/std/parallel/scoped_lock.h>
 #include <AzCore/std/smart_ptr/make_shared.h>
 #include <AzFramework/Components/TransformComponent.h>
@@ -26,7 +28,7 @@ namespace AzFramework
     void SpawnableEntitiesManager::QueueRequest(EntitySpawnTicket& ticket, SpawnablePriority priority, T&& request)
     {
         request.m_ticket = &GetTicketPayload<Ticket>(ticket);
-        Queue& queue = priority <= HighPriorityThreshold ? m_highPriorityQueue : m_regularPriorityQueue;
+        Queue& queue = priority <= m_highPriorityThreshold ? m_highPriorityQueue : m_regularPriorityQueue;
         {
             AZStd::scoped_lock queueLock(queue.m_pendingRequestMutex);
             request.m_requestId = GetTicketPayload<Ticket>(ticket).m_nextRequestId++;
@@ -34,6 +36,16 @@ namespace AzFramework
         }
     }
 
+    SpawnableEntitiesManager::SpawnableEntitiesManager()
+    {
+        if (auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
+        {
+            AZ::u64 value = 64;
+            settingsRegistry->Get(value, "/O3DE/AzFramework/Spawnables/HighPriorityThreshold");
+            m_highPriorityThreshold = aznumeric_cast<SpawnablePriority>(AZStd::clamp(value, 0llu, 255llu));
+        }
+    }
+
     void SpawnableEntitiesManager::SpawnAllEntities(
         EntitySpawnTicket& ticket, SpawnablePriority priority, EntityPreInsertionCallback preInsertionCallback,
         EntitySpawnCallback completionCallback)
@@ -608,24 +620,4 @@ namespace AzFramework
             return false;
         }
     }
-
-    bool SpawnableEntitiesManager::IsEqualTicket(const EntitySpawnTicket* lhs, const EntitySpawnTicket* rhs)
-    {
-        return GetTicketPayload<Ticket>(lhs) == GetTicketPayload<Ticket>(rhs);
-    }
-
-    bool SpawnableEntitiesManager::IsEqualTicket(const Ticket* lhs, const EntitySpawnTicket* rhs)
-    {
-        return lhs == GetTicketPayload<Ticket>(rhs);
-    }
-
-    bool SpawnableEntitiesManager::IsEqualTicket(const EntitySpawnTicket* lhs, const Ticket* rhs)
-    {
-        return GetTicketPayload<Ticket>(lhs) == rhs;
-    }
-
-    bool SpawnableEntitiesManager::IsEqualTicket(const Ticket* lhs, const Ticket* rhs)
-    {
-        return lhs = rhs;
-    }
 } // namespace AzFramework

+ 3 - 7
Code/Framework/AzFramework/AzFramework/Spawnable/SpawnableEntitiesManager.h

@@ -50,8 +50,7 @@ namespace AzFramework
             Regular = 1 << 1
         };
 
-        static constexpr SpawnablePriority HighPriorityThreshold = SpawnablePriority { 64 };
-
+        SpawnableEntitiesManager();
         ~SpawnableEntitiesManager() override = default;
 
         //
@@ -202,16 +201,13 @@ namespace AzFramework
         bool ProcessRequest(BarrierCommand& request, AZ::SerializeContext& serializeContext);
         bool ProcessRequest(DestroyTicketCommand& request, AZ::SerializeContext& serializeContext);
 
-        [[nodiscard]] static bool IsEqualTicket(const EntitySpawnTicket* lhs, const EntitySpawnTicket* rhs);
-        [[nodiscard]] static bool IsEqualTicket(const Ticket* lhs, const EntitySpawnTicket* rhs);
-        [[nodiscard]] static bool IsEqualTicket(const EntitySpawnTicket* lhs, const Ticket* rhs);
-        [[nodiscard]] static bool IsEqualTicket(const Ticket* lhs, const Ticket* rhs);
-
         Queue m_highPriorityQueue;
         Queue m_regularPriorityQueue;
 
         AZ::Event<AZ::Data::Asset<Spawnable>> m_onSpawnedEvent;
         AZ::Event<AZ::Data::Asset<Spawnable>> m_onDespawnedEvent;
+
+        SpawnablePriority m_highPriorityThreshold { 64 };
     };
 
     AZ_DEFINE_ENUM_BITWISE_OPERATORS(AzFramework::SpawnableEntitiesManager::CommandQueuePriority);

+ 14 - 0
Registry/prefab.setreg

@@ -0,0 +1,14 @@
+{
+    "O3DE":
+    {
+        "AzFramework":
+        {
+            "Spawnables":
+            {
+                // Any requests with a priorty value equal or smaller than this will be considered a high priority request.
+                // The range for this value is between 0 and 255.
+                "HighPriorityThreshold" : 64
+            }
+        }
+    }
+}