use super::*;
impl ProfilerHandle {
pub fn new_with_empty_entries() -> Self {
Self {
entries: Signal::create(Vec::new()),
}
}
pub fn measure<F, R>(&self, label: &str, f: F) -> R
where
F: FnOnce() -> R,
{
let started_ms: f64 = now_ms();
let result: R = f();
let ended_ms: f64 = now_ms();
let entry: ProfileEntry =
ProfileEntry::new(label.to_string(), ended_ms - started_ms, ended_ms);
let mut current: Vec<ProfileEntry> = self.get_entries().get();
current.push(entry);
self.get_entries().set(current);
result
}
pub fn begin(&self, label: &str) -> ProfilerMark {
ProfilerMark::new(label.to_string(), now_ms(), *self.get_entries())
}
pub fn clear(&self) {
self.get_entries().set(Vec::new());
}
}
impl ProfilerMark {
pub fn end(self) {
let ended_ms: f64 = now_ms();
let entry: ProfileEntry = ProfileEntry::new(
self.get_label().clone(),
ended_ms - self.get_started_ms(),
ended_ms,
);
let mut current: Vec<ProfileEntry> = self.get_entries().get();
current.push(entry);
self.get_entries().set(current);
}
}