Simpleperf: 一款能在Android 做 Native Profiling 的工具
简介
在调试 C/C++ 算法时,我通常喜欢在 Mac 或者 PC 上做 Profiling(性能剖析),因为很多成熟的 IED 自带 Profiler,例如 CLion Profiler。但 C/C++ 算法集成至 app 后,为了拿到更为精确的 Profiling 数据,就需要对 app 进行 native 层的 profiling。
Simpleperf 刚好满足了这样的需求。本文将会通过一个例子来说明如何使用Simpleperf,主要目的是想推荐这款好用的工具给大家,例子也尽量简单,更多深入的使用方式,有兴趣的看官可以自己探索一下。
举个例子
Step 1. 下载 Simpleperf
Android NDK 中自带 Simpleperf,所以下载 Android NDK 即可。例如在我的机器上,它在 ~/NDK/android-ndk-r21b/simpleperf
。这个文件夹下,包含了多个脚本,此外在 bin
目录下包含不同平台不同架构的 simplerperf 可执行程序。
Step 2. 下载Demo,并安装
SimpleperfExampleWithNative 是用于测试的安卓工程,下载它,编译它,安装它。
Step 3. 运行 Simpleperf 脚本
首先,运行 app_profiler.py
,该脚本会启动 simpleperf,并记录一段时间内(默认10s)的性能数据,并将其输出到文件(默认为 perf.data)
cd path/to/simpleperf/
python app_profiler.py -p com.example.simpleperf.simpleperfexamplewithnative
该脚本有很多选项可以设置,例如输出文件名,监控时长等,详细设置说明可以通过 python app_profiler.py -h
获取
接着,运行report_html.py
生成 profiling 数据报告。该脚本以 app_profiler.py
的输出的性能数据作为输入,并生成 html 文件。
python report_html.py --add_disassembly
该脚本有很多选项可以设置,例如输出文件名等,详细设置说明可以通过 python report_html.py -h
获取。
就这么简单,两步搞定,你就能得到一个漂亮的 html 性能报告,截图如下:
总结
本文粗略地介绍了 simpleperf 的使用方式,通过脚本来监控数据和生成报表。本质上这些脚本都是在调用 bin 目录下 simpleperf 可执行程序进行工作的,这种傻瓜式的操作方式能够满足我的需求,所以就没有深入研究它们了。
参考资料
Examples of using simpleperf to profile Android applications
Simpleperf: 一款能在Android 做 Native Profiling 的工具相关推荐
- Android原生(Native)C开发之二 framebuffer篇
为什么80%的码农都做不了架构师?>>> Android原生(Native)C开发之二 framebuffer篇 如对Android原生(Natvie)C开发还任何疑问,请参阅 ...
- takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...
TakePhoto是一款用于在Android设备上获取照片(拍照或从相册.文件中选择).裁剪图片.压缩图片的开源工具库,目前最新版本4.0.2. 3.0以下版本及API说明,详见TakePhoto2. ...
- Android APP native 崩溃分析之 linker SIGBUS 崩溃
原文地址:https://caikelun.io/post/2019-05-31-android-app-native-crash-linker-sigbus/ 这是 Android APP nati ...
- Android一步一步实现一款实用的Android广告栏
源码:BannerLayoutDemo 有图有真相: bannerLayoutDemo 开源界有一句很有名的话叫"不要重复发明轮子",当然,我今天的观点不是要反驳这句话,轮子理论给 ...
- Android原生(Native)C开发
2019独角兽企业重金招聘Python工程师标准>>> 转载: Android原生(Native)C开发之一 环境搭建篇 转载: Android原生(Native)C开发之二 fra ...
- Android C++ Native 内存泄露检查工具Raphael使用介绍
Android C++ Native 内存泄露检查工具使用介绍 实现原理 使用方法 Raphael添加到测试apk 添加项目依赖 同步gradle 启动泄露检测功能 直接使用boardcast功能控制 ...
- Android React Native使用原生UI组件
Android React Native 已经将几个常用的原生组件进行了封装,比如 ScrollView 和 TextInput,但是并不是所有系统的原始组件都被封装了,因此有的时候我们不得不自己动手 ...
- android todo,推荐两款Todo类Android应用:高效Todo和Any.do
8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 我一直在寻找一款这样的Android应用: 首先,他的界面要足够简约,我不喜欢花里胡哨和乱七八糟的 UI: 第二,添加代 ...
- 2022全球20多款知名的Android刷机ROM镜像和Android系统开源源码(覆盖全球机型)
推荐阅读 Android10系统定制|frida逆向分析实战课程 2022全球20多款知名的Android刷机ROM镜像和Android系统开源源码(覆盖全球机型) 因此,您拥有一台Android设 ...
最新文章
- this.$router.push、replace、go的区别
- python selenium脚本_怎样开始写第一个基于python的selenium脚本
- 未在本地计算机上注册Microsoft.Jet.OLEDB.4.0解决方案
- 密码学 / 什么是数字签名
- 根据年 -月查询这个月的第一天和最后一天
- Spring Bean 后置处理器PostProcessor
- 高等数学下-赵立军-北京大学出版社-题解-练习11.3
- mysql用 fifo 记录日志_MySQL一丢丢知识点的了解
- 开源改变了小米什么?
- mac 使用 pf 做端口转发
- 知道半径 两点角度 怎么求坐标
- SQLServer数据库中截取字符串的常用方法
- gem install mysql2的时候出现的错误
- matlab 2017安装教程
- 算法设计与分析基础 (Anany Levitin 著)
- 参考文献标号字体_毕业论文参考文献格式字体
- Oracle中Minus的使用
- vue项目总使用高德API的轨迹展示巡航
- 解决es集群Yellow与Red的问题
- C语言:习题3-2 高速公路超速处罚.2021-07-27
热门文章
- linux cocos2dx 配置文件,Linux开发cocos2dx程序环境搭建
- 深度linux安装make,linux下安装python3完整教程(依赖环境gcc,make,cmake,configure等详细解释)...
- 静态成员函数与成员变量_C++静态成员变量及函数
- 华为主题包hwt下载_华为主题太丑?修改方式它来了
- java commons logging_Java日志介绍(5)-commons-logging
- 大数据学习笔记14:MR案例——招聘数据分析
- VB讲课笔记12:文件管理
- java 进程 cpu占用_JAVA进程CPU占用高的故障排查 – 运维那些事
- 软化边硬化边_启示录:做完线雕第三天特别丑、边哭边讲线雕有什么副作用?...
- bzoj2127 happiness 最小割