Android抓取trace的几种方式

一般在做性能优化时,我们喜欢用抓取火焰图的方式,来分析相关trace调用,发现对应的性能问题;最近在做启动优化,也尝试了几种不同的方式,遂记录下来

一、几种抓取火焰图的方式

Google对火焰图的介绍

1.使用AS的Profiler

developer.android.com/studio/prof...

  • 2024.1.2版本之前的抓取界面,在这个版本抓取时间一长就会卡死,而且没办法抓取启动阶段的火焰图,界面也不是很直观
  • 新版本改进了 Android Studio Profiler 的性能,Profiler也根据CPU、内存和功耗这种任务为中心进行了重新设计,也可以在打开 Profiler 后立即从用户界面启动系统跟踪任务,以分析并改进应用程序的启动时间。

2.使用perfetto来抓取

快速开始:perfetto.dev/docs/quicks...

  • 抓取到的火焰图类似下面这种,没有堆栈,原因是因为我们没有手动加trace
  • 如果提示adb连接失败,可以把Android Studio关闭,或者重新插拔usb
  • 网页的setting大家根据自己想手机的数据选择性开启即可,但一定要记得开启Perfetto SDK -> Tracek Event
  • 有些设备看不到对应的trace信息需要在设置中开启轨迹录制:blog.csdn.net/zhangphil/a...

二、如何自定义抓取trace

1.btrace

字节开源的高性能抓取trace方案,目前3.0版本采用同步抓栈和动态插桩的方案,整体抓取的粒度和准确度都是业内较高水平,但是目前还不支持多进程,具体用法可以参考github.com/bytedance/b...

2.插桩

一般正常的场景btrace就能满足诉求,但是如果有多进程的诉求或者编译冲突等更自定义的诉求,就需要自己添加trace;这个时候就要用到插桩的方案

  • 简单的trace抓取可以利用原生的能力

Trace#beginSection(String)Trace.endSection()

三、如何分析

1.人工分析

其实人工分析就全靠个人经验,

2.AI分析

目前市面上还没出相对应的产品,但是根据前面人工分析的步骤来看,按照如下思路不难实现一个非常好用的AI分析火焰图工具:

  • 根据GUI分析当前火焰图的全局情况(GPU/CPU等)
  • 结合SQL解析线程的耗时、binder的通信等
  • 再支持把代码库/片段作为上下文知识库传入
  • 结合分析火焰图的经验,通过LLM分析当前的卡顿、耗时和优化方案
相关推荐
AC赳赳老秦28 分钟前
CSDN 技术社区数据采集:OpenClaw 抓取公开技术热帖,生成领域技术热点周报
java·大数据·前端·数据库·python·php·openclaw
结网的兔子36 分钟前
【前端开发】Web端迁移至 uni-app 及鸿蒙扩展方案对比
前端·uni-app·harmonyos
水瓶夜之1 小时前
.NET 中的新增功能系列文章——.NET SDK中的新增功能
前端·chrome·.net
笨笨狗吞噬者2 小时前
VS Code 内置浏览器打开网页
前端
SamChan902 小时前
WebSocket实现PDF翻译进度实时推送:Go后端+React前端的完整方案
前端·websocket·pdf·c#·react·机器翻译
甲维斯2 小时前
DeepSeekFlash前端依旧拉垮,而且变慢了很多!
前端·人工智能
奈斯先生Vector2 小时前
大模型 Agentic Workflow 架构解构:异构 API 调度与 Token 路由的多模态系统设计
开发语言·前端·架构·prompt·aigc·音视频
海带紫菜菠萝汤2 小时前
FFmpeg.wasm 实践:在浏览器中运行 FFmpeg 的能力边界与性能瓶颈
前端·javascript·ffmpeg·音视频·wasm
名字还没想好☜2 小时前
React 受控输入框光标跳到末尾:格式化输入时的 selection 丢失 bug 与修复
前端·javascript·react.js·bug·react·next.js
Access开发易登软件2 小时前
Access 怎么做前后端分离?用 Web API 读写 SQL Server
前端·数据库·人工智能·microsoft·excel·access