5 个版本
0.2.6 | 2024 年 4 月 23 日 |
---|---|
0.2.5 |
|
0.1.31 |
|
#27 在 #ebpf
每月 90 次下载
27KB
308 代码行
frame-analyzer-ebpf
基于 ebpf & uprobe 跟踪 Android 应用的 frametime
- 基于 EBPF 和 UPROBE 的实现,您可能需要更高的权限(例如 root)才能正确使用此 crate
- 这**不是一个二进制 crate**,它使用一些技巧(见 源)来使其像正常 lib crate 一样工作,尽管它包含一个 EBPF 程序
- 仅支持 64 位设备和应用程序!
示例
简单的 frametime 分析器,在屏幕上打印 pid & frametime
use std::sync::{
atomic::{AtomicBool, Ordering},
Arc,
};
use anyhow::Result;
use clap::Parser;
use frame_analyzer::Analyzer;
/// Simple frame analyzer, print frametime on the screen
#[derive(Parser, Debug)]
#[command(version, about)]
struct Args {
/// The pid of the target application
#[arg(short, long)]
pid: i32,
}
fn main() -> Result<()> {
let arg = Args::parse();
let pid = arg.pid;
let mut analyzer = Analyzer::new()?;
analyzer.attach_app(pid)?;
let running = Arc::new(AtomicBool::new(true));
{
let running = running.clone();
ctrlc::set_handler(move || {
running.store(false, Ordering::Release);
})?;
}
while running.load(Ordering::Acquire) {
if let Some((_, frametime)) = analyzer.recv() {
println!("frametime: {frametime:?}");
}
}
Ok(())
}
许可证
本项目采用 GNU 通用公共许可证 v3.0 许可 - 有关详细信息,请参阅 许可证 文件。
依赖项
~7–15MB
~190K SLoC