Table of Contents
Introduction
Packet Profiler is a plugin which allows you to accurately read remote data sent by different contexts. Unlike the vague and uninformative Stats windows which only show the current KB/s receive and send rates, this plugin allows you to accurately see packet data each frame, along with precise byte size information.
Functionality
Packet Profiler was made with design slightly similar to the MicroProfiler, which is Roblox’s performance debugging tool. You can pause the profiler either by manually clicking the button, or selecting any frame.
When left-clicking a frame, the contents of that frame will be shown in the Packet Chart window, in the form of a pie chart along with columns of data to the right:
You can open up each column and see the exact remote data which was sent. The data shows how much bytes each field takes so that you can more easily determine what takes up most size.
Since data sizes vary for different games, you can adjust the scale of each frame through the KB scale on the topbar, like so:
In-game Profiling
Sometimes, simply profiling in studio may not be enough. As such, you can use this plugin in-game! Simply grab the latest release .rbxm
file and place it inside StarterPlayerScripts
. You can then open the UI through Ctrl + F5
, and pause/unpause through Ctrl + P
.
https://github.com/PysephWasntAvailable/PacketProfiler/releases/
Alternatively, you can install the in-game profiler through Wally:
https://wally.run/package/pysephwasntavailable/packetprofiler
For ease of use, you can resize the in-game plugin just the same:
Support for remote compression libraries
Remote compression libraries have become very popular – one of their hallmark features being the compression of multiple remote calls into one. By default this would make the remote data harder to read, as multiple remotes are displayed in one. As such, packet profiler allows the libraries to provide the packet profiler with the decompressed remote names and packet data.
To do so, add a ModuleScript named RemoteName.profiler
anywhere in ReplicatedStorage. Its return must be a function, with the return type of { { Name: string, Arguments: {any} } }?
. The ModuleScript is called by the packet profiler, and receives the remote object as its first argument, and the first argument sent from the remote as the second.
WARNING: The ModuleScript is called for all remotes – if the remote is not from your compression library, you should disregard all the data and simply return nil
.