1ba991379Sopenharmony_ci[toc]
2ba991379Sopenharmony_ci
3ba991379Sopenharmony_ci# Rom_analyzer.py
4ba991379Sopenharmony_ci
5ba991379Sopenharmony_ci## 功能介绍
6ba991379Sopenharmony_ci
7ba991379Sopenharmony_ci基于BUILD.gnbundle.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.json120ba991379Sopenharmony_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. 考虑适当简化逻辑