Add network profiler tab with network driver data sent/received

This commit is contained in:
Wojciech Figat
2022-11-30 22:05:58 +01:00
parent e4840d35d6
commit 7486bc640f
4 changed files with 100 additions and 0 deletions

View 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;
}
}
}

View File

@@ -182,6 +182,7 @@ namespace FlaxEditor.Windows.Profiler
AddMode(new CPU());
AddMode(new GPU());
AddMode(new Memory());
AddMode(new Network());
// Init view
_frameIndex = -1;

View File

@@ -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;
}

View File

@@ -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<>