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

性能分析--perfetto工具使用

性能作为it行业开发的一个重要组成部分  许多人刚接触起来总是云里雾里 总觉得和代码表现的相似但是却不一致 摸不着头脑    现在让我们来清晰化

性能

一、性能的定义

性能本质上是设备或系统完成特定任务的效率与能力,核心衡量维度包括:响应速度、处理能力、稳定性、并发承载能力等。对于手机而言,性能直接决定了日常使用的流畅度(如打开 APP、切换任务)、复杂场景的表现(如大型游戏、视频剪辑)以及长期使用的耐用性(是否容易卡顿)。

二、手机性能的核心分析维度

手机性能是多硬件、软件协同作用的结果,需从关键组件和实际体验两方面综合判断,核心维度如下:

1. 核心硬件:性能的 “基础配置”

硬件是性能的核心支撑,重点关注以下组件:

  • 处理器(SoC):手机的 “大脑”,直接决定运算速度。
    • 关键参数:芯片型号(如骁龙 8 Gen4、天玑 9300+、苹果 A18 Pro)、核心数(CPU 大核 + 小核架构,影响多任务和功耗平衡)、制程工艺(纳米数越小,如 3nm,性能更强且更省电)、GPU(图形处理单元,影响游戏、视频渲染能力)。
    • 分析方式:参考专业跑分(如安兔兔、GeekBench),但需注意 “跑分≠实际体验”,部分芯片侧重性能峰值,部分侧重功耗控制。
  • 内存(RAM):决定多任务能力,相当于 “临时工作台”。
    • 关键参数:容量(常见 8GB、12GB、16GB,越大越能同时运行多个 APP 不杀后台)、内存类型(如 LPDDR5X 比 LPDDR5 传输速度更快,减少数据延迟)。
    • 分析方式:实际测试 “后台驻留能力”(如同时打开微信、抖音、游戏等,切换后是否需要重新加载)。
  • 存储(ROM):影响数据读写速度,相当于 “仓库”。
    • 关键参数:容量(满足存储需求,建议至少 256GB)、存储类型(UFS 4.0 比 UFS 3.1 读写速度更快,体现在安装 APP、复制大文件、加载游戏资源的速度上)。
    • 分析方式:测试大型 APP 的安装时间、4K 视频的导出速度,或查看是否支持 “内存扩展”(需注意:软件扩展的内存性能远不如物理内存)。
  • 散热系统:制约性能释放的 “瓶颈”。
    • 关键配置:散热面积(如 VC 液冷散热的尺寸)、散热材质(铜箔、石墨烯等)。
    • 分析方式:长时间运行大型游戏(如《原神》最高画质),观察手机是否快速发热、是否出现 “降频卡顿”(帧率突然下跌)。
2. 软件优化:硬件性能的 “放大器”

同样的硬件,不同系统优化会带来差异极大的体验:

  • 操作系统:如 iOS 的闭环生态(优化更极致,流畅度和稳定性突出)、Android 的开放性(不同品牌定制 UI 差异大,如 MIUI、ColorOS 的后台管理、功耗优化)。
  • 系统功能:是否支持 “内存融合”“应用预加载”,后台管理策略是否合理(避免过度杀后台或占用过多内存)。
  • 适配性:重点 APP(如游戏、办公软件)是否针对手机型号优化,是否支持高帧率(如 120 帧)、高分辨率渲染。
3. 实际场景测试:性能的 “最终检验”

跑分只能作为参考,实际使用场景更能反映真实性能:

  • 日常流畅度:打开 / 切换 APP(如微信、淘宝、相机)的响应速度,滑动屏幕、浏览网页是否掉帧。
  • 大型游戏表现:运行《原神》《王者荣耀》等游戏,测试满画质下的帧率稳定性(可用帧率监测工具)、机身发热情况、续航消耗速度。
  • 重载任务能力:导出 4K 视频、压缩大型文件、运行专业办公软件(如 Excel 大数据表格),观察完成时间和过程是否卡顿。
  • 长期使用稳定性:手机使用 1-2 年后,是否出现明显卡顿、续航衰减过快(需结合系统更新支持情况,如是否提供长期优化补丁)。
