Files
phs_v1.0.1.0/developtools/integration_verification/tools/rom_ram_analyzer/standard
2024-09-27 19:16:49 +08:00
..
2024-09-27 19:16:49 +08:00
2024-09-27 19:16:49 +08:00
2024-09-27 19:16:49 +08:00
2024-09-27 19:16:49 +08:00
2024-09-27 19:16:49 +08:00

[toc]

Rom_analyzer.py

功能介绍

基于BUILD.gn、bundle.json、编译产物system_module_info.json、out/{product_name}/packages/phone目录下的编译产物分析各子系统及部件的rom大小。

结果以json与xls格式进行存储其中json格式是必输出的xls格式需要-e参数控制。

支持产品

主要是rk3568系列,已测试产品包括rk3568、rk3568_mini_system

实现思路

利用编译构建自动生成的out/rk3568/packages/phone/system_module_info.json中已有的信息重新组织对于其中没有子系统和部件的文件手动查找。目前已知ohos_sa_profile没有

使用说明

前置条件:

  1. 获取整个rom_ram_analyzer目录
  2. 对系统进行编译
  3. rom分析在linux平台,ram分析在windows平台
  4. python3及以后
  5. 安装requirements
    xlwt==1.3.0
    

命令介绍:

  1. -h--help命令查看帮助
    > python3 rom_analyzer.py -h
    usage: rom_analyzer.py [-h] [-v] -p PROJECT_PATH -j MODULE_INFO_JSON -n PRODUCT_NAME -d PRODUCT_DIR [-b] [-o OUTPUT_FILE] [-u] [-e EXCEL]
    
    analyze rom size of component.
    
    options:
    -h, --help            show this help message and exit
    -v, -version          show program\'s version number and exit
    -p PROJECT_PATH, --project_path PROJECT_PATH
                            root path of openharmony. eg: -p ~/openharmony
    -j MODULE_INFO_JSON, --module_info_json MODULE_INFO_JSON
                            path of out/{product_name}/packages/phone/system_module_info.json
    -n PRODUCT_NAME, --product_name PRODUCT_NAME
                            product name. eg: -n rk3568
    -d PRODUCT_DIR, --product_dir PRODUCT_DIR
                            subdirectories of out/{product_name}/packages/phone to be counted.eg: -d system -d vendor
    -b, --baseline        add baseline of component to the result(-b) or not.
    -o OUTPUT_FILE, --output_file OUTPUT_FILE
                            basename of output file, default: rom_analysis_result. eg: demo/rom_analysis_result
    -u, --unit_adaptive   unit adaptive
    -e EXCEL, --excel EXCEL
                            if output result as excel, default: False. eg: -e True
    
  2. 使用示例
    python3 rom_analyzer.py -p ~/oh/ -j ~/oh/out/rk3568/packages/phone/system_module_info.json -n rk3568 -d system -d vendor -d updater -e True -b
    # ohrootpath of oh
    # -b: add baseline info to the result
    # -e Trueoutput result in excel format additionally
    

输出格式介绍(json)

{
   子系统名: {
       "size": 整个子系统输出文件的总大小(单位:字节),
       "file_count":  整个子系统产生的文件数,
       部件名: {
         "size": 部件的大小(单位:字节),
         "file_count": 部件对应的文件数,
         "baseline": 部件的baseline根据bundle.json生成,
         "编译产物文件名": 编译产物大小(单位:字节)
         ...
       }
       ...
   },  
   ...
}

