android_trace

Crates.ioandroid_trace
lib.rsandroid_trace
version0.1.1
sourcesrc
created_at2024-04-03 12:43:33.369321
updated_at2024-06-14 13:41:51.906566
descriptionSupport for Android NDK Tracing
homepage
repositoryhttps://github.com/linebender/android_trace
max_upload_size
id1195019
size36,041
Kaur Kuut (xStrom)

documentation

README

Android Trace

Support for Android NDK Tracing

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

⚠️ Android Trace only supports Android

Android Trace provides access to the Android NDK methods, such as ATrace_beginSection and ATrace_endSection. This enables using Android GPU Inspector for Rust code.

See tracing_android_trace for an integration of this with tracing.

Significant changes are documented in the changelog.

Quickstart

Add a dependency on Android Trace:

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

The main entry point to the library is AndroidTrace, which stores function pointers to each available NDK function:

use android_trace::AndroidTrace;
let trace = AndroidTrace::new();

// If the `is_enabled` method isn't available, we also shouldn't trace
let should_trace = trace.is_enabled().unwrap_or(false);
if should_trace {
  trace.begin_section(c"My expensive calculation");
}

// ...performing an expensive calculation

if should_trace {
  trace.end_section();
}

Android API levels

The first level of the tracing API has been available since Android API level 23, and a more flexible API was added in Android API level 29. To support devices with any Android API versions, we resolve these functions at runtime using dlsym. This runtime access is used unless we know (through features) that a certain API level is available.

Crate feature flags

The following feature flags are available:

  • api_level_23 (enabled by default): Require Android API level 23, to avoid some runtime symbol resolution
  • api_level_29: Require Android API level 29, to improve efficiency, to avoid runtime symbol resolution entirely

To support Android API versions less than 23, you should disable default features:

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

Minimum supported Rust Version (MSRV)

This version of Android Trace has been verified to compile with Rust 1.77 and later.

Future versions of Android Trace might increase the Rust version requirement. It will not be treated as a breaking change and as such can even happen with small patch releases.

Click here if compiling fails.

As time has passed, some of Android Trace's dependencies could have released versions with a higher Rust requirement. If you encounter a compilation issue due to a dependency and don't want to upgrade your Rust toolchain, then you could downgrade the dependency.

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

Community

Discussion of Android Trace development happens in the Linebender Zulip, specifically in #general > Android Tracing. All public content can be read without logging in.

Contributions are welcome by pull request. The Rust code of conduct applies.

License

Licensed under either of

at your option.

Commit count: 14

cargo fmt