4. 功耗与续航:性能的 “平衡项”

高性能不等于好体验,需兼顾功耗控制:

  • 重点关注 “性能功耗比”:相同负载下,功耗越低,续航越长,且不易发热。
  • 测试方式:满电状态下,混合使用(游戏 1 小时 + 视频 2 小时 + 日常社交),记录剩余电量;或持续高负载场景(如连续游戏),观察续航时长。

三、总结

分析手机性能的核心逻辑是:先看硬件基础(处理器、内存、存储、散热),再看软件优化,最终通过实际场景测试验证,同时兼顾功耗与续航的平衡。避免单纯依赖跑分。

在分析性能的时候会引入一个工具 perfetto 我们开始讲解perfetto的使用

Perfetto 是 Android 10 中引入的全新下一代平台级跟踪工具,适用于 Android、Linux 和 Chrome,是用于性能检测和跟踪分析的生产级开源项目。以下是其使用方法的详细介绍:

  • 开启设备追踪:Android 11 及以上版本默认开启 Perfetto,Android 9 和 10 需要手动开启,在非 Pixel 手机上需执行命令adb shell setprop persist.traced.enable 1
  • 抓取跟踪文件
    • 使用命令行直接抓取:可以使用 ADB 命令捕获 Perfetto 追踪,进行系统级追踪的命令示例为adb shell perfetto --config demo --out /data/misc/perfetto-traces/trace_file,这将开始追踪并将追踪文件保存到指定位置。捕获完成后,可通过adb pull /data/misc/perfetto-traces/trace_file下载追踪文件。
    • 使用配置文件抓取:首先需要生成配置文件,配置文件可以灵活设置各种参数,如缓冲区大小、数据源、抓取持续时间等。例如:

plaintext

