...
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
namespace Fusion.Statistics {
|
||||
using System;
|
||||
using UnityEngine;
|
||||
using UnityEngine.UI;
|
||||
|
||||
[Flags]
|
||||
internal enum NetworkObjectStat{
|
||||
InBandwidth = 1 << 0,
|
||||
OutBandwidth = 1 << 1,
|
||||
InPackets = 1 << 2,
|
||||
OutPackets = 1 << 3,
|
||||
AverageInPacketSize = 1 << 4,
|
||||
AverageOutPacketSize = 1 << 5
|
||||
}
|
||||
|
||||
public class FusionNetworkObjectStatsGraph : FusionStatsGraphBase {
|
||||
[SerializeField] private Text _description;
|
||||
private NetworkId _id;
|
||||
private NetworkObjectStat _stat;
|
||||
private FusionNetworkObjectStatsGraphCombine _combineParentGraph;
|
||||
|
||||
public override void UpdateGraph(NetworkRunner runner, FusionStatisticsManager statisticsManager, ref DateTime now) {
|
||||
AddValueToBuffer(GetNetworkObjectStatValue(statisticsManager), ref now);
|
||||
}
|
||||
|
||||
private float GetNetworkObjectStatValue(FusionStatisticsManager statisticsManager) {
|
||||
if (statisticsManager.ObjectStatisticsManager.GetNetworkObjectStatistics(_id, out var snapshot)) {
|
||||
switch (_stat) {
|
||||
case NetworkObjectStat.InBandwidth:
|
||||
return snapshot.InBandwidth;
|
||||
case NetworkObjectStat.OutBandwidth:
|
||||
return snapshot.OutBandwidth;
|
||||
case NetworkObjectStat.InPackets:
|
||||
return snapshot.InPackets;
|
||||
case NetworkObjectStat.OutPackets:
|
||||
return snapshot.OutPackets;
|
||||
case NetworkObjectStat.AverageInPacketSize:
|
||||
return snapshot.InBandwidth / Mathf.Max(1, snapshot.InPackets);
|
||||
case NetworkObjectStat.AverageOutPacketSize:
|
||||
return snapshot.OutBandwidth / Mathf.Max(1, snapshot.OutPackets);
|
||||
}
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
internal void SetupNetworkObjectStat(NetworkId id, NetworkObjectStat stat) {
|
||||
_id = id;
|
||||
_stat = stat;
|
||||
_description.text = _stat.ToString();
|
||||
|
||||
string valueTextFormat;
|
||||
float threshold1 = 0, threshold2 = 0, threshold3 = 0;
|
||||
float valueTextMultiplier = 1;
|
||||
bool ignoreZeroOnAverage = false, ignoreZeroOnBuffer = false;
|
||||
int accumulateTimeMs = 0;
|
||||
|
||||
switch (stat) {
|
||||
|
||||
case NetworkObjectStat.InBandwidth:
|
||||
case NetworkObjectStat.OutBandwidth:
|
||||
valueTextFormat = "{0:0} B";
|
||||
accumulateTimeMs = 1000;
|
||||
_description.text += " (Per second)";
|
||||
break;
|
||||
case NetworkObjectStat.AverageInPacketSize:
|
||||
case NetworkObjectStat.AverageOutPacketSize:
|
||||
valueTextFormat = "{0:0} B";
|
||||
ignoreZeroOnAverage = true;
|
||||
ignoreZeroOnBuffer = true;
|
||||
break;
|
||||
|
||||
case NetworkObjectStat.InPackets:
|
||||
case NetworkObjectStat.OutPackets:
|
||||
valueTextFormat = "{0:0}";
|
||||
accumulateTimeMs = 1000;
|
||||
_description.text += " (Per second)";
|
||||
break;
|
||||
|
||||
default:
|
||||
valueTextFormat = "{0:0}";
|
||||
break;
|
||||
}
|
||||
|
||||
SetValueTextFormat(valueTextFormat);
|
||||
SetValueTextMultiplier(valueTextMultiplier);
|
||||
SetThresholds(threshold1, threshold2, threshold3);
|
||||
SetIgnoreZeroValues(ignoreZeroOnAverage, ignoreZeroOnBuffer);
|
||||
Initialize(accumulateTimeMs);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user