1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
//! Defines the trait that must be implemented by ISPC instrumentation callbacks structs //! and provides a default one. use std::ffi::CStr; /// Trait to be implemented to provide ISPC instrumentation functionality. /// /// The [runtime required function](http://ispc.github.io/perfguide.html#instrumenting-ispc-programs-to-understand-runtime-behavior) /// is wrapped and forwarded to your struct. pub trait Instrument { /// instrument is called when ISPC calls the `ISPCInstrument` callback. The file /// and note strings are converted `CStr` and the number of active programs is /// computed from the mask. fn instrument(&self, file: &CStr, note: &CStr, line: i32, mask: u64, active_count: u32); /// Called through `ispc::print_instrumenting_summary`, optionally log out a summary /// of performance information gathered through the `instrument` callback. fn print_summary(&self) {} } /// A simple ISPC instrumenter which will print the information passed to it out. pub struct SimpleInstrument; impl Instrument for SimpleInstrument { fn instrument(&self, file: &CStr, note: &CStr, line: i32, mask: u64, active_count: u32) { println!("SimpleInstrument:\n\tFile: {}\n\tNote: {}\ \n\tLine: {}\n\tActive: {}\nt\tMask: 0x{:x}", file.to_str().unwrap(), note.to_str().unwrap(), line, active_count, mask); } }