Add CVar to disable pow3r parallel processing (#28488)

* Add CVar to disable pow3r parallel processing

* Cache CVar value

* Fix pointyhat

* Move all CVar-ing to Content.Server
This commit is contained in:
Kevin Zheng
2024-06-04 06:54:22 -08:00
committed by GitHub
parent b3cfd9b4ff
commit d5019cee96
3 changed files with 25 additions and 3 deletions

View File

@@ -3,9 +3,11 @@ using Content.Server.NodeContainer.EntitySystems;
using Content.Server.Power.Components; using Content.Server.Power.Components;
using Content.Server.Power.NodeGroups; using Content.Server.Power.NodeGroups;
using Content.Server.Power.Pow3r; using Content.Server.Power.Pow3r;
using Content.Shared.CCVar;
using Content.Shared.Power; using Content.Shared.Power;
using JetBrains.Annotations; using JetBrains.Annotations;
using Robust.Server.GameObjects; using Robust.Server.GameObjects;
using Robust.Shared.Configuration;
using Robust.Shared.Threading; using Robust.Shared.Threading;
namespace Content.Server.Power.EntitySystems namespace Content.Server.Power.EntitySystems
@@ -18,6 +20,7 @@ namespace Content.Server.Power.EntitySystems
{ {
[Dependency] private readonly AppearanceSystem _appearance = default!; [Dependency] private readonly AppearanceSystem _appearance = default!;
[Dependency] private readonly PowerNetConnectorSystem _powerNetConnector = default!; [Dependency] private readonly PowerNetConnectorSystem _powerNetConnector = default!;
[Dependency] private readonly IConfigurationManager _cfg = default!;
[Dependency] private readonly IParallelManager _parMan = default!; [Dependency] private readonly IParallelManager _parMan = default!;
[Dependency] private readonly PowerReceiverSystem _powerReceiver = default!; [Dependency] private readonly PowerReceiverSystem _powerReceiver = default!;
@@ -25,13 +28,14 @@ namespace Content.Server.Power.EntitySystems
private readonly HashSet<PowerNet> _powerNetReconnectQueue = new(); private readonly HashSet<PowerNet> _powerNetReconnectQueue = new();
private readonly HashSet<ApcNet> _apcNetReconnectQueue = new(); private readonly HashSet<ApcNet> _apcNetReconnectQueue = new();
private readonly BatteryRampPegSolver _solver = new(); private BatteryRampPegSolver _solver = new();
public override void Initialize() public override void Initialize()
{ {
base.Initialize(); base.Initialize();
UpdatesAfter.Add(typeof(NodeGroupSystem)); UpdatesAfter.Add(typeof(NodeGroupSystem));
_solver = new(_cfg.GetCVar(CCVars.DebugPow3rDisableParallel));
SubscribeLocalEvent<ApcPowerReceiverComponent, ComponentInit>(ApcPowerReceiverInit); SubscribeLocalEvent<ApcPowerReceiverComponent, ComponentInit>(ApcPowerReceiverInit);
SubscribeLocalEvent<ApcPowerReceiverComponent, ComponentShutdown>(ApcPowerReceiverShutdown); SubscribeLocalEvent<ApcPowerReceiverComponent, ComponentShutdown>(ApcPowerReceiverShutdown);
@@ -53,6 +57,13 @@ namespace Content.Server.Power.EntitySystems
SubscribeLocalEvent<PowerSupplierComponent, ComponentShutdown>(PowerSupplierShutdown); SubscribeLocalEvent<PowerSupplierComponent, ComponentShutdown>(PowerSupplierShutdown);
SubscribeLocalEvent<PowerSupplierComponent, EntityPausedEvent>(PowerSupplierPaused); SubscribeLocalEvent<PowerSupplierComponent, EntityPausedEvent>(PowerSupplierPaused);
SubscribeLocalEvent<PowerSupplierComponent, EntityUnpausedEvent>(PowerSupplierUnpaused); SubscribeLocalEvent<PowerSupplierComponent, EntityUnpausedEvent>(PowerSupplierUnpaused);
Subs.CVar(_cfg, CCVars.DebugPow3rDisableParallel, DebugPow3rDisableParallelChanged);
}
private void DebugPow3rDisableParallelChanged(bool val)
{
_solver = new(val);
} }
private void ApcPowerReceiverInit(EntityUid uid, ApcPowerReceiverComponent component, ComponentInit args) private void ApcPowerReceiverInit(EntityUid uid, ApcPowerReceiverComponent component, ComponentInit args)

View File

@@ -9,9 +9,11 @@ namespace Content.Server.Power.Pow3r
public sealed class BatteryRampPegSolver : IPowerSolver public sealed class BatteryRampPegSolver : IPowerSolver
{ {
private UpdateNetworkJob _networkJob; private UpdateNetworkJob _networkJob;
private bool _disableParallel;
public BatteryRampPegSolver() public BatteryRampPegSolver(bool disableParallel = false)
{ {
_disableParallel = disableParallel;
_networkJob = new() _networkJob = new()
{ {
Solver = this, Solver = this,
@@ -56,7 +58,10 @@ namespace Content.Server.Power.Pow3r
// suppliers + discharger) Then decide based on total layer size whether its worth parallelizing that // suppliers + discharger) Then decide based on total layer size whether its worth parallelizing that
// layer? // layer?
_networkJob.Networks = group; _networkJob.Networks = group;
parallel.ProcessNow(_networkJob, group.Count); if (_disableParallel)
parallel.ProcessSerialNow(_networkJob, group.Count);
else
parallel.ProcessNow(_networkJob, group.Count);
} }
ClearBatteries(state); ClearBatteries(state);

View File

@@ -2062,5 +2062,11 @@ namespace Content.Shared.CCVar
/// </summary> /// </summary>
public static readonly CVarDef<bool> DebugOptionVisualizerTest = public static readonly CVarDef<bool> DebugOptionVisualizerTest =
CVarDef.Create("debug.option_visualizer_test", false, CVar.CLIENTONLY); CVarDef.Create("debug.option_visualizer_test", false, CVar.CLIENTONLY);
/// <summary>
/// Set to true to disable parallel processing in the pow3r solver.
/// </summary>
public static readonly CVarDef<bool> DebugPow3rDisableParallel =
CVarDef.Create("debug.pow3r_disable_parallel", true, CVar.SERVERONLY);
} }
} }