mirror of
https://github.com/gitui-org/gitui
synced 2026-05-24 01:18:21 +00:00
68 lines
1.2 KiB
Rust
68 lines
1.2 KiB
Rust
//! simple macro to insert a scope based runtime measure that logs the result
|
|
|
|
#![forbid(unsafe_code)]
|
|
#![deny(mismatched_lifetime_syntaxes, unused_imports)]
|
|
#![deny(clippy::unwrap_used)]
|
|
#![deny(clippy::perf)]
|
|
|
|
use std::time::Instant;
|
|
|
|
pub struct ScopeTimeLog<'a> {
|
|
title: &'a str,
|
|
mod_path: &'a str,
|
|
file: &'a str,
|
|
line: u32,
|
|
time: Instant,
|
|
}
|
|
|
|
impl<'a> ScopeTimeLog<'a> {
|
|
pub fn new(
|
|
mod_path: &'a str,
|
|
title: &'a str,
|
|
file: &'a str,
|
|
line: u32,
|
|
) -> Self {
|
|
Self {
|
|
title,
|
|
mod_path,
|
|
file,
|
|
line,
|
|
time: Instant::now(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl Drop for ScopeTimeLog<'_> {
|
|
fn drop(&mut self) {
|
|
log::trace!(
|
|
"scopetime: {:?} ms [{}::{}] @{}:{}",
|
|
self.time.elapsed().as_millis(),
|
|
self.mod_path,
|
|
self.title,
|
|
self.file,
|
|
self.line,
|
|
);
|
|
}
|
|
}
|
|
|
|
/// measures runtime of scope and prints it into log
|
|
#[cfg(feature = "enabled")]
|
|
#[macro_export]
|
|
macro_rules! scope_time {
|
|
($target:literal) => {
|
|
#[allow(unused_variables)]
|
|
let time = $crate::ScopeTimeLog::new(
|
|
module_path!(),
|
|
$target,
|
|
file!(),
|
|
line!(),
|
|
);
|
|
};
|
|
}
|
|
|
|
#[doc(hidden)]
|
|
#[cfg(not(feature = "enabled"))]
|
|
#[macro_export]
|
|
macro_rules! scope_time {
|
|
($target:literal) => {};
|
|
}
|