You've already forked UnrealEngineUWP
mirror of
https://github.com/izzy2lost/UnrealEngineUWP.git
synced 2026-03-26 18:15:20 -07:00
REL - reduce allocation pressure during local queue un/registration
#preflight 61d36696af44b43628f4985a #ROBOMERGE-AUTHOR: arne.schober #ROBOMERGE-SOURCE: CL 18504017 in //UE5/Release-5.0/... via CL 18504091 #ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v899-18417669) [CL 18504126 by arne schober in ue5-release-engine-test branch]
This commit is contained in:
@@ -221,10 +221,6 @@ private:
|
||||
TArray<TLocalQueue*, TInlineAllocator<32>> LocalQueues;
|
||||
TLocalQueue* RemovedQueue = nullptr;
|
||||
|
||||
FLocalQueueCollection(FLocalQueueCollection* Previous) : LocalQueues(Previous->LocalQueues)
|
||||
{
|
||||
}
|
||||
|
||||
FLocalQueueCollection() = default;
|
||||
|
||||
~FLocalQueueCollection()
|
||||
@@ -408,14 +404,14 @@ private:
|
||||
NumActiveWorkers[QueueType == ELocalQueueType::EBackground].fetch_add(1, std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
FLocalQueueCollection* Copy = new FLocalQueueCollection();
|
||||
while(true)
|
||||
{
|
||||
FLocalQueueCollection* Previous = Hazard.Get();
|
||||
FLocalQueueCollection* Copy = new FLocalQueueCollection(Previous);
|
||||
Copy->LocalQueues = Previous->LocalQueues;
|
||||
Copy->LocalQueues.Add(QueueToAdd);
|
||||
if (!QueueCollection.compare_exchange_strong(Previous, Copy, std::memory_order_release, std::memory_order_relaxed))
|
||||
{
|
||||
delete Copy;
|
||||
continue;
|
||||
}
|
||||
HazardsCollection.Delete(Previous);
|
||||
@@ -432,15 +428,14 @@ private:
|
||||
NumActiveWorkers[QueueType == ELocalQueueType::EBackground].fetch_sub(1, std::memory_order_relaxed);
|
||||
}
|
||||
|
||||
FLocalQueueCollection* Copy = new FLocalQueueCollection();
|
||||
while(true)
|
||||
{
|
||||
FLocalQueueCollection* Previous = Hazard.Get();
|
||||
FLocalQueueCollection* Copy = new FLocalQueueCollection(Previous);
|
||||
int NumRemoved = Copy->LocalQueues.Remove(QueueToRemove);
|
||||
checkSlow(NumRemoved == 1);
|
||||
Copy->LocalQueues = Previous->LocalQueues;
|
||||
verifySlow(Copy->LocalQueues.Remove(QueueToRemove) == 1);
|
||||
if (!QueueCollection.compare_exchange_strong(Previous, Copy, std::memory_order_release, std::memory_order_relaxed))
|
||||
{
|
||||
delete Copy;
|
||||
continue;
|
||||
}
|
||||
if (!WorkerOwned)
|
||||
|
||||
Reference in New Issue
Block a user