• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) Huawei Technologies Co., Ltd. 2023. All rights reserved.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include "xpower_decoder.h"
16 #include <securec.h>
17 #include <climits>
18 #include <cstring>
19 #include "xpower_common.h"
XpowerDecoder()20 XpowerDecoder::XpowerDecoder() {}
21 
~XpowerDecoder()22 XpowerDecoder::~XpowerDecoder() {}
23 
CreateAppDetail(const AppDetail & appDetail)24 cJSON* XpowerDecoder::CreateAppDetail(const AppDetail& appDetail)
25 {
26     cJSON* cjsonAppDetail = cJSON_CreateObject();
27     cJSON_AddItemToObject(cjsonAppDetail, "cpu", CreateAppDetailCpu(appDetail.cpu()));
28     cJSON_AddItemToObject(cjsonAppDetail, "gpu", CreateAppDetailGpu(appDetail.gpu()));
29     cJSON_AddItemToObject(cjsonAppDetail, "wifi", CreateAppDetailWifi(appDetail.wifi()));
30     cJSON_AddItemToObject(cjsonAppDetail, "display", CreateAppDetailDisplay(appDetail.display()));
31     return cjsonAppDetail;
32 }
33 
CreateAppStatistic(const AppStatistic & appStatistic)34 cJSON* XpowerDecoder::CreateAppStatistic(const AppStatistic& appStatistic)
35 {
36     cJSON* cjsonAppStatistic = cJSON_CreateObject();
37     cJSON_AddItemToObject(cjsonAppStatistic, "audio", CreatAppStatisticCommon(appStatistic.audio()));
38     cJSON_AddItemToObject(cjsonAppStatistic, "bluetooth", CreatAppStatisticCommon(appStatistic.audio()));
39     cJSON_AddItemToObject(cjsonAppStatistic, "camera", CreatAppStatisticCommon(appStatistic.camera()));
40     cJSON_AddItemToObject(cjsonAppStatistic, "cpu", CreatAppStatisticCommon(appStatistic.cpu()));
41     cJSON_AddItemToObject(cjsonAppStatistic, "display", CreatAppStatisticCommon(appStatistic.display()));
42     cJSON_AddItemToObject(cjsonAppStatistic, "flashlight", CreatAppStatisticCommon(appStatistic.flashlight()));
43     cJSON_AddItemToObject(cjsonAppStatistic, "gpu", CreatAppStatisticCommon(appStatistic.gpu()));
44     cJSON_AddItemToObject(cjsonAppStatistic, "location", CreatAppStatisticCommon(appStatistic.location()));
45     cJSON_AddItemToObject(cjsonAppStatistic, "wifiscan", CreatAppStatisticCommon(appStatistic.wifiscan()));
46     return cjsonAppStatistic;
47 }
48 
CreateAppDetailGpu(const AppDetailGPU & appDeGpu)49 cJSON* XpowerDecoder::CreateAppDetailGpu(const AppDetailGPU& appDeGpu)
50 {
51     cJSON* cjsonGpu = cJSON_CreateObject();
52     cJSON_AddNumberToObject(cjsonGpu, "frequency_count", appDeGpu.frequency_count());
53     cJSON* frequencyArr = cJSON_CreateArray();
54     for (int i = 0; i < appDeGpu.frequency().size(); i++) {
55         cJSON_AddItemToArray(frequencyArr, cJSON_CreateNumber(appDeGpu.frequency(i)));
56     }
57     cJSON_AddItemToObject(cjsonGpu, "frequency", frequencyArr);
58 
59     cJSON* idleTimeArr = cJSON_CreateArray();
60     for (int i = 0; i < appDeGpu.idle_time().size(); i++) {
61         cJSON_AddItemToArray(idleTimeArr, cJSON_CreateNumber(appDeGpu.idle_time(i)));
62     }
63     cJSON_AddItemToObject(cjsonGpu, "idle_time", idleTimeArr);
64 
65     cJSON* runTimeArr = cJSON_CreateArray();
66     for (int i = 0; i < appDeGpu.run_time().size(); i++) {
67         cJSON_AddItemToArray(runTimeArr, cJSON_CreateNumber(appDeGpu.run_time(i)));
68     }
69     cJSON_AddItemToObject(cjsonGpu, "run_time", runTimeArr);
70     return cjsonGpu;
71 }
72 
CreateAppDetailWifi(const AppDetailWifi & appWifi)73 cJSON* XpowerDecoder::CreateAppDetailWifi(const AppDetailWifi& appWifi)
74 {
75     cJSON* cjsonWifi = cJSON_CreateObject();
76     cJSON_AddNumberToObject(cjsonWifi, "tx_packets", appWifi.tx_packets());
77     cJSON_AddNumberToObject(cjsonWifi, "rx_packets", appWifi.rx_packets());
78     cJSON_AddNumberToObject(cjsonWifi, "tx_bytes", appWifi.tx_bytes());
79     cJSON_AddNumberToObject(cjsonWifi, "rx_bytes", appWifi.rx_bytes());
80     return cjsonWifi;
81 }
82 
CreateAppDetailDisplay(const AppDetailDisplay & appDisplay)83 cJSON* XpowerDecoder::CreateAppDetailDisplay(const AppDetailDisplay& appDisplay)
84 {
85     cJSON* cjsonDisplay = cJSON_CreateObject();
86     cJSON_AddNumberToObject(cjsonDisplay, "count_1hz", appDisplay.count_1hz());
87     cJSON_AddNumberToObject(cjsonDisplay, "count_10hz", appDisplay.count_10hz());
88     cJSON_AddNumberToObject(cjsonDisplay, "count_15hz", appDisplay.count_15hz());
89     cJSON_AddNumberToObject(cjsonDisplay, "count_24hz", appDisplay.count_24hz());
90     cJSON_AddNumberToObject(cjsonDisplay, "count_30hz", appDisplay.count_30hz());
91     cJSON_AddNumberToObject(cjsonDisplay, "count_45hz", appDisplay.count_45hz());
92     cJSON_AddNumberToObject(cjsonDisplay, "count_60hz", appDisplay.count_60hz());
93     cJSON_AddNumberToObject(cjsonDisplay, "count_90hz", appDisplay.count_90hz());
94     cJSON_AddNumberToObject(cjsonDisplay, "count_120hz", appDisplay.count_120hz());
95     cJSON_AddNumberToObject(cjsonDisplay, "count_180hz", appDisplay.count_180hz());
96     return cjsonDisplay;
97 }
98 
CreateAppDetailCpu(const AppDetailCPU & appDeCpu)99 cJSON* XpowerDecoder::CreateAppDetailCpu(const AppDetailCPU& appDeCpu)
100 {
101     cJSON* cjsonCpu = cJSON_CreateObject();
102     cJSON_AddNumberToObject(cjsonCpu, "thread_count", appDeCpu.thread_count());
103     cJSON* threadLoadArr = cJSON_CreateArray();
104     for (int i = 0; i < appDeCpu.thread_load().size(); i++) {
105         cJSON_AddItemToArray(threadLoadArr, cJSON_CreateNumber(appDeCpu.thread_load(i)));
106     }
107     cJSON_AddItemToObject(cjsonCpu, "thread_load", threadLoadArr);
108 
109     cJSON* threadNameArr = cJSON_CreateArray();
110     for (int i = 0; i < appDeCpu.thread_name().size(); i++) {
111         cJSON_AddItemToArray(threadNameArr, cJSON_CreateString(appDeCpu.thread_name(i).c_str()));
112     }
113     cJSON_AddItemToObject(cjsonCpu, "thread_name", threadNameArr);
114 
115     cJSON* threadTimeArr = cJSON_CreateArray();
116     for (int i = 0; i < appDeCpu.thread_time().size(); i++) {
117         cJSON_AddItemToArray(threadTimeArr, cJSON_CreateNumber(appDeCpu.thread_time(i)));
118     }
119     cJSON_AddItemToObject(cjsonCpu, "thread_time", threadTimeArr);
120 
121     cJSON* threadEnergyArr = cJSON_CreateArray();
122     for (int i = 0; i < appDeCpu.thread_energy().size(); i++) {
123         cJSON_AddItemToArray(threadEnergyArr, cJSON_CreateNumber(appDeCpu.thread_energy(i)));
124     }
125     cJSON_AddItemToObject(cjsonCpu, "thread_energy", threadEnergyArr);
126     return cjsonCpu;
127 }
128 
CreatAppStatisticCommon(const AppStatisticCommon & appCom)129 cJSON* XpowerDecoder::CreatAppStatisticCommon(const AppStatisticCommon& appCom)
130 {
131     cJSON* cjsonAppCom = cJSON_CreateObject();
132     cJSON_AddNumberToObject(cjsonAppCom, "energy", appCom.energy());
133     cJSON_AddNumberToObject(cjsonAppCom, "time", appCom.time());
134     return cjsonAppCom;
135 }
136 
CreateRealBattery(const RealBattery & realBattery)137 cJSON* XpowerDecoder::CreateRealBattery(const RealBattery& realBattery)
138 {
139     cJSON* cjsonBattery = cJSON_CreateObject();
140     cJSON_AddNumberToObject(cjsonBattery, "capacity", realBattery.capacity());
141     cJSON_AddNumberToObject(cjsonBattery, "charge", realBattery.charge());
142     cJSON_AddNumberToObject(cjsonBattery, "current", realBattery.current());
143     cJSON_AddNumberToObject(cjsonBattery, "gas_gauge", realBattery.gas_gauge());
144     cJSON_AddNumberToObject(cjsonBattery, "level", realBattery.level());
145     cJSON_AddNumberToObject(cjsonBattery, "screen", realBattery.screen());
146     return cjsonBattery;
147 }
148 
CreateComponentTopCommon(const ComponentTopCommon & topCommon)149 cJSON* XpowerDecoder::CreateComponentTopCommon(const ComponentTopCommon& topCommon)
150 {
151     cJSON* cjsonTopCommon = cJSON_CreateObject();
152     cJSON_AddNumberToObject(cjsonTopCommon, "count", topCommon.count());
153     cJSON* appnameArr = cJSON_CreateArray();
154     for (int i = 0; i < topCommon.appname().size(); i++) {
155         cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topCommon.appname(i).c_str()));
156     }
157     cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
158 
159     cJSON* durationArr = cJSON_CreateArray();
160     for (int i = 0; i < topCommon.background_duration().size(); i++) {
161         cJSON_AddItemToArray(durationArr, cJSON_CreateNumber(topCommon.background_duration(i)));
162     }
163     cJSON_AddItemToObject(cjsonTopCommon, "background_duration", durationArr);
164 
165     cJSON* energyArr = cJSON_CreateArray();
166     for (int i = 0; i < topCommon.background_energy().size(); i++) {
167         cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topCommon.background_energy(i)));
168     }
169     cJSON_AddItemToObject(cjsonTopCommon, "background_energy", energyArr);
170 
171     cJSON* foreDurationArr = cJSON_CreateArray();
172     for (int i = 0; i < topCommon.foreground_duration().size(); i++) {
173         cJSON_AddItemToArray(foreDurationArr, cJSON_CreateNumber(topCommon.foreground_duration(i)));
174     }
175     cJSON_AddItemToObject(cjsonTopCommon, "foreground_duration", foreDurationArr);
176 
177     cJSON* foreEnergyArr = cJSON_CreateArray();
178     for (int i = 0; i < topCommon.foreground_energy().size(); i++) {
179         cJSON_AddItemToArray(foreEnergyArr, cJSON_CreateNumber(topCommon.foreground_energy(i)));
180     }
181     cJSON_AddItemToObject(cjsonTopCommon, "foreground_energy", foreEnergyArr);
182 
183     cJSON* screenDuraArr = cJSON_CreateArray();
184     for (int i = 0; i < topCommon.screen_off_duration().size(); i++) {
185         cJSON_AddItemToArray(screenDuraArr, cJSON_CreateNumber(topCommon.screen_off_duration(i)));
186     }
187     cJSON_AddItemToObject(cjsonTopCommon, "screen_off_duration", screenDuraArr);
188 
189     cJSON* screenEnergyArr = cJSON_CreateArray();
190     for (int i = 0; i < topCommon.screen_off_energy().size(); i++) {
191         cJSON_AddItemToArray(screenEnergyArr, cJSON_CreateNumber(topCommon.screen_off_energy(i)));
192     }
193     cJSON_AddItemToObject(cjsonTopCommon, "screen_off_energy", screenEnergyArr);
194 
195     cJSON* screenOnDuraArr = cJSON_CreateArray();
196     for (int i = 0; i < topCommon.screen_on_duration().size(); i++) {
197         cJSON_AddItemToArray(screenOnDuraArr, cJSON_CreateNumber(topCommon.screen_on_duration(i)));
198     }
199     cJSON_AddItemToObject(cjsonTopCommon, "screen_on_duration", screenOnDuraArr);
200 
201     cJSON* screenOnEnergyArr = cJSON_CreateArray();
202     for (int i = 0; i < topCommon.screen_on_energy().size(); i++) {
203         cJSON_AddItemToArray(screenOnEnergyArr, cJSON_CreateNumber(topCommon.screen_on_energy(i)));
204     }
205     cJSON_AddItemToObject(cjsonTopCommon, "screen_on_energy", screenOnEnergyArr);
206     return cjsonTopCommon;
207 }
CreateComponentTopCamera(const ComponentTopCamera & topCamera)208 cJSON* XpowerDecoder::CreateComponentTopCamera(const ComponentTopCamera& topCamera)
209 {
210     cJSON* cjsonTopCommon = cJSON_CreateObject();
211     cJSON_AddNumberToObject(cjsonTopCommon, "count", topCamera.count());
212     cJSON* appnameArr = cJSON_CreateArray();
213     for (int i = 0; i < topCamera.appname().size(); i++) {
214         cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topCamera.appname(i).c_str()));
215     }
216     cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
217 
218     cJSON* cameryIdArr = cJSON_CreateArray();
219     for (int i = 0; i < topCamera.camera_id().size(); i++) {
220         cJSON_AddItemToArray(cameryIdArr, cJSON_CreateNumber(topCamera.camera_id(i)));
221     }
222     cJSON_AddItemToObject(cjsonTopCommon, "camera_id", cameryIdArr);
223 
224     cJSON* durationArr = cJSON_CreateArray();
225     for (int i = 0; i < topCamera.background_duration().size(); i++) {
226         cJSON_AddItemToArray(durationArr, cJSON_CreateNumber(topCamera.background_duration(i)));
227     }
228     cJSON_AddItemToObject(cjsonTopCommon, "background_duration", durationArr);
229 
230     cJSON* energyArr = cJSON_CreateArray();
231     for (int i = 0; i < topCamera.background_energy().size(); i++) {
232         cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topCamera.background_energy(i)));
233     }
234     cJSON_AddItemToObject(cjsonTopCommon, "background_energy", energyArr);
235 
236     cJSON* foreDurationArr = cJSON_CreateArray();
237     for (int i = 0; i < topCamera.foreground_duration().size(); i++) {
238         cJSON_AddItemToArray(foreDurationArr, cJSON_CreateNumber(topCamera.foreground_duration(i)));
239     }
240     cJSON_AddItemToObject(cjsonTopCommon, "foreground_duration", foreDurationArr);
241 
242     cJSON* foreEnergyArr = cJSON_CreateArray();
243     for (int i = 0; i < topCamera.foreground_energy().size(); i++) {
244         cJSON_AddItemToArray(foreEnergyArr, cJSON_CreateNumber(topCamera.foreground_energy(i)));
245     }
246     cJSON_AddItemToObject(cjsonTopCommon, "foreground_energy", foreEnergyArr);
247 
248     cJSON* screenDuraArr = cJSON_CreateArray();
249     for (int i = 0; i < topCamera.screen_off_duration().size(); i++) {
250         cJSON_AddItemToArray(screenDuraArr, cJSON_CreateNumber(topCamera.screen_off_duration(i)));
251     }
252     cJSON_AddItemToObject(cjsonTopCommon, "screen_off_duration", screenDuraArr);
253 
254     cJSON* screenEnergyArr = cJSON_CreateArray();
255     for (int i = 0; i < topCamera.screen_off_energy().size(); i++) {
256         cJSON_AddItemToArray(screenEnergyArr, cJSON_CreateNumber(topCamera.screen_off_energy(i)));
257     }
258     cJSON_AddItemToObject(cjsonTopCommon, "screen_off_energy", screenEnergyArr);
259 
260     cJSON* screenOnDuraArr = cJSON_CreateArray();
261     for (int i = 0; i < topCamera.screen_on_duration().size(); i++) {
262         cJSON_AddItemToArray(screenOnDuraArr, cJSON_CreateNumber(topCamera.screen_on_duration(i)));
263     }
264     cJSON_AddItemToObject(cjsonTopCommon, "screen_on_duration", screenOnDuraArr);
265 
266     cJSON* screenOnEnergyArr = cJSON_CreateArray();
267     for (int i = 0; i < topCamera.screen_on_energy().size(); i++) {
268         cJSON_AddItemToArray(screenOnEnergyArr, cJSON_CreateNumber(topCamera.screen_on_energy(i)));
269     }
270     cJSON_AddItemToObject(cjsonTopCommon, "screen_on_energy", screenOnEnergyArr);
271     return cjsonTopCommon;
272 }
273 
CreateComponentTopCpu(const ComponentTopCpu & topCpu)274 cJSON* XpowerDecoder::CreateComponentTopCpu(const ComponentTopCpu& topCpu)
275 {
276     cJSON* cjsonTopCommon = cJSON_CreateObject();
277     cJSON_AddNumberToObject(cjsonTopCommon, "count", topCpu.count());
278     cJSON* appnameArr = cJSON_CreateArray();
279     for (int i = 0; i < topCpu.appname().size(); i++) {
280         cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topCpu.appname(i).c_str()));
281     }
282     cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
283 
284     cJSON* userIdArr = cJSON_CreateArray();
285     for (int i = 0; i < topCpu.uid().size(); i++) {
286         cJSON_AddItemToArray(userIdArr, cJSON_CreateNumber(topCpu.uid(i)));
287     }
288     cJSON_AddItemToObject(cjsonTopCommon, "uid", userIdArr);
289 
290     cJSON* durationArr = cJSON_CreateArray();
291     for (int i = 0; i < topCpu.background_duration().size(); i++) {
292         cJSON_AddItemToArray(durationArr, cJSON_CreateNumber(topCpu.background_duration(i)));
293     }
294     cJSON_AddItemToObject(cjsonTopCommon, "background_duration", durationArr);
295 
296     cJSON* energyArr = cJSON_CreateArray();
297     for (int i = 0; i < topCpu.background_energy().size(); i++) {
298         cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topCpu.background_energy(i)));
299     }
300     cJSON_AddItemToObject(cjsonTopCommon, "background_energy", energyArr);
301 
302     cJSON* foreDurationArr = cJSON_CreateArray();
303     for (int i = 0; i < topCpu.foreground_duration().size(); i++) {
304         cJSON_AddItemToArray(foreDurationArr, cJSON_CreateNumber(topCpu.foreground_duration(i)));
305     }
306     cJSON_AddItemToObject(cjsonTopCommon, "foreground_duration", foreDurationArr);
307 
308     cJSON* foreEnergyArr = cJSON_CreateArray();
309     for (int i = 0; i < topCpu.foreground_energy().size(); i++) {
310         cJSON_AddItemToArray(foreEnergyArr, cJSON_CreateNumber(topCpu.foreground_energy(i)));
311     }
312     cJSON_AddItemToObject(cjsonTopCommon, "foreground_energy", foreEnergyArr);
313 
314     cJSON* screenDuraArr = cJSON_CreateArray();
315     for (int i = 0; i < topCpu.screen_off_duration().size(); i++) {
316         cJSON_AddItemToArray(screenDuraArr, cJSON_CreateNumber(topCpu.screen_off_duration(i)));
317     }
318     cJSON_AddItemToObject(cjsonTopCommon, "screen_off_duration", screenDuraArr);
319 
320     cJSON* screenEnergyArr = cJSON_CreateArray();
321     for (int i = 0; i < topCpu.screen_off_energy().size(); i++) {
322         cJSON_AddItemToArray(screenEnergyArr, cJSON_CreateNumber(topCpu.screen_off_energy(i)));
323     }
324     cJSON_AddItemToObject(cjsonTopCommon, "screen_off_energy", screenEnergyArr);
325 
326     cJSON* screenOnDuraArr = cJSON_CreateArray();
327     for (int i = 0; i < topCpu.screen_on_duration().size(); i++) {
328         cJSON_AddItemToArray(screenOnDuraArr, cJSON_CreateNumber(topCpu.screen_on_duration(i)));
329     }
330     cJSON_AddItemToObject(cjsonTopCommon, "screen_on_duration", screenOnDuraArr);
331 
332     cJSON* screenOnEnergyArr = cJSON_CreateArray();
333     for (int i = 0; i < topCpu.screen_on_energy().size(); i++) {
334         cJSON_AddItemToArray(screenOnEnergyArr, cJSON_CreateNumber(topCpu.screen_on_energy(i)));
335     }
336     cJSON_AddItemToObject(cjsonTopCommon, "screen_on_energy", screenOnEnergyArr);
337 
338     cJSON* loadArr = cJSON_CreateArray();
339     for (int i = 0; i < topCpu.load().size(); i++) {
340         cJSON_AddItemToArray(loadArr, cJSON_CreateNumber(topCpu.load(i)));
341     }
342     cJSON_AddItemToObject(cjsonTopCommon, "load", loadArr);
343 
344     return cjsonTopCommon;
345 }
346 
CreateComponentTopDisplay(const ComponentTopDisplay & topDisplay)347 cJSON* XpowerDecoder::CreateComponentTopDisplay(const ComponentTopDisplay& topDisplay)
348 {
349     cJSON* cjsonTopCommon = cJSON_CreateObject();
350     cJSON_AddNumberToObject(cjsonTopCommon, "count", topDisplay.count());
351     cJSON* appnameArr = cJSON_CreateArray();
352     for (int i = 0; i < topDisplay.appname().size(); i++) {
353         cJSON_AddItemToArray(appnameArr, cJSON_CreateString(topDisplay.appname(i).c_str()));
354     }
355     cJSON_AddItemToObject(cjsonTopCommon, "appname", appnameArr);
356 
357     cJSON* timeArr = cJSON_CreateArray();
358     for (int i = 0; i < topDisplay.time().size(); i++) {
359         cJSON_AddItemToArray(timeArr, cJSON_CreateNumber(topDisplay.time(i)));
360     }
361     cJSON_AddItemToObject(cjsonTopCommon, "time", timeArr);
362 
363     cJSON* energyArr = cJSON_CreateArray();
364     for (int i = 0; i < topDisplay.energy().size(); i++) {
365         cJSON_AddItemToArray(energyArr, cJSON_CreateNumber(topDisplay.energy(i)));
366     }
367     cJSON_AddItemToObject(cjsonTopCommon, "energy", energyArr);
368     return cjsonTopCommon;
369 }
370 
CreateComponentTop(const ComponentTop & componentTop)371 cJSON* XpowerDecoder::CreateComponentTop(const ComponentTop& componentTop)
372 {
373     cJSON* jsonComTop = cJSON_CreateObject();
374     cJSON_AddItemToObject(jsonComTop, "audio", CreateComponentTopCommon(componentTop.audio()));
375     cJSON_AddItemToObject(jsonComTop, "bluetooth", CreateComponentTopCommon(componentTop.bluetooth()));
376     cJSON_AddItemToObject(jsonComTop, "camera", CreateComponentTopCamera(componentTop.camera()));
377     cJSON_AddItemToObject(jsonComTop, "cpu", CreateComponentTopCpu(componentTop.cpu()));
378     cJSON_AddItemToObject(jsonComTop, "display", CreateComponentTopDisplay(componentTop.display()));
379     cJSON_AddItemToObject(jsonComTop, "flashlight", CreateComponentTopCommon(componentTop.flashlight()));
380     cJSON_AddItemToObject(jsonComTop, "gpu", CreateComponentTopDisplay(componentTop.gpu()));
381     cJSON_AddItemToObject(jsonComTop, "location", CreateComponentTopCommon(componentTop.location()));
382     cJSON_AddItemToObject(jsonComTop, "wifiscan", CreateComponentTopCommon(componentTop.wifiscan()));
383     return jsonComTop;
384 }
385 
CreateAbnormalEventInfo(const AbnormalEventInfo & eventInfo)386 cJSON* XpowerDecoder::CreateAbnormalEventInfo(const AbnormalEventInfo& eventInfo)
387 {
388     cJSON* jsonEventInfo = cJSON_CreateObject();
389     cJSON_AddStringToObject(jsonEventInfo, "abnormal_type",
390                             eventInfo.AbnormalType_Name(eventInfo.abnormal_type()).c_str());
391     cJSON_AddNumberToObject(jsonEventInfo, "usage_time", eventInfo.usage_time());
392     cJSON_AddNumberToObject(jsonEventInfo, "usage_energy", eventInfo.usage_energy());
393     cJSON_AddNumberToObject(jsonEventInfo, "usage_load", eventInfo.usage_load());
394     cJSON_AddNumberToObject(jsonEventInfo, "usage_freq", eventInfo.usage_freq());
395     cJSON_AddNumberToObject(jsonEventInfo, "usage_count", eventInfo.usage_count());
396     return jsonEventInfo;
397 }
398 
CreateAbnormalEvents(const AbnormalEvents & abnormEvent)399 cJSON* XpowerDecoder::CreateAbnormalEvents(const AbnormalEvents& abnormEvent)
400 {
401     cJSON* jsonEvent = cJSON_CreateObject();
402     cJSON_AddNumberToObject(jsonEvent, "anomaly_start_time", abnormEvent.anomaly_start_time());
403     cJSON_AddNumberToObject(jsonEvent, "anomaly_end_time", abnormEvent.anomaly_end_time());
404     cJSON_AddNumberToObject(jsonEvent, "count", abnormEvent.count());
405     cJSON* eventsArr = cJSON_CreateArray();
406     for (int i = 0; i < abnormEvent.events().size(); i++) {
407         cJSON_AddItemToArray(eventsArr, CreateAbnormalEventInfo(abnormEvent.events(i)));
408     }
409     return jsonEvent;
410 }
411 
DecodeXpowerMessage(OptimizeReport & dataProto)412 std::string XpowerDecoder::DecodeXpowerMessage(OptimizeReport& dataProto)
413 {
414     std::string retStr;
415     cJSON* optReport = cJSON_CreateObject();
416     cJSON_AddNumberToObject(optReport, "start_time", dataProto.start_time());
417     cJSON_AddNumberToObject(optReport, "end_time", dataProto.end_time());
418     cJSON_AddStringToObject(optReport, "bundle_name", dataProto.bundle_name().c_str());
419     cJSON_AddNumberToObject(optReport, "message_type", dataProto.message_type());
420     uint32_t mesType = dataProto.message_type();
421     if ((mesType & OptimizeMessageType::MESSAGE_REAL_BATTERY) != 0) {
422         cJSON_AddItemToObject(optReport, "real_battery", CreateRealBattery(dataProto.real_battery()));
423     }
424     if ((mesType & OptimizeMessageType::MESSAGE_APP_STATISTIC) != 0) {
425         cJSON_AddItemToObject(optReport, "app_statistic", CreateAppStatistic(dataProto.app_statistic()));
426     }
427     if ((mesType & OptimizeMessageType::MESSAGE_APP_DETAIL) != 0) {
428         cJSON_AddItemToObject(optReport, "app_detail", CreateAppDetail(dataProto.app_detail()));
429     }
430     if ((mesType & OptimizeMessageType::MESSAGE_COMPONENT_TOP) != 0) {
431         cJSON_AddItemToObject(optReport, "component_top", CreateComponentTop(dataProto.component_top()));
432     }
433     if ((mesType & OptimizeMessageType::MESSAGE_ABNORMAL_EVENTS) != 0) {
434         cJSON_AddItemToObject(optReport, "abnormal_events", CreateAbnormalEvents(dataProto.abnormal_events()));
435     }
436     retStr = cJSON_Print(optReport);
437     cJSON_Delete(optReport);
438     return retStr;
439 }
440