当前位置: 首页 > news >正文

Android Perfetto 学习

1、如何抓取性能日志

方式1、通过手机里的System Tracing抓取
1、点击Settings->System->Developer options->System Tracing->Record trace 打开

2、操作完成后,点击Settings->System->Developer options->System Tracing->Record trace 关闭

3、弹出“trace saved”的通知后,可在手机目录/data/local/traces中获取抓取的perfetto-trace文件。

4、通过命令adb pull /data/local/traces将对应的systrace保存到本地。

2、如何分析性能日志

Perfetto网站

https://ui.perfetto.dev/

参考Android开发文档

https://developer.android.com/topic/performance/vitals/launch-time?hl=zh-cn

2.1 Trace文件介绍

2.1.1 CPU Info信息

        可以看到当前CPU负载情况,以及CPU任务工作栈

2.1.2 进程信息介绍

        查看对应APP进程,第一排表示进程相关状态,第二排表示主线程执行函数堆栈

2.2 进程相关状态

2.2.1 绿色 : 运行中(Running)

        表示进程正在CPU上运行

2.2.2 青色: 可运行(Runnable)

        线程可以运行但当前没有安排,在等待 cpu 调度

2.2.3 白色 : 休眠中(Sleeping)

        线程没有工作要做,可能是因为线程在互斥锁上被阻塞,也可能是其他原因。

尝试在APP代码中添加 sleep操作。

        会出现AcitivityStart函数执行有5S的休眠

        正常情况下AcitivityStart不会休眠。

2.2.4  橘色 : 不可中断的睡眠态 (Uninterruptible Sleep - IO Block)

        由于IO存储,导致现成处于休眠太,如果时间比较长,会造成卡顿问题

2.2.5 棕色 : 不可中断的睡眠态( Uninterruptible Sleep (non-IO))

3、Perfetto 工具的使用     

         可使用固定图标固定到最顶端

        添加删除时间轴

        

        其中代码栈中的函数打印是因为该函数添加了Trace Log打印,如果需要单独调试,可以自行添加Trace Log用于分析

        检索相关机制

相关文章:

  • 行情叠加量化,占据市场先机!
  • 嵌入式C语言自我修养:GNU C编译器扩展语法精讲
  • 那年我双手插兜,使用IPv6+DDNS动态域名解析访问NAS
  • MySQL数据库(基础)
  • 数据库 - MySQL的事务
  • STL之vector篇(下)(手撕底层代码,从零实现vector的常用指令,深度剖析并优化其核心代码)
  • 目标检测——VOC2007数据集
  • redis哨兵启动出现 +sdown master mymaster 192.168.x.x
  • 【数据结构】排序算法---桶排序
  • 2024-2025华为ICT大赛报名|赛前辅导|学习资料
  • Fyne ( go跨平台GUI )中文文档-入门(一)
  • Latex和Vscode安装和配置
  • sentinel-dashboard数据 redis 持久化
  • 在WPF中自定义控件时如何选择基类
  • OpenCV特征检测(11)从一组点中检测直线的函数
  • [deviceone开发]-do_Webview的基本示例
  • 230. Kth Smallest Element in a BST
  • Apache Zeppelin在Apache Trafodion上的可视化
  • axios 和 cookie 的那些事
  • Brief introduction of how to 'Call, Apply and Bind'
  • ESLint简单操作
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • Logstash 参考指南(目录)
  • Python 基础起步 (十) 什么叫函数?
  • Python3爬取英雄联盟英雄皮肤大图
  • Python利用正则抓取网页内容保存到本地
  • SegmentFault 2015 Top Rank
  • vue总结
  • Wamp集成环境 添加PHP的新版本
  • 闭包--闭包之tab栏切换(四)
  • 动态魔术使用DBMS_SQL
  • 服务器从安装到部署全过程(二)
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 力扣(LeetCode)22
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 通过npm或yarn自动生成vue组件
  • 如何在招聘中考核.NET架构师
  • ​​​​​​​​​​​​​​Γ函数
  • ​iOS安全加固方法及实现
  • # 数论-逆元
  • #我与Java虚拟机的故事#连载16:打开Java世界大门的钥匙
  • (27)4.8 习题课
  • (pycharm)安装python库函数Matplotlib步骤
  • (博弈 sg入门)kiki's game -- hdu -- 2147
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (每日一问)设计模式:设计模式的原则与分类——如何提升代码质量?
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (转)LINQ之路
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)清华学霸演讲稿:永远不要说你已经尽力了
  • .net Application的目录
  • .Net Memory Profiler的使用举例
  • .NET 发展历程