All,

I'm in the process of integrating a custom WPA/ETW "Event Tracing for
Windows" provider into OSVR (as an optional thing until we measure
performance impacts, etc.) with a platform-independent wrapper over it
so we can hook into other platforms' tracing stuff over time. It seems
to be very low overhead, but I have it set up so it will compile out if
we need zero overhead. (If you haven't used ETW, it's pretty slick even
without custom providers - see https://github.com/google/UIforETW )

We can report events with a lot finer granularity than even a really
fast sampling profiler, so it's a very useful tool for development. My
question is this - what events do we want to report to the tracing
provider? The way we have it set up right now, we can basically report
things that happen over time (duration with begin/end), as well as just
"marks". The goal of course is to be able to provide performance data to
a: verify there are no unexpected costs we're incurring, and b: track
down bad behavior when we find it.

Here were my thoughts:

Server side:

  * Duration: server update iteration (already done)
  * Mark: Path tree broadcast
  * Mark: Hardware detect triggered (or maybe this is a duration? or a
    separate duration for each plugin that registers a hardware detect
    callback?)
  * Possibly a duration: device update callbacks, particularly sync
    devices since those impact total latency

Client side:

  * Duration: lifetime of a client context (to verify you aren't
    creating extra that you don't need)
  * Duration: Client context update
  * Duration: lifetime of an interface object (to ensure you're holding
    on to them instead of using them as throw-away)
  * Mark: resolution of an alias - tied to lifetime of interface object
    though, so maybe not as useful
  * Mark: new data on an interface (with the interface path as data to
    be able to filter, I think - still learning the WPA gui)
  * Mark: access of state of an interface? (maybe? to see relative
    frequency of getting state vs. updates?)

And, ones last question, which I bet I know the answer to already: I'm
assuming that a git submodule for the parts of UIforETW that we're
re-using (under Apache 2.0 license) is preferred to an external
dependency, right? Any thoughts on source submodule vs. vendored
binaries? I don't really like having binaries in a git repo, but...

Ryan

-- 
Ryan A. Pavlik, Ph.D.
Senior Software Engineer
Sensics, Inc.
www.sensics.com <http://www.sensics.com>
--
OSVR-devel mailing list
osvr-de...@getosvr.org
Options and Unsubscribe: 
http://lists.getosvr.org/options.cgi/osvr-devel-getosvr.org/archive%40mail-archive.com
Archives: http://dir.gmane.org/gmane.comp.vr.osvr.devel

List homepage: http://lists.getosvr.org/listinfo.cgi/osvr-devel-getosvr.org

Reply via email to