批處理實現:自動抓取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
繁體地址,請注明出處:http://hk.pswp.cn/diannao/86969.shtml
英文地址,請注明出處:http://en.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架構中曾經的中堅力量,正面臨前所未有的挑戰。它曾以穩定、易用、成本可控等優勢&…