简介

在调试 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 的工具相关推荐

  1. Android原生(Native)C开发之二 framebuffer篇

    为什么80%的码农都做不了架构师?>>>    Android原生(Native)C开发之二 framebuffer篇 如对Android原生(Natvie)C开发还任何疑问,请参阅 ...

  2. takephoto 框架_GitHub - Smecking/TakePhoto: 一款用于在Android设备上获取照片(拍照或从相册、文件中选择)、裁剪图片、压缩图片的开源工具库...

    TakePhoto是一款用于在Android设备上获取照片(拍照或从相册.文件中选择).裁剪图片.压缩图片的开源工具库,目前最新版本4.0.2. 3.0以下版本及API说明,详见TakePhoto2. ...

  3. Android APP native 崩溃分析之 linker SIGBUS 崩溃

    原文地址:https://caikelun.io/post/2019-05-31-android-app-native-crash-linker-sigbus/ 这是 Android APP nati ...

  4. Android一步一步实现一款实用的Android广告栏

    源码:BannerLayoutDemo 有图有真相: bannerLayoutDemo 开源界有一句很有名的话叫"不要重复发明轮子",当然,我今天的观点不是要反驳这句话,轮子理论给 ...

  5. Android原生(Native)C开发

    2019独角兽企业重金招聘Python工程师标准>>> 转载: Android原生(Native)C开发之一 环境搭建篇 转载: Android原生(Native)C开发之二 fra ...

  6. Android C++ Native 内存泄露检查工具Raphael使用介绍

    Android C++ Native 内存泄露检查工具使用介绍 实现原理 使用方法 Raphael添加到测试apk 添加项目依赖 同步gradle 启动泄露检测功能 直接使用boardcast功能控制 ...

  7. Android React Native使用原生UI组件

    Android React Native 已经将几个常用的原生组件进行了封装,比如 ScrollView 和 TextInput,但是并不是所有系统的原始组件都被封装了,因此有的时候我们不得不自己动手 ...

  8. android todo,推荐两款Todo类Android应用:高效Todo和Any.do

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 我一直在寻找一款这样的Android应用: 首先,他的界面要足够简约,我不喜欢花里胡哨和乱七八糟的 UI: 第二,添加代 ...

  9. 2022全球20多款知名的Android刷机ROM镜像和Android系统开源源码(覆盖全球机型)

    推荐阅读 ​Android10系统定制|frida逆向分析实战课程 2022全球20多款知名的Android刷机ROM镜像和Android系统开源源码(覆盖全球机型) 因此,您拥有一台Android设 ...

最新文章

  1. this.$router.push、replace、go的区别
  2. python selenium脚本_怎样开始写第一个基于python的selenium脚本
  3. 未在本地计算机上注册Microsoft.Jet.OLEDB.4.0解决方案
  4. 密码学 / 什么是数字签名
  5. 根据年 -月查询这个月的第一天和最后一天
  6. Spring Bean 后置处理器PostProcessor
  7. 高等数学下-赵立军-北京大学出版社-题解-练习11.3
  8. mysql用 fifo 记录日志_MySQL一丢丢知识点的了解
  9. 开源改变了小米什么?
  10. mac 使用 pf 做端口转发
  11. 知道半径 两点角度 怎么求坐标
  12. SQLServer数据库中截取字符串的常用方法
  13. gem install mysql2的时候出现的错误
  14. matlab 2017安装教程
  15. 算法设计与分析基础 (Anany Levitin 著)
  16. 参考文献标号字体_毕业论文参考文献格式字体
  17. Oracle中Minus的使用
  18. vue项目总使用高德API的轨迹展示巡航
  19. 解决es集群Yellow与Red的问题
  20. C语言:习题3-2 高速公路超速处罚.2021-07-27

热门文章

  1. linux cocos2dx 配置文件,Linux开发cocos2dx程序环境搭建
  2. 深度linux安装make,linux下安装python3完整教程(依赖环境gcc,make,cmake,configure等详细解释)...
  3. 静态成员函数与成员变量_C++静态成员变量及函数
  4. 华为主题包hwt下载_华为主题太丑?修改方式它来了
  5. java commons logging_Java日志介绍(5)-commons-logging
  6. 大数据学习笔记14:MR案例——招聘数据分析
  7. VB讲课笔记12:文件管理
  8. java 进程 cpu占用_JAVA进程CPU占用高的故障排查 – 运维那些事
  9. 软化边硬化边_启示录:做完线雕第三天特别丑、边哭边讲线雕有什么副作用?...
  10. bzoj2127 happiness 最小割