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

Android中systrace配置及注意问题

Android中systrace配置及注意问题

systrace配置的官方文档地址如下:优化启动时间

Systrace

systrace 允许在启动期间收集内核和 Android 跟踪记录。systrace 的可视化可以帮助分析启动过程中的具体问题。(不过,如果要查看整个启动过程中的平均数量或累计数量,直接查看内核跟踪记录更为方便。)

如需在启动过程中启用 systrace,请执行以下操作:

  • frameworks/native/cmds/atrace/atrace.rc 中,更改以下行:

  write /sys/kernel/debug/tracing/tracing_on 0write /sys/kernel/tracing/tracing_on 0

改后:

  # write /sys/kernel/debug/tracing/tracing_on 0# write /sys/kernel/tracing/tracing_on 0

这将启用跟踪功能(默认处于停用状态)。

  • device.mk 文件中,添加以下行:

PRODUCT_PROPERTY_OVERRIDES +=    debug.atrace.tags.enableflags=802922
PRODUCT_PROPERTY_OVERRIDES +=    persist.traced.enable=0
  • 在设备 BoardConfig.mk 文件中,添加以下行:

BOARD_KERNEL_CMDLINE := ... trace_buf_size=64M trace_event=sched_wakeup,sched_switch,sched_blocked_reason,sched_cpu_hotplug

如果是详细的 I/O 分析,还要添加块以及 ext4 和 f2fs。

  • 在设备专属 init.rc 文件中,添加以下行:

on property:sys.boot_completed=1          // This stops tracing on boot complete
write /d/tracing/tracing_on 0
write /d/tracing/events/ext4/enable 0
write /d/tracing/events/f2fs/enable 0
write /d/tracing/events/block/enable 0
  • 在设备启动后,提取跟踪记录:

adb root && adb shell atrace --async_stop -z -c -o /data/local/tmp/boot_trace
adb pull /data/local/tmp/boot_trace
$ANDROID_BUILD_TOP/external/chromium-trace/systrace.py --from-file=boot_trace

注意:Chrome 无法处理过大的文件。请考虑使用 tailheadgrep 分割 boot_trace 文件,以获得必要的部分。由于事件过多,I/O 分析通常需要直接分析捕获的 boot_trace

使用systrace中需要注意的问题

注意问题1:

需要python 2.7版本,不能使用python3

注意问题2:

解决“ImportError: No module named win32con”和“ImportError: No module named six”

执行systrace解析命令式时报错

python chromium-trace/systrace.py --from-file=boot_trace

报错内容如下:

D:\Android\bootcompleted>python chromium-trace/systrace.py --from-file=boot_trace
Traceback (most recent call last):File "chromium-trace/systrace.py", line 48, in <module>from systrace import run_systraceFile "D:\Android\bootcompleted\chromium-trace\catapult\systrace\systrace\run_systrace.py", line 41, in <module>from devil import devil_envFile "D:\Android\bootcompleted\chromium-trace\catapult\systrace\systrace\..\..\devil\devil\devil_env.py", line 33, in <module>import dependency_manager  # pylint: disable=import-errorFile "D:\Android\bootcompleted\chromium-trace\catapult\dependency_manager\dependency_manager\__init__.py", line 29, in <module>from .archive_info import ArchiveInfoFile "D:\Android\bootcompleted\chromium-trace\catapult\dependency_manager\dependency_manager\archive_info.py", line 9, in <module>from dependency_manager import exceptionsFile "D:\Android\bootcompleted\chromium-trace\catapult\dependency_manager\dependency_manager\exceptions.py", line 5, in <module>from py_utils import cloud_storageFile "D:\Android\bootcompleted\chromium-trace\catapult\common\py_utils\py_utils\cloud_storage.py", line 22, in <module>from py_utils import lockFile "D:\Android\bootcompleted\chromium-trace\catapult\common\py_utils\py_utils\lock.py", line 20, in <module>import win32con
ImportError: No module named win32con

原因是python2.7版本缺少一些集成包导致,解决方法如下:

error: ImportError: No module named win32con

解决方法:python -m pip install pypiwin32

error: ImportError: No module named six

解决方法:python -m pip install six

过程中会报

WARNING: You are using pip version 19.2.3, however version 20.3.4 is available.
You should consider upgrading via the 'python -m pip install --upgrade pip' command.

则根据提示一并执行如下命令即可

python -m pip install --upgrade pip

之后再执行

python chromium-trace/systrace.py --from-file=boot_trace

结果如下:

相关文章:

  • 面试题012-数据库-MySQL(日志+优化)
  • 开始尝试从0写一个项目--前端(三)
  • 学习华为IPD流程黑话2.0
  • Intel12代处理器在虚拟机中安装Windows98SE
  • Linux基础复习(三)
  • 云服务器Ubuntu18.04进行Nginx配置
  • 0722_驱动3 地址映射驱动点灯
  • VScode 自定义插件安装目录
  • 03。正式拿捏ArkTS语言第一天
  • 重生之“我打数据结构,真的假的?”--3.栈和队列
  • Opencv学习项目4——手部跟踪
  • 【机器学习】解开反向传播算法的奥秘
  • Red Hat 9.4 配置Yum镜像源
  • OAK相机支持的图像传感器有哪些?
  • 【区块链】如何发行自己的加密货币到以太坊测试网络,remixIDE发行自己的数字货币
  • Google 是如何开发 Web 框架的
  • 2017-08-04 前端日报
  • CAP 一致性协议及应用解析
  • interface和setter,getter
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • linux学习笔记
  • PHP面试之三:MySQL数据库
  • python大佬养成计划----difflib模块
  • sublime配置文件
  • TCP拥塞控制
  • Terraform入门 - 3. 变更基础设施
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 聊聊flink的BlobWriter
  • 如何用vue打造一个移动端音乐播放器
  • 使用SAX解析XML
  • 问题之ssh中Host key verification failed的解决
  • #!/usr/bin/python与#!/usr/bin/env python的区别
  • #《AI中文版》V3 第 1 章 概述
  • (阿里云万网)-域名注册购买实名流程
  • (动态规划)5. 最长回文子串 java解决
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (六)vue-router+UI组件库
  • (十五)使用Nexus创建Maven私服
  • (四)进入MySQL 【事务】
  • (算法二)滑动窗口
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (转)Sublime Text3配置Lua运行环境
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .net framework profiles /.net framework 配置
  • .NET MVC第五章、模型绑定获取表单数据
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET4.0并行计算技术基础(1)
  • .NET的微型Web框架 Nancy
  • .set 数据导入matlab,设置变量导入选项 - MATLAB setvaropts - MathWorks 中国
  • .sh 的运行
  • [ Linux ] git工具的基本使用(仓库的构建,提交)