Add network profiler tab with network driver data sent/received
This commit is contained in:
87
Source/Editor/Windows/Profiler/Network.cs
Normal file
87
Source/Editor/Windows/Profiler/Network.cs
Normal file
@@ -0,0 +1,87 @@
|
||||
// Copyright (c) 2012-2022 Wojciech Figat. All rights reserved.
|
||||
|
||||
using FlaxEngine;
|
||||
using FlaxEngine.GUI;
|
||||
|
||||
namespace FlaxEditor.Windows.Profiler
|
||||
{
|
||||
/// <summary>
|
||||
/// The network profiling mode.
|
||||
/// </summary>
|
||||
/// <seealso cref="FlaxEditor.Windows.Profiler.ProfilerMode" />
|
||||
internal sealed class Network : ProfilerMode
|
||||
{
|
||||
private readonly SingleChart _dataSentChart;
|
||||
private readonly SingleChart _dataReceivedChart;
|
||||
private FlaxEngine.Networking.NetworkDriverStats _prevStats;
|
||||
|
||||
public Network()
|
||||
: base("Network")
|
||||
{
|
||||
// Layout
|
||||
var panel = new Panel(ScrollBars.Vertical)
|
||||
{
|
||||
AnchorPreset = AnchorPresets.StretchAll,
|
||||
Offsets = Margin.Zero,
|
||||
Parent = this,
|
||||
};
|
||||
var layout = new VerticalPanel
|
||||
{
|
||||
AnchorPreset = AnchorPresets.HorizontalStretchTop,
|
||||
Offsets = Margin.Zero,
|
||||
IsScrollable = true,
|
||||
Parent = panel,
|
||||
};
|
||||
|
||||
// Charts
|
||||
_dataSentChart = new SingleChart
|
||||
{
|
||||
Title = "Data Sent",
|
||||
FormatSample = FormatSampleBytes,
|
||||
Parent = layout,
|
||||
};
|
||||
_dataSentChart.SelectedSampleChanged += OnSelectedSampleChanged;
|
||||
_dataReceivedChart = new SingleChart
|
||||
{
|
||||
Title = "Data Received",
|
||||
FormatSample = FormatSampleBytes,
|
||||
Parent = layout,
|
||||
};
|
||||
_dataReceivedChart.SelectedSampleChanged += OnSelectedSampleChanged;
|
||||
}
|
||||
|
||||
private static string FormatSampleBytes(float v)
|
||||
{
|
||||
return (uint)v + " bytes";
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Clear()
|
||||
{
|
||||
_dataSentChart.Clear();
|
||||
_dataReceivedChart.Clear();
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void Update(ref SharedUpdateData sharedData)
|
||||
{
|
||||
var peer = FlaxEngine.Networking.NetworkManager.Peer;
|
||||
if (peer == null)
|
||||
{
|
||||
_prevStats = new FlaxEngine.Networking.NetworkDriverStats();
|
||||
return;
|
||||
}
|
||||
var stats = peer.NetworkDriver.GetStats();
|
||||
_dataSentChart.AddSample(Mathf.Max((long)stats.TotalDataSent - (long)_prevStats.TotalDataSent, 0));
|
||||
_dataReceivedChart.AddSample(Mathf.Max((long)stats.TotalDataReceived - (long)_prevStats.TotalDataReceived, 0));
|
||||
_prevStats = stats;
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public override void UpdateView(int selectedFrame, bool showOnlyLastUpdateEvents)
|
||||
{
|
||||
_dataSentChart.SelectedSampleIndex = selectedFrame;
|
||||
_dataReceivedChart.SelectedSampleIndex = selectedFrame;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -182,6 +182,7 @@ namespace FlaxEditor.Windows.Profiler
|
||||
AddMode(new CPU());
|
||||
AddMode(new GPU());
|
||||
AddMode(new Memory());
|
||||
AddMode(new Network());
|
||||
|
||||
// Init view
|
||||
_frameIndex = -1;
|
||||
|
||||
@@ -254,6 +254,8 @@ NetworkDriverStats ENetDriver::GetStats(NetworkConnection target)
|
||||
if (peer)
|
||||
{
|
||||
stats.RTT = (float)peer->roundTripTime;
|
||||
stats.TotalDataSent = peer->totalDataSent;
|
||||
stats.TotalDataReceived = peer->totalDataReceived;
|
||||
}
|
||||
return stats;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,16 @@ API_STRUCT(Namespace="FlaxEngine.Networking") struct FLAXENGINE_API NetworkDrive
|
||||
/// The mean round trip time (RTT), in milliseconds, between sending a reliable packet and receiving its acknowledgement. Also known as ping time.
|
||||
/// </summary>
|
||||
API_FIELD() float RTT = 0.0f;
|
||||
|
||||
/// <summary>
|
||||
/// Total amount of data bytes sent by this client.
|
||||
/// </summary>
|
||||
API_FIELD() uint32 TotalDataSent = 0;
|
||||
|
||||
/// <summary>
|
||||
/// Total amount of data bytes received by this client.
|
||||
/// </summary>
|
||||
API_FIELD() uint32 TotalDataReceived = 0;
|
||||
};
|
||||
|
||||
template<>
|
||||
|
||||
Reference in New Issue
Block a user