批处理实现:自动抓取perfetto日志 自动导出到当前文件夹 自动打开分析页面

序言

最近在研究性能问题需要抓取trace文件。于是写了个脚本

使用

双击运行批处理文件,可以开始记录trace。而且以当前文件夹下面的。config.pbtx 作为配置文件。
在这里插入图片描述
(pbtx就是一个json文件。配置了需要抓取那些参数,可以通过https://ui.perfetto.dev/中的Record new trace (左侧)的菜单,在右侧设置最近要记录什么内容。来生成配置文件。可以参考
Android Perfetto 系列 2:Perfetto Trace 抓取
在这里插入图片描述
最后的文件在Cmdline instructions菜单中显示。
在这里插入图片描述
右边下方的内容拷贝到。当前目录,并命名为config.pbtx
记得把配置中的时间去除,这样可以一直记录。
在这里插入图片描述
在当前文件夹下新建批处理

@echo off
chcp 65001 >nul@echo off
setlocal enabledelayedexpansion:: 获取当前目录
echo 当前目录: %cd%:: 使用 PowerShell 获取时间戳
for /f "delims=" %%a in ('powershell.exe -Command "Get-Date -Format yyyyMMdd_HHmmss"') do set timestamp=%%a
echo 时间戳: %timestamp%:: 删除旧 trace 文件
adb shell rm -rf /data/misc/perfetto-traces/trace.perfetto
timeout /t 1 >nul:: 推送配置文件
adb push config.pbtx /data/misc/perfetto-configs/config.pbtx
timeout /t 1 >nul:: 开始录制
echo 开始记录 trace,请按 Ctrl+C 结束录制...
adb shell -tt perfetto --txt -c /data/misc/perfetto-configs/config.pbtx -o /data/misc/perfetto-traces/trace.perfetto:: 导出 trace 到当前目录
adb pull /data/misc/perfetto-traces/trace.perfetto .\trace_%timestamp%.perfettoif exist trace_%timestamp%.perfetto (echo ✅ 文件已成功导出到当前目录:echo     trace_%timestamp%.perfettoecho.echo 🔗 正在打开 Perfetto 官方网站,请稍后手动上传 trace 文件。echo     1. 浏览器将自动打开 Perfetto UI。echo     2. 点击左上角 ^> Open trace file^> 按钮。echo     3. 选择刚刚保存的 trace_%timestamp%.perfetto 文件。echo.:: 打开默认浏览器访问 Perfetto UIstart "" https://ui.perfetto.dev/) else (echo ❌ 文件未找到,请检查设备路径或配置。
)pause

双击bat运行,要结束录制的话,只需要按下 Ctrl+C 就可以了。
在这里插入图片描述
最后文件会自动保存到当前文件夹下,以时间命名。
在这里插入图片描述
最后还会自动打开分析网站。只需要把日志文件拖入浏览器就可以打开。
在这里插入图片描述

附带配置

这是我的配置文件,可以记录logcat

buffers {size_kb: 65536fill_policy: DISCARD
}
buffers {size_kb: 4096fill_policy: DISCARD
}
data_sources {config {name: "linux.ftrace"ftrace_config {ftrace_events: "sched/sched_process_exit"ftrace_events: "sched/sched_process_free"ftrace_events: "task/task_newtask"ftrace_events: "task/task_rename"ftrace_events: "binder/*"ftrace_events: "block/*"ftrace_events: "clk/*"ftrace_events: "devfreq/*"ftrace_events: "ext4/*"ftrace_events: "f2fs/*"ftrace_events: "i2c/*"ftrace_events: "irq/*"ftrace_events: "kmem/*"ftrace_events: "memory_bus/*"ftrace_events: "mmc/*"ftrace_events: "oom/*"ftrace_events: "power/*"ftrace_events: "regulator/*"ftrace_events: "sched/*"ftrace_events: "sync/*"ftrace_events: "task/*"ftrace_events: "vmscan/*"ftrace_events: "fastrpc/*"ftrace_events: "sched/sched_switch"ftrace_events: "power/suspend_resume"ftrace_events: "sched/sched_blocked_reason"ftrace_events: "sched/sched_wakeup"ftrace_events: "sched/sched_wakeup_new"ftrace_events: "sched/sched_waking"ftrace_events: "sched/sched_process_exit"ftrace_events: "sched/sched_process_free"ftrace_events: "task/task_newtask"ftrace_events: "task/task_rename"ftrace_events: "power/cpu_frequency"ftrace_events: "power/cpu_idle"ftrace_events: "power/suspend_resume"ftrace_events: "raw_syscalls/sys_enter"ftrace_events: "raw_syscalls/sys_exit"ftrace_events: "power/gpu_frequency"ftrace_events: "gpu_mem/gpu_mem_total"ftrace_events: "power/gpu_work_period"ftrace_events: "ftrace/print"atrace_categories: "adb"atrace_categories: "aidl"atrace_categories: "am"atrace_categories: "audio"atrace_categories: "binder_driver"atrace_categories: "binder_lock"atrace_categories: "bionic"atrace_categories: "camera"atrace_categories: "dalvik"atrace_categories: "database"atrace_categories: "gfx"atrace_categories: "hal"atrace_categories: "input"atrace_categories: "network"atrace_categories: "nnapi"atrace_categories: "pm"atrace_categories: "power"atrace_categories: "res"atrace_categories: "rro"atrace_categories: "rs"atrace_categories: "sm"atrace_categories: "ss"atrace_categories: "vibrator"atrace_categories: "video"atrace_categories: "view"atrace_categories: "webview"atrace_categories: "wm"symbolize_ksyms: truedisable_generic_events: true}}
}
data_sources {config {name: "linux.process_stats"process_stats_config {scan_all_processes_on_start: true}}
}
data_sources {config {name: "linux.sys_stats"sys_stats_config {meminfo_period_ms: 5000stat_period_ms: 250stat_counters: STAT_CPU_TIMESstat_counters: STAT_FORK_COUNTcpufreq_period_ms: 250}}
}
data_sources {config {name: "android.gpu.memory"}
}
data_sources {config {name: "android.java_hprof"java_hprof_config {}}
}
data_sources {config {name: "android.log"android_log_config {log_ids: LID_CRASHlog_ids: LID_DEFAULTlog_ids: LID_EVENTSlog_ids: LID_KERNELlog_ids: LID_RADIOlog_ids: LID_SECURITYlog_ids: LID_STATSlog_ids: LID_SYSTEM}}
}
data_sources {config {name: "android.surfaceflinger.frametimeline"}
}
data_sources {config {name: "android.game_interventions"}
}
data_sources {config {name: "android.network_packets"network_packet_trace_config {poll_ms: 1000}}
}
data_sources {config {name: "android.packages_list"}
}
data_sources {config {name: "android.statsd"statsd_tracing_config {push_atom_id: ATOM_PROCESS_STATE_CHANGEDpush_atom_id: ATOM_BLE_SCAN_RESULT_RECEIVEDpush_atom_id: ATOM_SENSOR_STATE_CHANGEDpush_atom_id: ATOM_GPS_SCAN_STATE_CHANGED}}
}
data_sources {config {name: "linux.perf"perf_event_config {timebase {frequency: 100timestamp_clock: PERF_CLOCK_MONOTONIC}callstack_sampling {}}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86969.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

​​Promise代码理解

1.事件循环与 Promise 执行顺序 案例 1:基础 Promise 同步异步区分 console.log(1); new Promise(resolve > {console.log(2);resolve();console.log(3); }).then(() > console.log(4)); console.log(5); 输出顺序:1,2,3…

57、原生组件注入-【源码分析】DispatcherServlet注入原理

57、原生组件注入DispatcherServlet注入原理 #### 继承关系 - DispatcherServlet继承自FrameworkServlet,而FrameworkServlet继承自HttpServletBean,最终HttpServletBean继承自HttpServlet。 - DispatcherServlet实现了ApplicationContextAware接口。 …

【动手学深度学习】3.5. 图像分类数据集

目录 3.5. 图像分类数据集1)读取数据集2)读取小批量3)整合所有组件4)小结 . 3.5. 图像分类数据集 我们将使用Fashion-MNIST数据集,作为图像分类数据集。 %matplotlib inline import torch import torchvision from …