buffers:{size_kb:522240fill_policy:DISCARD}
data_sources:{config{name:"linux.process_stats"target_buffer:1process_stats_config{scan_all_processes_on_start:true}}
}
data_sources:{config{name:"android.log"android_log_config{log_ids:LID_DEFAULTlog_ids:LID_SYSTEM}}
}
data_sources:{config{name:"linux.sys_stats"sys_stats_config{stat_period_ms:250stat_counters:STAT_CPU_TIMESstat_counters:STAT_FORK_COUNT}}
}
data_sources:{config{name:"linux.ftrace"ftrace_config{ftrace_events:"sched/sched_switch"ftrace_events:"power/suspend_resume"// 省略部分ftrace_eventsatrace_categories:"gfx"atrace_categories:"input"// 省略部分atrace_categoriesatrace_apps:"*"}}
}
duration_ms:30000

然后将配置文件 push 到设备上,执行命令adb push perfetto.pbtxt /data/local/tmp/perfetto.pbtxt,接着在设备上执行adb shell 'cat /data/local/tmp/perfetto.pbtxt|perfetto --txt -c --o /data/misc/perfetto-traces/trace'

Perfetto 网页版(ui.perfetto.dev)是分析追踪文件的核心工具,提供了直观的可视化界面,支持查看 CPU 调度、内存使用、进程线程活动等性能数据。以下是其详细使用教程:

一、准备工作

  1. 获取追踪文件

先通过前文提到的方法(命令行或配置文件)抓取追踪文件(通常为 .perfetto-trace 或 .pftrace 格式),保存到本地。

二、打开网页版并加载文件

  1. 访问 ui.perfetto.dev,页面初始状态如下:

  1. 加载追踪文件的两种方式:
    • 直接拖放:将本地的 .perfetto-trace 文件拖到页面中央的 “Drop a trace file here” 区域。
    • 手动上传:点击页面中的 “Upload trace file” 按钮,选择本地文件。

三、核心界面布局

加载完成后,界面分为以下几个关键区域(从上到下、从左到右):

  1. 顶部工具栏
    • 时间范围控制:可通过拖拽时间轴滑块(底部的灰色长条)缩放 / 平移时间范围,或直接输入时间(如 0.5s 到 2.5s)。
    • 搜索框:输入进程名、线程名、事件类型(如 sched_switch)快速定位。
    • 视图切换:点击 “+” 添加新视图(如 CPU 核心、内存、日志等),或切换预设布局(如 “CPU + 进程”)。
  2. 左侧面板
    • Tracks(追踪项):显示所有可展开的追踪类别,如 Processes(进程)、CPUs(CPU 核心)、Android Logs(系统日志)等。
      • 点击类别前的箭头可展开具体内容(如某进程的线程、某 CPU 核心的调度事件)。
      • 右键点击追踪项可选择 “Hide”(隐藏)、“Pin”(固定)或 “Filter”(过滤)。
  3. 主视图区
    • 以时间轴为横轴,展示各追踪项的活动(如线程运行状态、CPU 使用率、函数调用等)。
    • 不同颜色代表不同状态:
      • 绿色:线程处于 Running(运行)状态。
      • 灰色:线程处于 Sleeping(休眠)或 Uninterruptible(不可中断睡眠)状态。
      • 橙色 / 红色:可能代表调度延迟、锁等待等(具体需结合事件类型)。
  4. 底部时间轴
    • 显示整个追踪的时间范围,拖拽滑块可缩放至感兴趣的时间段(精确到毫秒级)。

四、常用分析操作

1. 查看 CPU 调度细节

  • 在左侧 CPUs 展开具体核心(如 CPU 0、CPU 1),主视图会显示该核心上的线程切换事件(sched_switch)。
  • 点击某一段绿色的 “运行” 块,右侧会弹出详情面板,显示:
    • 线程名、PID/TID。
    • 运行开始 / 结束时间、持续时长。
    • 切换前后的线程状态(如从 prev_comm=system_server 切换到 next_comm=my_app)。

2. 分析进程 / 线程活动

  • 在左侧 Processes 展开目标进程(如 com.example.myapp),其下的线程会按 TID 列出。
  • 观察线程的状态变化:若某线程频繁在 “运行” 和 “休眠” 间切换,可能存在调度问题;若长期处于 “阻塞” 状态,可能是锁竞争或 I/O 等待导致。
  • 右键线程追踪项,选择 “Zoom to selection” 可聚焦该线程的活动时间范围。

3. 查看系统日志与自定义事件

  • 若追踪配置包含 android.log 数据源,左侧 Android Logs 会显示系统日志(如 logcat 内容),可按日志级别(I/D/W/E)筛选。
  • 若使用了 Perfetto SDK 添加自定义事件(如 Trace.beginSection("custom_event")),在 Processes 下的对应线程中会显示橙色 / 紫色的事件块,点击可查看事件名称和持续时间。

4. 统计与筛选

  • 搜索筛选:在顶部搜索框输入关键词(如 my_app 或 sched),主视图会高亮匹配项,左侧仅显示相关追踪项。
  • 导出数据:点击顶部工具栏的 “Export”,可将当前视图数据导出为 CSV 或 JSON(用于进一步分析)。
  • 聚合统计:右键某类事件(如 sched_switch),选择 “Show summary” 可查看该事件的总次数、平均持续时间等统计信息。

五、高级技巧

  1. 对比多个追踪文件

点击顶部 “File” → “Load another trace”,可加载第二个文件,主视图会显示两个追踪的时间轴(需手动对齐时间起点),方便对比优化前后的性能差异。

  1. 使用 SQL 分析

Perfetto 支持通过 SQL 查询追踪数据(基于内部的 Trace Processor 引擎):

    • 点击顶部 “Query” 按钮,打开 SQL 编辑器。
    • 示例:查询某进程(PID=1234)的所有线程运行时间:

sql

SELECT thread.name, SUM(dur) AS total_runtime

FROM sched_slice

WHERE utid IN (SELECT utid FROM thread WHERE pid = 1234)

GROUP BY thread.name

ORDER BY total_runtime DESC

    • 执行后会生成表格结果,支持导出。
  1. 自定义视图布局

拖拽左侧追踪项可调整顺序,右键 “Remove” 不需要的项,点击顶部 “Save layout” 可保存当前布局(下次加载文件时可复用)。

六、常见问题

  • 文件过大无法加载:若文件超过 1GB,直接上传可能卡顿,建议用 Trace Processor 本地加载后,通过网页版连接(前文已提及)。
  • 事件显示不全:检查追踪配置是否包含所需数据源(如 linux.ftrace 用于 CPU 调度,android.memory 用于内存跟踪),若缺失需重新抓取。

通过以上操作,可快速定位性能瓶颈(如 CPU 占用过高、线程阻塞、调度延迟等)。结合具体场景(如启动速度、流畅度),聚焦关键时间段和进程,能更高效地分析问题。

  • 在 Perfetto UI 中分析追踪:Perfetto 提供了基于 Web 的可视化 UI,网址为 ui.perfetto.dev。将抓取到的追踪文件(格式为.pftrace 或.json)上传到该 UI,即可通过基于网页的可视化工具浏览时间线和事件,重点分析 CPU 调度、线程执行和内存分配等性能数据。
  • 使用 Perfetto SDK 进行自定义追踪:如果需要追踪应用中的特定部分,可以使用 Perfetto SDK 来添加自定义追踪点。首先在build.gradle文件中添加依赖项implementation 'com.google.perfetto:trace:VERSION',然后在代码中使用Trace API 来创建追踪点,例如Trace.beginSection("custom_event");Trace.endSection();,这些追踪点会出现在 Perfetto 的追踪输出中。
  • 处理 trace 文件过大的情况:当 trace 文件大于 1G 时,直接在 Perfetto UI 中打开可能会出现内存溢出无法访问的情况。可以使用 Trace Processor 来加载 trace 文件,先下载 Trace Processor,命令为curl -LO https://get.perfetto.dev/trace_processor,然后赋予执行权限chmod +x./trace_processor,接着可以通过./trace_processor trace.perfetto-trace启动交互式 shell,或者通过./trace_processor trace.perfetto-trace --httpd启动本地 trace processor 实例,之后在 Chrome 浏览器中打开https://ui.perfetto.dev/#!/,选择 “YES, use loaded trace”,即可自动解析 trace_processor 已经加载的 pftrace 文件。

http://www.dtcms.com/a/515486.html

相关文章:

  • 【matlab】如何提取论文plot图中的数据
  • 手机网站开发的目的ppt免费背景图片
  • Java 核心知识点查漏补缺(一)
  • UE5 C++ CVar控制台命令字段使用
  • 从图像处理到AI识别:直播美颜sdk如何实现高效一键美颜?
  • ESD防护设计宝典(十三):电快速瞬变脉冲群(EFT)防护与整改
  • 做百度推广去些网站加客户二级域名免费申请网站
  • 婚介 东莞网站建设西部数码网站源码
  • 云计算实验4——CentOS中HBase的安装
  • Excel文件中的VBA脚本,在文件使用WPS编辑保存后无法执行
  • LLD(详细设计文档)输出标准模板
  • 【山西政务服务网-注册_登录安全分析报告】
  • 云原生安全深度实战:从容器安全到零信任架构
  • Java导出写入固定Excel模板数据
  • 合肥网站建设模板系统html怎么做商品页面
  • uniapp微信小程序页面跳转后定时器未清除问题解析与解决方案
  • 《从“直接对话”到 “集成开发调用”:智谱 GLM-4.6 引领 Coding 场景的效率跃迁》
  • 数据中心基础设施等级
  • 关于架空输电线识别树障or测距相关论文阅读
  • [go 面试] 深入理解并发控制:掌握锁的精髓
  • TypeScript 面试题及详细答案 100题 (61-70)-- 泛型(Generics)
  • 全球外贸网站制作教程icp网站快速备案
  • 《Hiding Images in Diffusion Models by Editing Learned Score Functions》 论文阅读
  • 频率分集阵列雷达——论文阅读
  • 网站备案信息如何下载潍坊市住房和城乡建设局网站下载
  • 比较好的企业网站百度举报网站
  • 数据库加密技术
  • nginx配置内嵌网页
  • 【微服务】SpringBoot 整合轻量级安全框架JWE 项目实战详解
  • 一个完整的AI项目从需求分析到部署的全流程详解