1ba991379Sopenharmony_ci[toc] 2ba991379Sopenharmony_ci 3ba991379Sopenharmony_ci# Rom_analyzer.py 4ba991379Sopenharmony_ci 5ba991379Sopenharmony_ci## 功能介绍 6ba991379Sopenharmony_ci 7ba991379Sopenharmony_ci基于BUILD.gn、bundle.json、编译产物system_module_info.json、out/{product_name}/packages/phone目录下的编译产物,分析各子系统及部件的rom大小。 8ba991379Sopenharmony_ci 9ba991379Sopenharmony_ci结果以json与xls格式进行存储,其中,json格式是必输出的,xls格式需要-e参数控制。 10ba991379Sopenharmony_ci 11ba991379Sopenharmony_ci## 支持产品 12ba991379Sopenharmony_ci 13ba991379Sopenharmony_ci主要是rk3568系列,已测试产品包括rk3568、rk3568_mini_system 14ba991379Sopenharmony_ci 15ba991379Sopenharmony_ci## 实现思路 16ba991379Sopenharmony_ci 17ba991379Sopenharmony_ci利用编译构建自动生成的out/rk3568/packages/phone/system_module_info.json中已有的信息重新组织,对于其中没有子系统和部件的文件,手动查找。目前已知ohos_sa_profile没有 18ba991379Sopenharmony_ci 19ba991379Sopenharmony_ci## 使用说明 20ba991379Sopenharmony_ci 21ba991379Sopenharmony_ci前置条件: 22ba991379Sopenharmony_ci 23ba991379Sopenharmony_ci1. 获取整个rom_ram_analyzer目录 24ba991379Sopenharmony_ci1. 对系统进行编译 25ba991379Sopenharmony_ci1. rom分析在linux平台,ram分析在windows平台 26ba991379Sopenharmony_ci1. python3及以后 27ba991379Sopenharmony_ci1. 安装requirements 28ba991379Sopenharmony_ci ```txt 29ba991379Sopenharmony_ci xlwt==1.3.0 30ba991379Sopenharmony_ci ``` 31ba991379Sopenharmony_ci 32ba991379Sopenharmony_ci命令介绍: 33ba991379Sopenharmony_ci 34ba991379Sopenharmony_ci1. `-h`或`--help`命令查看帮助 35ba991379Sopenharmony_ci ```shell 36ba991379Sopenharmony_ci > python3 rom_analyzer.py -h 37ba991379Sopenharmony_ci 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] 38ba991379Sopenharmony_ci 39ba991379Sopenharmony_ci analyze rom size of component. 40ba991379Sopenharmony_ci 41ba991379Sopenharmony_ci options: 42ba991379Sopenharmony_ci -h, --help show this help message and exit 43ba991379Sopenharmony_ci -v, -version show program\'s version number and exit 44ba991379Sopenharmony_ci -p PROJECT_PATH, --project_path PROJECT_PATH 45ba991379Sopenharmony_ci root path of openharmony. eg: -p ~/openharmony 46ba991379Sopenharmony_ci -j MODULE_INFO_JSON, --module_info_json MODULE_INFO_JSON 47ba991379Sopenharmony_ci path of out/{product_name}/packages/phone/system_module_info.json 48ba991379Sopenharmony_ci -n PRODUCT_NAME, --product_name PRODUCT_NAME 49ba991379Sopenharmony_ci product name. eg: -n rk3568 50ba991379Sopenharmony_ci -d PRODUCT_DIR, --product_dir PRODUCT_DIR 51ba991379Sopenharmony_ci subdirectories of out/{product_name}/packages/phone to be counted.eg: -d system -d vendor 52ba991379Sopenharmony_ci -b, --baseline add baseline of component to the result(-b) or not. 53ba991379Sopenharmony_ci -o OUTPUT_FILE, --output_file OUTPUT_FILE 54ba991379Sopenharmony_ci basename of output file, default: rom_analysis_result. eg: demo/rom_analysis_result 55ba991379Sopenharmony_ci -u, --unit_adaptive unit adaptive 56ba991379Sopenharmony_ci -e EXCEL, --excel EXCEL 57ba991379Sopenharmony_ci if output result as excel, default: False. eg: -e True 58ba991379Sopenharmony_ci ``` 59ba991379Sopenharmony_ci1. 使用示例 60ba991379Sopenharmony_ci ```shell 61ba991379Sopenharmony_ci 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 62ba991379Sopenharmony_ci # oh:rootpath of oh 63ba991379Sopenharmony_ci # -b: add baseline info to the result 64ba991379Sopenharmony_ci # -e True:output result in excel format additionally 65ba991379Sopenharmony_ci ``` 66ba991379Sopenharmony_ci 67ba991379Sopenharmony_ci## 输出格式介绍(json) 68ba991379Sopenharmony_ci 69ba991379Sopenharmony_ci 70ba991379Sopenharmony_ci```json 71ba991379Sopenharmony_ci{ 72ba991379Sopenharmony_ci 子系统名: { 73ba991379Sopenharmony_ci "size": 整个子系统输出文件的总大小(单位:字节), 74ba991379Sopenharmony_ci "file_count": 整个子系统产生的文件数, 75ba991379Sopenharmony_ci 部件名: { 76ba991379Sopenharmony_ci "size": 部件的大小(单位:字节), 77ba991379Sopenharmony_ci "file_count": 部件对应的文件数, 78ba991379Sopenharmony_ci "baseline": 部件的baseline(根据bundle.json生成), 79ba991379Sopenharmony_ci "编译产物文件名": 编译产物大小(单位:字节) 80ba991379Sopenharmony_ci ... 81ba991379Sopenharmony_ci } 82ba991379Sopenharmony_ci ... 83ba991379Sopenharmony_ci }, 84ba991379Sopenharmony_ci ... 85ba991379Sopenharmony_ci} 86ba991379Sopenharmony_ci``` 87ba991379Sopenharmony_ci 88ba991379Sopenharmony_ci## 附加说明 89ba991379Sopenharmony_ci 90ba991379Sopenharmony_ci1. 由于目前standard产品使用的基本都是自定义的template,能够有效收集更多信息,因此相较于lite_small的分析脚本,本脚本能够具有更高的准确率,可以放心使用(不出意外的话 91ba991379Sopenharmony_ci 92ba991379Sopenharmony_ci# ram_analyzer.py 93ba991379Sopenharmony_ci 94ba991379Sopenharmony_ci## 功能介绍 95ba991379Sopenharmony_ci 96ba991379Sopenharmony_ci基于out/{product_name}/packages/phone下所有cfg文件、out/{product_name}/packages/phone/system/profile下所有json文件,rom的分析结果,(rom_ram_baseline.json——可以在rom分析阶段通过-b参数生成)分析各进程及对应部件的ram占用(默认取Pss) 97ba991379Sopenharmony_ci 98ba991379Sopenharmony_ci收集cfg、json文件的可供参考命令:`mkdir cfgs && cp $(find ~/oh/out/rk3568/packages/phone -name *.cfg | xargs) cfgs` 99ba991379Sopenharmony_ci 100ba991379Sopenharmony_ci结果以json与xls格式存储,其中,json格式是必输出的,xls格式需要-e参数控制。 101ba991379Sopenharmony_ci 102ba991379Sopenharmony_ci## 使用说明 103ba991379Sopenharmony_ci 104ba991379Sopenharmony_ci前置条件: 105ba991379Sopenharmony_ci 106ba991379Sopenharmony_ci1. 获取整个rom_ram_analyzer目录 107ba991379Sopenharmony_ci2. hdc可用 108ba991379Sopenharmony_ci2. 设备已连接 109ba991379Sopenharmony_ci3. 系统已烧录 110ba991379Sopenharmony_ci3. python3 111ba991379Sopenharmony_ci4. 安装requirements 112ba991379Sopenharmony_ci ```txt 113ba991379Sopenharmony_ci xlwt==1.3.0 114ba991379Sopenharmony_ci ``` 115ba991379Sopenharmony_ci5. 准备好相关数据: 116ba991379Sopenharmony_ci 1. out/{product_name}/packages/phone下所有cfg文件,并将其放置于同一个目录中(ps:同名文件仅保存一份即可) 117ba991379Sopenharmony_ci 1. out/{product_name}/packages/phone/system/profile下所有json 文件 118ba991379Sopenharmony_ci 1. rom_ram_baseline.json——如果需要在结果中生成基线信息 119ba991379Sopenharmony_ci6. 运行rom_analyzer.py产生的json结果一份(即-o参数对应的文件,默认rom_analysis_result.json) 120ba991379Sopenharmony_ci 121ba991379Sopenharmony_ci命令介绍: 122ba991379Sopenharmony_ci 123ba991379Sopenharmony_ci1. 使用`-h`或`--help`查看帮助 124ba991379Sopenharmony_ci ```shell 125ba991379Sopenharmony_ci > python .\ram_analyzer.py -h 126ba991379Sopenharmony_ci usage: ram_analyzer.py [-h] [-v] -s JSON_PATH -c CFG_PATH [-j ROM_RESULT] -n DEVICE_NUM [-b BASELINE_FILE] 127ba991379Sopenharmony_ci [-o OUTPUT_FILENAME] [-u] [-e EXCEL] 128ba991379Sopenharmony_ci 129ba991379Sopenharmony_ci analyze ram size of component 130ba991379Sopenharmony_ci 131ba991379Sopenharmony_ci optional arguments: 132ba991379Sopenharmony_ci -h, --help show this help message and exit 133ba991379Sopenharmony_ci -v, -version show program\'s version number and exit 134ba991379Sopenharmony_ci -s JSON_PATH, --json_path JSON_PATH 135ba991379Sopenharmony_ci path of sa json file. eg: -x ~/openharmony/out/rk3568/packages/phone/system/profile 136ba991379Sopenharmony_ci -c CFG_PATH, --cfg_path CFG_PATH 137ba991379Sopenharmony_ci path of cfg files. eg: -c ./cfgs/ 138ba991379Sopenharmony_ci -j ROM_RESULT, --rom_result ROM_RESULT 139ba991379Sopenharmony_ci json file produced by rom_analyzer_v1.0.py, default: ./rom_analysis_result.json.eg: -j 140ba991379Sopenharmony_ci ./demo/rom_analysis_result.json 141ba991379Sopenharmony_ci -n DEVICE_NUM, --device_num DEVICE_NUM 142ba991379Sopenharmony_ci device number to be collect hidumper info. eg: -n 7001005458323933328a01fce16d3800 143ba991379Sopenharmony_ci -b BASELINE_FILE, --baseline_file BASELINE_FILE 144ba991379Sopenharmony_ci baseline file of rom and ram generated by rom analysis. 145ba991379Sopenharmony_ci -o OUTPUT_FILENAME, --output_filename OUTPUT_FILENAME 146ba991379Sopenharmony_ci base name of output file, default: ram_analysis_result. eg: -o ram_analysis_result 147ba991379Sopenharmony_ci -u, --unit_adaptive unit adaptive 148ba991379Sopenharmony_ci -e EXCEL, --excel EXCEL 149ba991379Sopenharmony_ci if output result as excel, default: False. eg: -e True 150ba991379Sopenharmony_ci ``` 151ba991379Sopenharmony_ci2. 使用示例: 152ba991379Sopenharmony_ci ```shell 153ba991379Sopenharmony_ci python .\ram_analyzer.py -s .\profile\ -c .\cfgs -j .\rom_analysis_result.json -n 7001005458323933328a59a140913900 -e True 154ba991379Sopenharmony_ci # -s profile:copy到本地的out/rk3568/package/phone/system/profile目录 155ba991379Sopenharmony_ci # -c .\cfgs:copy到本地的out/rk3568/packages/phone下所有cfg 156ba991379Sopenharmony_ci # -b rom_ram_baseline.json:指定rom与ram的基线信息文件(可在rom统计阶段使用-b参数生成) 157ba991379Sopenharmony_ci # -e True:生成xls格式的结果文件 158ba991379Sopenharmony_ci ``` 159ba991379Sopenharmony_ci3. 生成文件说明: 160ba991379Sopenharmony_ci 1. refactored_ram_analysis_result.json:结果文件 161ba991379Sopenharmony_ci 1. ram_analysis_result.json:结果文件(供看板使用) 162ba991379Sopenharmony_ci 1. ram_analysis_result.xls:xls格式存储结果文件 163ba991379Sopenharmony_ci 164ba991379Sopenharmony_ci## 输出格式说明(json) 165ba991379Sopenharmony_ci 166ba991379Sopenharmony_ci1. refactored_ram_analysis_result.json 167ba991379Sopenharmony_ci```json 168ba991379Sopenharmony_ci{ 169ba991379Sopenharmony_ci "子系统名":{ 170ba991379Sopenharmony_ci "size": 子系统下所有进程占用内存的大小(单位:Byte), 171ba991379Sopenharmony_ci "部件名":{ 172ba991379Sopenharmony_ci "size": 部件下所有进程占用内存的大小(单位:Byte), 173ba991379Sopenharmony_ci "进程名":{ 174ba991379Sopenharmony_ci "size": 本进程占用内存的大小(单位:Byte), 175ba991379Sopenharmony_ci "elf":{ 176ba991379Sopenharmony_ci "拉起本进程的二进制文件名": 该二进制文件的大小(单位:Byte), 177ba991379Sopenharmony_ci } 178ba991379Sopenharmony_ci } 179ba991379Sopenharmony_ci } 180ba991379Sopenharmony_ci } 181ba991379Sopenharmony_ci} 182ba991379Sopenharmony_ci``` 183ba991379Sopenharmony_ci 184ba991379Sopenharmony_ci1. ram_analysis_result.json 185ba991379Sopenharmony_ci```json 186ba991379Sopenharmony_ci{ 187ba991379Sopenharmony_ci "进程名":{ 188ba991379Sopenharmony_ci "size": 本进程占用内存的大小(单位:字节), 189ba991379Sopenharmony_ci "子系统名": { 190ba991379Sopenharmony_ci "部件名": { 191ba991379Sopenharmony_ci "elf文件名": elf文件大小(单位:字节) 192ba991379Sopenharmony_ci ... 193ba991379Sopenharmony_ci } 194ba991379Sopenharmony_ci ... 195ba991379Sopenharmony_ci } 196ba991379Sopenharmony_ci ... 197ba991379Sopenharmony_ci }, 198ba991379Sopenharmony_ci ... 199ba991379Sopenharmony_ci} 200ba991379Sopenharmony_ci``` 201ba991379Sopenharmony_ci 202ba991379Sopenharmony_ci## 后续工作 203ba991379Sopenharmony_ci 204ba991379Sopenharmony_ci 205ba991379Sopenharmony_ci1. 考虑适当简化逻辑