附加说明

  1. 由于目前standard产品使用的基本都是自定义的template,能够有效收集更多信息,因此相较于lite_small的分析脚本,本脚本能够具有更高的准确率,可以放心使用(不出意外的话

ram_analyzer.py

功能介绍

基于out/{product_name}/packages/phone下所有cfg文件、out/{product_name}/packages/phone/system/profile下所有json文件rom的分析结果rom_ram_baseline.json——可以在rom分析阶段通过-b参数生成分析各进程及对应部件的ram占用默认取Pss

收集cfg、json文件的可供参考命令mkdir cfgs && cp $(find ~/oh/out/rk3568/packages/phone -name *.cfg | xargs) cfgs

结果以json与xls格式存储其中json格式是必输出的xls格式需要-e参数控制。

使用说明

前置条件:

  1. 获取整个rom_ram_analyzer目录
  2. hdc可用
  3. 设备已连接
  4. 系统已烧录
  5. python3
  6. 安装requirements
    xlwt==1.3.0
    
  7. 准备好相关数据:
    1. out/{product_name}/packages/phone下所有cfg文件并将其放置于同一个目录中ps同名文件仅保存一份即可
    2. out/{product_name}/packages/phone/system/profile下所有json 文件
    3. rom_ram_baseline.json——如果需要在结果中生成基线信息
  8. 运行rom_analyzer.py产生的json结果一份即-o参数对应的文件默认rom_analysis_result.json

命令介绍:

  1. 使用-h--help查看帮助
    > python .\ram_analyzer.py -h
    usage: ram_analyzer.py [-h] [-v] -s JSON_PATH -c CFG_PATH [-j ROM_RESULT] -n DEVICE_NUM [-b BASELINE_FILE]
                        [-o OUTPUT_FILENAME] [-u] [-e EXCEL]
    
    analyze ram size of component
    
    optional arguments:
    -h, --help            show this help message and exit
    -v, -version          show program\'s version number and exit
    -s JSON_PATH, --json_path JSON_PATH
                            path of sa json file. eg: -x ~/openharmony/out/rk3568/packages/phone/system/profile
    -c CFG_PATH, --cfg_path CFG_PATH
                            path of cfg files. eg: -c ./cfgs/
    -j ROM_RESULT, --rom_result ROM_RESULT
                            json file produced by rom_analyzer_v1.0.py, default: ./rom_analysis_result.json.eg: -j
                            ./demo/rom_analysis_result.json
    -n DEVICE_NUM, --device_num DEVICE_NUM
                            device number to be collect hidumper info. eg: -n 7001005458323933328a01fce16d3800
    -b BASELINE_FILE, --baseline_file BASELINE_FILE
                            baseline file of rom and ram generated by rom analysis.
    -o OUTPUT_FILENAME, --output_filename OUTPUT_FILENAME
                            base name of output file, default: ram_analysis_result. eg: -o ram_analysis_result
    -u, --unit_adaptive   unit adaptive
    -e EXCEL, --excel EXCEL
                            if output result as excel, default: False. eg: -e True
    
  2. 使用示例:
     python  .\ram_analyzer.py -s .\profile\ -c .\cfgs -j .\rom_analysis_result.json -n 7001005458323933328a59a140913900 -e True
    # -s profilecopy到本地的out/rk3568/package/phone/system/profile目录
    # -c .\cfgscopy到本地的out/rk3568/packages/phone下所有cfg
    # -b rom_ram_baseline.json指定rom与ram的基线信息文件可在rom统计阶段使用-b参数生成
    # -e True生成xls格式的结果文件
    
  3. 生成文件说明:
    1. refactored_ram_analysis_result.json结果文件
    2. ram_analysis_result.json结果文件供看板使用
    3. ram_analysis_result.xlsxls格式存储结果文件

输出格式说明json

  1. refactored_ram_analysis_result.json
{
   "子系统名":{
      "size": 子系统下所有进程占用内存的大小单位Byte,
      "部件名":{
         "size": 部件下所有进程占用内存的大小单位Byte,
         "进程名":{
            "size": 本进程占用内存的大小单位Byte,
            "elf":{
               "拉起本进程的二进制文件名": 该二进制文件的大小单位Byte,
            }
         }
      }
   }
}
  1. ram_analysis_result.json
{
   "进程名":{
       "size": 本进程占用内存的大小(单位:字节),
       "子系统名": {
            "部件名": {
               "elf文件名": elf文件大小(单位:字节)
               ...
            }
            ...
       }
       ...
   },
   ...
}

后续工作

  1. 考虑适当简化逻辑