#计时 #调用 # #跨度 #调用 #已过时间

time-graph

始终开启的记录功能,记录函数调用时间及其对应的调用图

5 个版本

0.3.1 2023 年 8 月 28 日
0.3.0 2023 年 2 月 28 日
0.2.0 2022 年 5 月 17 日
0.1.3 2021 年 9 月 1 日
0.1.1 2021 年 3 月 5 日

#47 in 性能分析

Download history 893/week @ 2024-03-13 557/week @ 2024-03-20 477/week @ 2024-03-27 643/week @ 2024-04-03 776/week @ 2024-04-10 427/week @ 2024-04-17 347/week @ 2024-04-24 530/week @ 2024-05-01 712/week @ 2024-05-08 1401/week @ 2024-05-15 1093/week @ 2024-05-22 1126/week @ 2024-05-29 1050/week @ 2024-06-05 1371/week @ 2024-06-12 441/week @ 2024-06-19 509/week @ 2024-06-26

3,659 每月下载量

Apache-2.0/MIT

73KB
917 代码行

Time-graph

此 crate 提供了一种简单的方法来提取给定函数(或函数内的跨度)被调用的次数、每个函数/跨度的耗时以及记录函数/跨度之间的完整“调用图”。缩进的用例是从软件的实际运行中提取简单的性能数据。重要的是,此 crate 不单独考虑相同函数/跨度的不同调用,而是将所有函数/跨度的调用分组在一起。

此 crate 可以以多种格式输出计时信息,包括 graphviz 的 dot、JSON 数据和美观的 UTF8 表格。以下是使用以下命令运行示例的输出:cargo run --release --example calculation --all-features(见相应的 代码

Graphviz 的 dot: graphviz 的 dot 输出

终端表格:

╔════╦══════════════════════════════════════════════╦════════════╦═══════════╦══════════╦═════════╗
║ id ║ span name                                    ║ call count ║ called by ║ total    ║ mean    ║
╠════╬══════════════════════════════════════════════╬════════════╬═══════════╬══════════╬═════════╣
║  0calculation::run_other_5ms                   ║          1 ║         — ║   6.29ms ║  6.29ms ║
╠════╬══════════════════════════════════════════════╬════════════╬═══════════╬══════════╬═════════╣
║  2calculation::run_computation                 ║          1 ║         — ║   1.65ms ║  1.65ms ║
╠════╬══════════════════════════════════════════════╬════════════╬═══════════╬══════════╬═════════╣
║  1calculation::compute                         ║         102440.19µs ║ 44.02µs ║
╠════╬══════════════════════════════════════════════╬════════════╬═══════════╬══════════╬═════════╣
║  4calculation::{another span}1211.07µs ║ 11.07µs ║
╠════╬══════════════════════════════════════════════╬════════════╬═══════════╬══════════╬═════════╣
║  3calculation::details::bottom_5us             ║        1462, 4, 11.62ms ║ 11.10µs ║
╚════╩══════════════════════════════════════════════╩════════════╩═══════════╩══════════╩═════════╝

JSON:

{
  "timings": {
    "calculation::run_other_5ms": {
      "id": 0,
      "elapsed": "6.289708ms",
      "called": 1
    },
    "calculation::compute": {
      "id": 1,
      "elapsed": "440.188µs",
      "called": 10
    },
    "calculation::run_computation": {
      "id": 2,
      "elapsed": "1.647644ms",
      "called": 1
    },
    "calculation::details::bottom_5us": {
      "id": 3,
      "elapsed": "1.621202ms",
      "called": 146
    },
    "calculation::{another span}": {
      "id": 4,
      "elapsed": "11.074µs",
      "called": 1
    }
  },
  "calls": [
    { "caller": 1, "callee": 1, "count": 10 },
    { "caller": 3, "callee": 3, "count": 45 },
    { "caller": 3, "callee": 3, "count": 1 },
    { "caller": 4, "callee": 4, "count": 1 },
    { "caller": 3, "callee": 3, "count": 100 }
  ]
}

许可证和贡献

此 crate 在 MIT 许可证Apache 2.0 许可证 下分发。通过为此 crate 贡献,您同意在相同的许可证下分发您的贡献。

依赖项

~4–6MB
~105K SLoC