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