#debugging #macro #instant #timing #proc-macro #quickly #time

过程宏 time_this

两个宏,用于快速计时以进行调试目的

7个版本

0.2.5 2023年10月9日
0.2.4 2023年3月24日
0.1.0 2023年3月22日

#338 in 过程宏

26每月下载

Apache-2.0

9KB
61

一个过程宏和一个宏属性,用于快速计时函数。使用 std::time::Instant,因此依赖于std来工作。

#[time_this]

此宏可以用于使用 std::time::Instant 计时任何函数。每当函数被调用时,其计时信息将被传递到stdout(但在递归调用的情况下,它只会打印一次)。它可能不适用于 async fn,特别是当返回一个未来但尚未等待时,并且它肯定不适用于 const fn,即使是在非const上下文中。如果需要,您可以编写一个小包装函数,如果您需要计时一个 const fn。它将打印

  • 如果函数执行时间小于1μs,则显示ns时间。
  • 如果函数执行时间小于1ms,则显示μs时间。
  • 如果函数执行时间超过1ms但小于1s,则显示ms时间。
  • 如果函数执行时间超过一秒,则显示s时间,并保留两位小数。
use time_this::time_this;

#[time_this]
fn add(a: u32, b: u32) -> u32 {
    a + b
}

fn main() {
    let result = add(3, 5);
    // function 'add()' took 37ns
}

time!()

此宏可以用于使用 std::time::Instant 计时任何表达式。在表达式评估后,计时信息将立即传递到stdout,并将结果返回,类似于 dbg!()。类似于 time_this,它可能不适用于 async fn。它将打印计时表达式的文件/行,以及表达式本身,而不是打印函数名称。

use time_this::time;

fn add(a: u32, b: u32) -> u32 {
    a + b
}

fn main() {
    let result = time!(add(3, 5));
    // [tests/tests.rs:33] -> add(3, 5) took 28ns
}

依赖关系

~275–720KB
~17K SLoC