2个版本

0.1.1 2024年6月14日
0.1.0 2024年4月3日

#116 in 调试

Download history 186/week @ 2024-04-22 145/week @ 2024-04-29 156/week @ 2024-05-06 304/week @ 2024-05-13 104/week @ 2024-05-20 132/week @ 2024-05-27 396/week @ 2024-06-03 227/week @ 2024-06-10 73/week @ 2024-06-17 135/week @ 2024-06-24 13/week @ 2024-07-01 54/week @ 2024-07-08 259/week @ 2024-07-15 232/week @ 2024-07-22 118/week @ 2024-07-29 42/week @ 2024-08-05

662 每月下载次数

Apache-2.0 OR MIT

35KB
380

跟踪Android跟踪

tracing跨度写入Android NDK跟踪

Latest published version. Documentation build status. Apache 2.0 or MIT license. tracing-subscriber version
Linebender Zulip chat. GitHub Actions CI status. Dependency staleness status.

⚠️ 跟踪Android跟踪仅支持Android

跟踪Android跟踪为Android NDK跟踪提供多个tracing_subscriber::Layer,使用ATrace_beginSectionATrace_endSection。这允许在Android GPU Inspector中查看使用tracing宏创建的跨度。

请注意,目前该工具不支持tracing 事件,仅支持跨度。这种限制是由于底层Android平台API。

Screenshot showing a thread timeline including spans of a single thread.

在Android GPU Inspector中显示的跟踪跨度Vello

重大更改已在变更日志中记录。

快速入门

在Android Trace (以及tracing_subscriber)上添加依赖项。

[target.'cfg(target_os = "android")'.dependencies]
android_trace = "0.1.0"

然后,您可以将Android跟踪层添加到注册订阅者中

use tracing_subscriber::prelude::*;

fn main(){ 
  tracing_subscriber::registry()
    .with(tracing_android_trace::AndroidTraceLayer::new())
    .try_init()
    .unwrap();
}

可用的层

NDK跟踪支持三种类型的跟踪,具有不同的API级别要求。

线程匹配部分

第一个添加的API,用于跟踪线程中花费的时间,是ATrace_beginSectionATrace_endSection。它自Android API级别23以来一直可用。

AndroidTraceLayer 使用此 API,并是这个包中首选的层 - 它被用来生成上面的截图。

请注意,如果跨度进入和退出的操作交织在一起,这个层将生成不连续的跟踪。这是为了解决 NDK API 的限制。有关更多详细信息,请参阅该层的文档。

异步

此包还包括一个异步层 AndroidTraceAsyncLayer,它使用 ATrace_beginAsyncSectionATrace_endAsyncSection。建议仅将此 API 用于您的异步任务。请参阅该层的文档以了解如何做到这一点。

这是必要的,因为 Android 跟踪不允许异步任务相互关联。这意味着每个任务都将显示在跟踪中的自己的行中,这很少是有用的 UI。还建议不要将任何字段与这些跨度相关联,因为跟踪中的行不会被重用。

计数器

底层 API 也支持设置计数器值,但尚未实现。如果您需要此功能,请提交一个 issue。

Android API 级别

此包使用 android_trace 来调用 NDK 函数。因此,此包可以支持目标设备上的任何 Android API 级别,尽管默认情况下它需要 API 级别 23(对应于 2015 年发布的 Android 6,代号 Marshmallow)。

要支持低于 23 的 Android API 版本,应禁用默认功能

[target.'cfg(target_os = "android")'.dependencies]
tracing_android_trace = { version = "0.1.0", default-features = false }

包功能标志

以下功能标志可用

  • api_level_23(默认启用):需要 Android API 级别 23,以避免一些运行时符号解析
  • api_level_29:需要 Android API 级别 29,完全禁用运行时符号解析

最小支持的 Rust 版本 (MSRV)

此版本的 Tracing Android Trace 已验证可使用 Rust 1.77 及更高版本编译。

Tracing Android Trace 的未来版本可能会提高 Rust 版本要求。这不会被视为破坏性变更,因此甚至可能在小的补丁版本中发生。

如果编译失败,请点击此处。

随着时间的推移,Tracing Android Trace 的某些依赖项可能已发布具有更高 Rust 要求的版本。如果您由于依赖项遇到编译问题,并且不想升级您的 Rust 工具链,则可以降级依赖项。

# Use the problematic dependency's name and version
cargo update -p package_name --precise 0.1.1

社区

Android Trace 开发的讨论发生在 Linebender Zulip 上,特别是在 #general > Android Tracing。所有公开内容都可以在不登录的情况下阅读。

欢迎通过 pull request 贡献。适用 Rust 代码行为准则

许可证

根据您的选择许可

依赖项

~1.5MB
~21K SLoC