#[derive(Debug)]
pub struct Frame<'a>(Either<&'a Domain, IdentifierInstance<'a>>);
impl<'a> Frame<'a>
{
#[inline(always)]
pub fn begin(on: Either<&'a Domain, IdentifierInstance<'a>>) -> Self
{
match on
{
Left(domain) => unsafe { __itt_frame_begin_v3(domain.constant_pointer(), null_mut()) },
Right(ref identifier_instance) => unsafe { __itt_frame_begin_v3(identifier_instance.0.constant_pointer(), &identifier_instance.1 as *const _ as *mut _) },
}
Frame(on)
}
#[inline(always)]
pub fn submit(&self, begin: Timestamp, end: Timestamp)
{
debug_assert!(begin >= end, "end can not be before begin");
match self.0
{
Left(domain) => unsafe { __itt_frame_submit_v3(domain.constant_pointer(), null_mut(), begin.0, end.0) },
Right(ref identifier_instance) => unsafe { __itt_frame_submit_v3(identifier_instance.0.constant_pointer(), &identifier_instance.1 as *const _ as *mut _, begin.0, end.0) },
}
}
#[inline(always)]
pub fn submit_ending_now(&self, begin: Timestamp)
{
self.submit(begin, Timestamp::None)
}
#[inline(always)]
pub fn end(self) -> Either<&'a Domain, IdentifierInstance<'a>>
{
let on = self.0;
match on
{
Left(domain) => unsafe { __itt_frame_end_v3(domain.constant_pointer(), null_mut()) },
Right(ref identifier_instance) => unsafe { __itt_frame_end_v3(identifier_instance.0.constant_pointer(), &identifier_instance.1 as *const _ as *mut _) },
}
on
}
}