#elapsed #printing #elapsed-time #macro #execute #attributes #stdout

过程宏 elapsed-printer

一个非常简单的宏,用于打印执行函数所花费的时间

1个不稳定版本

0.1.0 2021年11月30日

#823 in 过程宏

MIT许可证

16KB
332

elapsed-printer

一个非常简单的宏,用于打印执行函数所花费的时间。

特性

elapsed-printer 包只包含一个宏,print_elapsed,使用Rust标准库 std::time::Duration 结构体中的 Debug 特性来检查函数(方法)执行过程中的耗时。

属性

print_elapsed 可以使用三种类型的属性。使用属性是可选的,如果没有指定,将使用默认属性。属性的顺序和引号的使用无关紧要。

(1) 打印时间的流

  1. stdout - 将输出打印到标准输出流。
  2. stderr - 将输出打印到标准错误流。
  3. both - 将输出打印到标准输出和错误流。
  • Default: stdout

(2) 时间单位

  1. auto - 以 Debug 特性中定义的格式打印输出。
  2. s - 以秒为单位打印输出。
  3. ms - 以毫秒为单位打印输出。
  4. us - 以微秒为单位打印输出。
  5. ns - 以纳秒为单位打印输出。
  • Default: auto

(3) 功能列表

  • [features_list]
    • 如果列表中的任何功能被激活,则打印输出。
    • 如果为空,则始终打印输出。
  • Default: 未指定(=始终打印)

示例

用例

use elapsed_printer::print_elapsed;

#[print_elapsed]
fn func_to_print_elapsed_default() {}

#[print_elapsed(stdout, auto)]
// Same as default
// Print always regardless of feature activation.
fn func_to_print_elapsed_same_as_default() {}

#[print_elapsed(ms, "stdout")]
// Attribute order does not matter.
// Use of quotes does not matter.
fn func_to_print_elapsed_same_with_ms() {}

#[print_elapsed("ms", stderr, [feature_1])]
// Print when using `feature_1`
fn func_to_print_elapsed_when_using_feature_1() {}

#[print_elapsed([feature_1, feature_2], ns, stderr)]
// Print when using `feature_1` or `feature_2`
fn func_to_print_elapsed_when_using_feature_1_or_feature_2() {}

struct MyStruct;
impl MyStruct {
    #[print_elapsed]
    // Can be applied to method
    pub fn method(&self) {}
}

示例代码和输出

代码

use elapsed_printer::print_elapsed;
use std::time::Duration;
use std::thread;

#[print_elapsed]
fn function_name_1() {
    thread::sleep(Duration::from_millis(10));
}
#[print_elapsed(stdout, ns)]
fn function_name_2() {
    //
}
#[print_elapsed(stdout, us)]
fn function_name_3() {
    function_name_1()
}

fn main() {
    function_name_1();
    function_name_2();
    function_name_3();
    function_name_1();
}

输出

function_name_1, 12.527014ms
function_name_2, 32ns
function_name_1, 10.070776ms
function_name_3, 10097us

依赖项

~1.5MB
~35K SLoC