Python的格式化输入输出

# Python 的格式化输出和格式化输入## 格式化输出Python 提供了多种字符串格式化的方法:### 1. % 格式化(旧式格式化)python name "Alice" age 25 print("Name: %s, Age: %d" % (name, age)) # 输出: Name: Alice, Age…

day65—回溯—单词搜索(LeetCode-79)

题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相…

iOS安全和逆向系列教程 第19篇:ARM64汇编语言基础与逆向分析

引言 在成功掌握iOS应用脱壳技术后,我们获得了可以进行静态分析的二进制文件。然而,要真正理解iOS应用的底层逻辑,我们必须深入到汇编语言层面。ARM64(也称为AArch64)是苹果在iPhone 5s及以后设备中使用的指令集架构。本篇文章将深入探讨ARM64汇编语言的基础知识,并结合…

使用Gitlab CI/CD结合docker容器实现自动化部署

Gitlab CI/CD基本介绍 核心概念 持续集成(CI):每次代码提交后自动触发构建、测试和代码检查,确保代码质量 持续交付/部署(CD):在 CI 基础上自动将代码部署到测试或生产环境,支持人工…

初学者运行Pycharm程序可能会出现的问题,及解决办法

文章目录 前言一、ModuleNotFoundError: No module named sklearn二、ImportError: cannot import name show_config from numpy (unknown location)三、Pycharm报错:“Original error was: DLL load failed: 找不到指定的模块“ 的解决办法四、ImportError: cannot…

