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