1 /*
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
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 
16 #include "form_record_report.h"
17 #include "fms_log_wrapper.h"
18 #include "form_event_report.h"
19 
20 namespace OHOS {
21 namespace AppExecFwk {
FormRecordReport()22 FormRecordReport::FormRecordReport()
23 {
24 }
25 
~FormRecordReport()26 FormRecordReport::~FormRecordReport()
27 {
28     ClearReportInfo();
29 }
30 
GetFormRecords()31 std::map<int64_t, FormRecordReportInfo>& FormRecordReport::GetFormRecords()
32 {
33     return formRecordReportMap_;
34 }
35 
SetFormRecordRecordInfo(int64_t formId,const Want & want)36 void FormRecordReport::SetFormRecordRecordInfo(int64_t formId, const Want &want)
37 {
38     FormRecordReportInfo info;
39     std::lock_guard<std::mutex> guard(formRecordReportMutex_);
40     info.bundleName = want.GetElement().GetBundleName();
41     info.moduleName = want.GetStringParam(Constants::PARAM_MODULE_NAME_KEY);
42     info.formName = want.GetStringParam(Constants::PARAM_FORM_NAME_KEY);
43     if (formRecordReportMap_.find(formId) == formRecordReportMap_.end()) {
44         formRecordReportMap_[formId] = info;
45     }
46 }
47 
IncreaseUpdateTimes(int64_t formId,HiSysEventPointType type)48 void FormRecordReport::IncreaseUpdateTimes(int64_t formId, HiSysEventPointType type)
49 {
50     HILOG_DEBUG("formId:%{public}" PRId64, formId);
51     FormRecordReportInfo info;
52     std::lock_guard<std::mutex> guard(formRecordReportMutex_);
53     if (formRecordReportMap_.find(formId) != formRecordReportMap_.end()) {
54         info = formRecordReportMap_[formId];
55         switch (type) {
56             case TYPE_DAILY_REFRESH:
57                 info.dailyRefreshTimes++;
58                 break;
59             case TYPE_INVISIBLE_UPDATE:
60                 info.invisibleRefreshTimes++;
61                 break;
62             case TYPE_HIGH_FREQUENCY:
63                 info.hfRefreshBlockTimes++;
64                 break;
65             case TYPE_INVISIBLE_INTERCEPT:
66                 info.invisibleRefreshBlockTimes++;
67                 break;
68             case TYPE_HIGH_LOAD:
69                 info.highLoadRefreshBlockTimes = 0;
70                 break;
71             case TYPE_ACTIVE_RECVOER_UPDATE:
72                 info.activeRecoverRefreshTimes = 0;
73                 break;
74             case TYPE_PASSIVE_RECOVER_UPDATE:
75                 info.passiveRecoverRefreshTimes++;
76                 break;
77             case TYPE_HF_RECOVER_UPDATE:
78                 info.hfRecoverRefreshTimes++;
79                 break;
80             case TYPE_OFFLOAD_RECOVER_UPDATE:
81                 info.offloadRecoverRefreshTimes = 0;
82                 break;
83             default:
84                 break;
85         }
86         formRecordReportMap_[formId] = info;
87     }
88 }
89 
HandleFormRefreshCount()90 void FormRecordReport::HandleFormRefreshCount()
91 {
92     std::lock_guard<std::mutex> guard(formRecordReportMutex_);
93     for (const auto& entry : formRecordReportMap_) {
94         int64_t formId = entry.first;
95         if (formId <= 0) {
96             return;
97         }
98         FormRecordReportInfo record = entry.second;
99         NewFormEventInfo eventInfo;
100         eventInfo.formId = formId;
101         eventInfo.bundleName = record.bundleName;
102         eventInfo.moduleName = record.moduleName;
103         eventInfo.formName = record.formName;
104         eventInfo.dailyRefreshTimes = record.dailyRefreshTimes;
105         eventInfo.invisibleRefreshTimes = record.invisibleRefreshTimes;
106         eventInfo.hfRefreshBlockTimes = record.hfRefreshBlockTimes;
107         eventInfo.invisibleRefreshBlockTimes = record.invisibleRefreshBlockTimes;
108         eventInfo.highLoadRefreshBlockTimes = record.highLoadRefreshBlockTimes;
109         eventInfo.activeRecoverRefreshTimes = record.activeRecoverRefreshTimes;
110         eventInfo.passiveRecoverRefreshTimes = record.passiveRecoverRefreshTimes;
111         eventInfo.hfRecoverRefreshTimes = record.hfRecoverRefreshTimes;
112         eventInfo.offloadRecoverRefreshTimes = record.offloadRecoverRefreshTimes;
113         FormEventReport::SendFormRefreshCountEvent(FormEventName::UPDATE_FORM_REFRESH_TIMES,
114             HiSysEventType::STATISTIC, eventInfo);
115     }
116     ClearReportInfo();
117 }
118 
ClearReportInfo()119 void FormRecordReport::ClearReportInfo()
120 {
121     formRecordReportMap_.clear();
122 }
123 }  // namespace AppExecFwk
124 }  // namespace OHOS