Files
survival-game/Assets/Mirror/Components/Profiling/NetworkBandwidthGraph.cs
2025-06-16 13:15:42 +00:00

86 lines
2.3 KiB
C#

using System;
using UnityEngine;
namespace Mirror
{
public class NetworkBandwidthGraph : BaseUIGraph
{
int dataIn;
int dataOut;
void Start()
{
// Ordering, Awake happens before NetworkDiagnostics reset
NetworkDiagnostics.InMessageEvent += OnReceive;
NetworkDiagnostics.OutMessageEvent += OnSend;
}
void OnEnable()
{
// If we've been inactive, clear counter
dataIn = 0;
dataOut = 0;
}
void OnDestroy()
{
NetworkDiagnostics.InMessageEvent -= OnReceive;
NetworkDiagnostics.OutMessageEvent -= OnSend;
}
void OnSend(NetworkDiagnostics.MessageInfo obj) => dataOut += obj.bytes;
void OnReceive(NetworkDiagnostics.MessageInfo obj) => dataIn += obj.bytes;
protected override void CollectData(int category, out float value, out GraphAggregationMode mode)
{
mode = GraphAggregationMode.PerSecond;
switch (category)
{
case 0:
value = dataIn;
dataIn = 0;
break;
case 1:
value = dataOut;
dataOut = 0;
break;
default:
throw new ArgumentOutOfRangeException($"{category} is not valid.");
}
}
static readonly string[] Units = new[] { "B/s", "KiB/s", "MiB/s" };
const float UnitScale = 1024;
protected override string FormatValue(float value)
{
string selectedUnit = null;
for (int i = 0; i < Units.Length; i++)
{
string unit = Units[i];
selectedUnit = unit;
if (i > 0)
value /= UnitScale;
if (value < UnitScale)
break;
}
return $"{value:N0} {selectedUnit}";
}
protected override void OnValidate()
{
base.OnValidate();
if (CategoryColors.Length != 2)
CategoryColors = new[]
{
Color.red, // min
Color.green // max
};
IsStacked = false;
}
}
}