Friday, September 13, 2013

Telemetry 2.0d released!

Telemetry 2.0d is out the door!  This is an incremental release from 2.0c with the following changes and improvements:

Run-Time

  • Bugfix: closing Telemetry after it failed to open would sometimes hang
  • Bugfix: initial timestamp wasn't offset by start TSC
  • Bugfix: iOS crash bug fixed
  • Change: iOS and Android use 16K write buffers for TMCT_FILE instead of 1MB sizes

Server

  • Bugfix: plot LOD bug fix
  • Bugfix: fixed zone search query
  • Bugfix: fixed join logic to deal with 0 string column IDs
  • Bugfix: crashing when attempting to symbolize a session that is also loading
  • Bugfix: stale file handles no longer prevent deletion of sessions

Visualizer

  • Change: selection checkbox is disabled for live sessions
  • Enhancement: huge speed up to symbolization
  • Bugfix: mem track is visible again
  • Enhancement: search results now also dumped into a separate tab
  • Bugfix: zones with same name in different threads were shadowing each other in profiler pane
  • Bugfix: properly reports when a search returns no results
  • Bugfix: cleaned up thread offset / lock count display in lock tracks
  • Bugfix: plots were still showing up as available after deletion

Misc

  • Bugfix: bug in database export Python script
  • Other: fixed misc documentation errors

Tuesday, September 3, 2013

Telemetry 2: User Defined Timers

Introduced as part of Telemetry 2.0c, user specified timers are a handy way to override Telemetry's internal timing code with your own.  This is an advanced feature and not something most customers will need, but in certain rare cases it can be helpful.  For example:
  • embedded systems with their own custom high performance timers
  • scripting systems that use their own timing mechanisms
The usage is extremely simple.  You register a timing function by calling a new API, tmStartupEx, and providing your user defined timing function.  The caveats are that:
  1. It must be thread safe
  2. It must be fast
  3. It must return a 64-bit, monotonically increasing value
  4. It must have at least microsecond accuracy
  5. It must be synchronized across processors
Anything less than microsecond accuracy can play havoc with the Telemetry back end, and tmStartupEx will error out if it detects a low resolution timer.

The final thing to watch out for is if you use accumulation zones.  The accumulation APIs are just macros that wrap calls around Telemetry's default timer function, which means that they are incompatible with a user defined one.  To get around this you'll need to write your own accumulation zone enter/leave/get start macros (just use the existing ones as templates), e.g.:

#define myGetAccumulationStart(cx) ((cx) ? myFastTime() : 0)
#define myEnterAccumulationZone(cx,z) { if (cx) (z) -= myFastTime(); }
#define myLeaveAccumulationZone(cx,z) { if (cx) (z) += myFastTime(); }

If you need any assistance with this feature, please don't hesitate to contact us!

RAD Telemetry 2.0c Released

Release 2.0c of Telemetry has just been released!  The big news is that we now have support for the Playstation VITA!

Run-Time

  • Added support for Playstation VITA
  • Installable user timers

Visualizer

  • message text is clearer
  • message text can be copied to the clipboard
  • timespans are now taller and colored based on name
  • timespans now print text inside the timespan
  • timeline section names named 'paused' are now rendered in red

Misc

  • added documentation about using tmLockName to name timespans