Another great plugin from boatbomber! A couple of bugs though, it seems not to render the lines (only the points) when the Graph Points
is over or equal to 135:
Also, the logo image at the top is hard to see in light mode:
Another great plugin from boatbomber! A couple of bugs though, it seems not to render the lines (only the points) when the Graph Points
is over or equal to 135:
Also, the logo image at the top is hard to see in light mode:
Super odd, haven’t seen this bug before. I set it to higher than 135 in the demos, it definitely works. What’s your resolution? Maybe it’s making the lines less than a pixel thick?
Solution: Join the superior team and use dark theme
It appears that it only renders points when display widget is below a certain size and the points are above 135.
Repro:
1366 x 768
Edit: It seems to depend on the size of the window, at minimum size it can only render below 77 points, and as you increase the size you can have more points. https://gyazo.com/a4d5c86608c76d4fa045959871ecbec5
Yep!
V 3.0
The old graph system naively drew the dataset as if it were the output of a simple line function. Iteration count went along the X axis, and time taken was on the Y axis. This type of graphing is handy for things where you are measuring a change over time, like CPU temperature. However, it is unhelpful if you’re trying to visualize a set of distinct data points aren’t correlated, like our function calls.
Scrapping that system, the graph now calculates and draws the distribution (aka histogram) of our data set. This is far more useful information, as it demonstrates the functions performance, consistency, and stability in a clear and intuitive way.
The graph also draws a vertical line for the 50th percentile, so that you can quickly pinpoint which function performs better, even if their distributions are overlapping.
The Baseline Zero setting now applies to the X axis instead of the Y axis, but it’s the same concept and usage as before.
In terms of UI changes, the X axis is now labeled clearly, since those values can change and are now actually relevant in this new format. The points and lines are now a set size, so your resolution shouldn’t cause any issues like mentioned earlier in this thread. Also, the label that shows up when you hover on a point will no longer clip out of frame. I also made some minor changes to light theme.
(As always, please don’t hesitate to DM me if you find a bug or mathematical error! This was a massive change that I did in a single sitting and some sneaky mistake could have slipped past me.)
V 3.1
Graph Outliers setting
Setting descriptions
plus some other things
When graphing a distribution, it’s generally more useful if you drop the statistical outliers from the graph. If a single call happened to take 50x longer, we don’t want to zoom the graph out to see that one call, because then our relevant data points are too small to analyze visually! By default, the plugin drops those.
However, I realize that could be counter-productive in certain use case. To empower those users, I’ve introduced another setting, Graph Outliers which toggles whether the plugin should graph the outliers or not.
The settings tab will now display a short desc when you hover over a setting, so you that you know what it does without having to tinker and guess (or read my posts).
The summary tab used to show more decimal places than it actually measured (it showed below a single microsecond), leaving trailing zeros all over. That was dumb, so I’ve fixed that.
I also fixed a couple minor mistakes that I noticed in the UI.
Enjoy!
V 3.2
Added grid lines to the graph to help you visually line up the points on the axis.
V 3.3
Added a visibility toggle to each function so that you can test a lot of functions at once without cluttering your graph.
Also, restructured the GUI internals so that this feature is possible.
In my quest to make the microprofiler obsolete… I’m working on making this plugin have a microprofiler tool built in. Yup. Don’t know if I’ll succeed, but I’m trying!
I have a prototype that works but needs more polish and testing.
(Look at what’s under the graph here )
Setting a line to invisible hid the GUI, but didn’t actually make it recalculate the graph bounds.
I’ve redone visibility so that if a line is not visible, the graph will totally ignore that line and zoom in on the ones that are visible.
It’s also more efficient now cuz it doesn’t waste time calculating invisible lines.
Much better.
This plugin is absolutely brilliant mate. Total quality.
Not gonna deploy on a Friday, but I do think it’s ready (will publish Sunday night, most likely.)
I’ve got the profiler working! Now we have a histogram and a flame chart! Pretty freaking sweet.
With this, we no longer need the microprofiler or any other benchmarker tools!
V 4.0
Microprofiler? I barely know her!
(Image displays the profiler breakdown of table.create()
vs {}
, showing that table.create()
takes much longer to initialize the array but can then populate the array far faster, making the function the faster overall method.)
This update adds a Profiler to the plugin, so you can break your function into individually timed sections for more in depth benchmarking.
When you don’t specifically profile your functions, it still acts as a useful bar graph similar to Validark’s popular benchmark module. When you use the profiler, that bar graph doubles as a flame chart to give you the detailed breakdown of your function. Hovering over a chunk gives you the full statistics breakdown for that particular section.
Also remade the demo/tutorial video to make sure it’s got all the latest features.
I forgot a break
in one of my loops, which caused the displayed error message to be the wrong one if your tests are faulty.
If one of your functions fail due to an error on your end, it now displays your error for you.
This bug made it incorrectly tell you that you forgot a Profiler.End()
, sorry about that!
For people who use light theme (yes I know shame on me), would it be possible to fix the text colors?
Black text on dark background is super hard to read
Whoops! Thanks for catching that. I never use light theme so I didn’t catch that, thanks!
I’m going to use light theme for a while and try to improve in all areas.
V 4.1
After a lot of testing, tweaking, and just plain trying to use it-
cc @zeuxcg
V 4.2
Feature requested by @zeuxcg
Users of this plugin often deal with timings below a single millisecond, which means that reading the results has a lot of annoying decimals to keep track of.
This updates makes it automatically pick between microseconds and milliseconds based on your data set, so that all the displayed measurements will be easier to read and remember. It will also switch the amount of digits shown so you don’t have “000” at the end of every microsecond measurement.
Oh it’s a little expensive than usual. but god I bought it
Looking forward for more great creations!
This plugin is marketed toward power users and advanced developers, so I priced it with that in mind. To that target audience, the plugin costs less than $3 USD and gives them powerful tools to help them optimize their game to earn a lot more than 3 bucks.
Thanks!
V 5.0
End Condition Setting - Run for a set amount of time OR for a set amount of function calls.
(and other minor improvements)
This feature was requested by @zeuxcg and @pobammer quite a while ago. Sorry for the long delay!
Up until now, the benchmark tests would call each function X amount of times. This allows you to gather precisely sized datasets. However, some users would rather run the benchmark for X seconds, and gather an arbitrary number of datapoints. This is generally more user-friendly since all tests will always take the set time, so slow functions won’t make your tests take longer. Slow function tests will just have fewer datapoints in order to stay within your time constraint.
Therefore, I’ve added a setting to allow you to pick which test behavior you prefer!
One behavioral note for Run Time: The test might take a few milliseconds above your actual set time, because I make sure each function is run the same amount of times (so the test might go overtime to call the next functions) in order to ensure a balanced and accurate result.
V 5.1
Improved protection behavior - Mark test modules with “.bench” suffix in their name, rather than a CollectionService tag.
This makes it much easier to use this plugin with Rojo and GitHub, while still protecting you from accidentally running an unintended module and causing issues.
Requested by @Kampfkarren