On Sunday, 7 September 2014 at 02:41:53 UTC, Andrei Alexandrescu
wrote:
This looks like solid work, congratulations! Could someone
please announce this on reddit and hackernews on Monday morning?
We'd need one of the blog posts to be the entry point leading
to the others and to the code examples. Which one would be it?
Andrei
On 9/5/14, 4:06 AM, Kiith-Sa wrote:
Announcing Tharsis.prof, a frame-based profiler in D.
A profiler as-a-library that keeps track of overhead of every
individual
frame
RAII-style API for recording profile data, and range-style API
for
processing the results (with std.algorithm and the like - no
graphics
interface yet).
No GC allocations (and no heap allocations either - user must
provide
memory).
See example at:
https://github.com/kiith-sa/tharsis.prof
Use case: my game has a rare lag that occurs once per minute.
Profiler
is useless because the lag is averaged out. To solve with
Tharsis.prof:
* Instrument code (add Zones, say, for rendering batches,
physics, etc)
* Profile till the lag occurs.
* Get a range of frames (e.g. by filtering zones to get those
named
"frame")
* Sort the range
* Get the longest frame
* Filter a range of all zones to get only those with start/end
time
within the longest frame.
* Find the offending zone
* Done
Blog posts explaining what this is in detail (should be one
post, but it
ended up being too long):
http://defenestrate.eu/2014/09/05/frame_based_game_profiling.html
http://defenestrate.eu/2014/09/05/optimizing_memory_usage_of_a_frame_based_profiler.html
http://defenestrate.eu/2014/09/05/frame_based_profiling_with_d_ranges.html
GitHub: https://github.com/kiith-sa/tharsis.prof
Dub: http://code.dlang.org/packages/tharsis-prof
API docs (with examples):
http://defenestrate.eu/docs/tharsis.prof/index.html
Actually, it's already on Reddit, but on r/gamedev:
http://www.reddit.com/r/gamedev/comments/2fjgcu/framebased_game_profiling/
The first post contains easily visible links to the other two,
but it's not particularly D-focused (neither is the second). The
third post is D-focused, and it contains links to the previous
two, some code examples as well as a link to the GitHub project
with the introductory example, but these links are inline in the
text, not separate.