Fixed 2 issues
Fixed an issue causing gap.update crashes the game(engine issue) Fixed an potential issue that on MacOS we cannot get core count and cause MaxDegreeOfParallelism will be set to 0. Now if we cant get that number we simply use a fixed 16 instead
This commit is contained in:
@@ -646,13 +646,17 @@ namespace Barotrauma
|
|||||||
var sw = new System.Diagnostics.Stopwatch();
|
var sw = new System.Diagnostics.Stopwatch();
|
||||||
sw.Start();
|
sw.Start();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Buffer lists to avoid repeated allocations
|
// Buffer lists to avoid repeated allocations
|
||||||
var hullList = Hull.HullList.ToList();
|
var hullList = Hull.HullList.ToList();
|
||||||
var structureList = Structure.WallList.ToList();
|
var structureList = Structure.WallList.ToList();
|
||||||
var gapList = Gap.GapList.ToList();
|
var gapList = Gap.GapList.ToList();
|
||||||
var itemList = Item.ItemList.ToList();
|
var itemList = Item.ItemList.ToList();
|
||||||
|
|
||||||
|
Parallel.ForEach(gapList, parallelOptions, gap =>
|
||||||
|
{
|
||||||
|
gap.ResetWaterFlowThisFrame();
|
||||||
|
});
|
||||||
|
|
||||||
// First phase: parallel updates that have no order dependencies
|
// First phase: parallel updates that have no order dependencies
|
||||||
Parallel.Invoke(parallelOptions,
|
Parallel.Invoke(parallelOptions,
|
||||||
() =>
|
() =>
|
||||||
@@ -674,10 +678,13 @@ namespace Barotrauma
|
|||||||
// Gap reset (must be done before update)
|
// Gap reset (must be done before update)
|
||||||
() =>
|
() =>
|
||||||
{
|
{
|
||||||
Parallel.ForEach(gapList, parallelOptions, gap =>
|
// Gap update (has order dependencies, keep random order but execute sequentially)
|
||||||
|
var shuffledGaps = gapList.OrderBy(g => Rand.Int(int.MaxValue)).ToList();
|
||||||
|
foreach (var gap in shuffledGaps)
|
||||||
{
|
{
|
||||||
gap.ResetWaterFlowThisFrame();
|
gap.Update(deltaTime, cam);
|
||||||
});
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
// Powered components update
|
// Powered components update
|
||||||
() =>
|
() =>
|
||||||
@@ -689,16 +696,6 @@ namespace Barotrauma
|
|||||||
#if CLIENT
|
#if CLIENT
|
||||||
// Hull Cheats need to be executed after Hull update
|
// Hull Cheats need to be executed after Hull update
|
||||||
Hull.UpdateCheats(deltaTime, cam);
|
Hull.UpdateCheats(deltaTime, cam);
|
||||||
#endif
|
|
||||||
|
|
||||||
// Gap update (has order dependencies, keep random order but execute sequentially)
|
|
||||||
var shuffledGaps = gapList.OrderBy(g => Rand.Int(int.MaxValue)).ToList();
|
|
||||||
Parallel.ForEach(gapList, parallelOptions, gap =>
|
|
||||||
{
|
|
||||||
gap.Update(deltaTime, cam);
|
|
||||||
});
|
|
||||||
|
|
||||||
#if CLIENT
|
|
||||||
sw.Stop();
|
sw.Stop();
|
||||||
GameMain.PerformanceCounter.AddElapsedTicks("Update:MapEntity:Misc", sw.ElapsedTicks);
|
GameMain.PerformanceCounter.AddElapsedTicks("Update:MapEntity:Misc", sw.ElapsedTicks);
|
||||||
sw.Restart();
|
sw.Restart();
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ namespace Barotrauma
|
|||||||
|
|
||||||
private static readonly ParallelOptions parallelOptions = new ParallelOptions
|
private static readonly ParallelOptions parallelOptions = new ParallelOptions
|
||||||
{
|
{
|
||||||
MaxDegreeOfParallelism = Environment.ProcessorCount * 2,
|
MaxDegreeOfParallelism = Environment.ProcessorCount > 0 ? Environment.ProcessorCount * 2 : 16,
|
||||||
};
|
};
|
||||||
|
|
||||||
#if CLIENT
|
#if CLIENT
|
||||||
|
|||||||
Reference in New Issue
Block a user