Android开发中的Java与Kotlin:全面对比与深度解析

Android开发中的Java与Kotlin:全面对比与深度解析 在Android开发领域,Java和Kotlin是两种主流编程语言。自Google在2017年宣布Kotlin为Android官方支持语言以来,Kotlin凭借其现代语法特性和与Java的无缝兼容性,逐渐成为开发者的新…

为应对激烈竞争环境,IBMS系统如何提升企业管理效率

IBMS智能管理系统:赋能企业高效运营,决胜竞争新时代 在瞬息万变的商业环境中,效率就是竞争力!企业如何快速响应市场变化、优化内部流程、降低成本并实现精准决策?IBMS智能管理系统以创新科技为引擎,为企业…

2.3 ASPICE的架构与设计

在ASPICE中,架构与设计是汽车软件开发过程中非常重要的一环,它涉及到定义和设计软件系统的整体结构、组件以及其相互关系。良好的架构与设计可以帮助团队更好地理解和管理软件系统,提高系统的可维护性、可扩展性和性能。以下是ASPICE中架构与…

生益PCB耐高温PCB板材怎么样?

在5G基站昼夜不停地吞吐数据时,在新能源汽车电池管理系统经受极寒酷暑考验时,在航空航天器穿越大气层承受2000℃热浪冲击时,一块优质PCB板材的“抗热基因”正在决定着整个系统的生死存亡。生益科技研发的耐高温PCB板材,正是在这场…

Java Spring ApplicationEvent 概述

一、Spring 事件机制核心概念 1. 事件驱动架构模型 发布-订阅模式:解耦事件生产者和消费者观察者模式:监听器监听特定事件事件驱动优势: 组件间松耦合系统扩展性好支持异步处理事件溯源支持 2. 核心组件 组件作用实现方式ApplicationEve…

Spring核心框架完全指南 - 基础知识全解析

📖 目录 🌟 Spring框架简介 🏗️ IoC容器详解 💉 依赖注入(DI)深入理解 ⚙️ Bean配置与管理 🎯 Bean的作用域 🔄 Bean生命周期 🎭 面向切面编程(AOP) 📝 Spring注解详解 📁 资源管理 📢 事件机制 🔤 SpEL表达式语言 🎯 实战案例 📚 总…

Parasoft C++Test软件集成测试(部件测试)_操作指南

系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…

聊一聊 Linux 上对函数进行 hook 的两种方式

一:背景 1. 讲故事 前两篇我们介绍了 Minhook 在 Windows 平台上的强大功效,这一篇我们来聊一聊如何在 Linux 上对函数进行hook,这里介绍两种方式。 轻量级的 LD_PRELOAD 拦截 LD_PRELOAD是一种共享库拦截,这种方式的优点在于…

【免费分享】GWO-BP-AdaBoost预测!灰狼优化、人工神经网络与AdaBoost集成学习算法预测研究

一、模型组成原理 1. 灰狼优化算法(GWO) 核心思想:模拟灰狼群体的社会等级和狩猎行为(包围、跟踪、攻击猎物),通过α、β、δ三级领导层引导种群搜索最优解。算法流程包括: 社会分层&#xff…

matlab实现非线性Granger因果检验

matlab程序包。用于格兰杰因果分析,分析数据时,直接带入数据即可。 hjt2/README , 1804 hjt2/c-code/Makefile , 57 hjt2/c-code/hjt2_tval.c , 10862 hjt2/matlab/spx_rp.dat , 175202 hjt2/matlab/spx_ur.dat , 174522 hjt2/matlab/spx_uv.dat , 1745…

从SQL Server到分布式大数据平台:重构企业数据架构

在企业数字化加速的背景下,越来越多的组织开始意识到:传统的数据系统正逐渐成为增长的“瓶颈”而非“助力”。其中,SQL Server 作为许多企业IT架构中曾经的中坚力量,正面临前所未有的挑战。它曾以稳定、易用、成本可控等优势&…