2 releases
0.1.1 | Jun 14, 2024 |
---|---|
0.1.0 | Apr 3, 2024 |
#136 in Operating systems
627 downloads per month
Used in tracing_android_trace
26KB
262 lines
Android Trace
Support for Android NDK Tracing
⚠️ 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 resolutionapi_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
- Apache License, Version 2.0 (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Dependencies
~44KB