1 /*
2 * Copyright (c) 2023 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 <map>
17 #include <hisysevent.h>
18 #include "pip_report.h"
19 #include "window_manager_hilog.h"
20
21 namespace OHOS {
22 namespace Rosen {
23 namespace {
24 const std::string PNAMEID = "windowManager";
25 const std::string PVERSION = "1.0";
26 }
27 WM_IMPLEMENT_SINGLE_INSTANCE(PiPReporter)
28
29 #define LOG_WHEN_ERROR(errCode) \
30 do { \
31 if ((errCode) != 0) { \
32 TLOGE(WmsLogTag::WMS_PIP, "Write HiSysEvent error, errCode:%{public}d", errCode); \
33 } \
34 } while (false)
35
36 static std::map<std::string, int32_t> CONTROL_ACTION_MAP = {
37 {"playbackStateChanged", 0},
38 {"nextVideo", 1},
39 {"previousVideo", 2},
40 {"hangUp", 3},
41 {"micStateChanged", 4},
42 {"videoStateChanged", 5},
43 {"voiceStateChanged", 6},
44 {"fastForward", 7},
45 {"fastBackward", 8}
46 };
47 constexpr char EVENT_KEY_SOURCE[] = "SOURCE";
48 constexpr char EVENT_KEY_TEMPLATE_TYPE[] = "TEMPLATE_TYPE";
49 constexpr char EVENT_KEY_PNAMEID[] = "PNAMEID";
50 constexpr char EVENT_KEY_PVERSION[] = "PVERSION";
51 constexpr char EVENT_KEY_START_PACKAGE_NAME[] = "START_PACKAGE_NAME";
52 constexpr char EVENT_KEY_STOP_PACKAGE_NAME[] = "STOP_PACKAGE_NAME";
53 constexpr char EVENT_KEY_OPERATION_PACKAGE_NAME[] = "OPERATION_PACKAGE_NAME";
54 constexpr char EVENT_KEY_OPERATION_CODE[] = "OPERATION_CODE";
55 constexpr char EVENT_KEY_OPERATION_ERROR_REASON[] = "OPERATION_ERROR_REASON";
56 constexpr char EVENT_KEY_ACTION_EVENT[] = "ACTION_EVENT";
57 constexpr char EVENT_KEY_WINDOW_WIDTH[] = "WINDOW_WIDTH";
58 constexpr char EVENT_KEY_WINDOW_HEIGHT[] = "WINDOW_HEIGHT";
59
SetCurrentPackageName(const std::string & packageName)60 void PiPReporter::SetCurrentPackageName(const std::string& packageName)
61 {
62 std::lock_guard<std::mutex> lock(packageNameMutex_);
63 packageName_ = packageName;
64 }
65
GetPackageName() const66 std::string PiPReporter::GetPackageName() const
67 {
68 std::lock_guard<std::mutex> lock(packageNameMutex_);
69 return packageName_;
70 }
71
ReportPiPStartWindow(int32_t source,int32_t templateType,int32_t isSuccess,const std::string & errorReason)72 void PiPReporter::ReportPiPStartWindow(int32_t source, int32_t templateType,
73 int32_t isSuccess, const std::string& errorReason)
74 {
75 TLOGI(WmsLogTag::WMS_PIP, "Report start pip widow");
76 if (source == 0) {
77 TLOGI(WmsLogTag::WMS_PIP, "need not report start pip widow");
78 return;
79 }
80 std::string eventName = "START_PIP";
81 int32_t ret = HiSysEventWrite(
82 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
83 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
84 EVENT_KEY_PNAMEID, PNAMEID,
85 EVENT_KEY_PVERSION, PVERSION,
86 EVENT_KEY_SOURCE, source,
87 EVENT_KEY_TEMPLATE_TYPE, templateType,
88 EVENT_KEY_START_PACKAGE_NAME, GetPackageName(),
89 EVENT_KEY_OPERATION_CODE, isSuccess,
90 EVENT_KEY_OPERATION_ERROR_REASON, errorReason);
91 LOG_WHEN_ERROR(ret);
92 }
93
ReportPiPStopWindow(int32_t source,int32_t templateType,int32_t isSuccess,const std::string & errorReason)94 void PiPReporter::ReportPiPStopWindow(int32_t source, int32_t templateType,
95 int32_t isSuccess, const std::string& errorReason)
96 {
97 TLOGI(WmsLogTag::WMS_PIP, "Report stop pip widow");
98 if (source == 0) {
99 TLOGI(WmsLogTag::WMS_PIP, "need not report stop pip widow");
100 return;
101 }
102 std::string eventName = "STOP_PIP";
103 int32_t ret = HiSysEventWrite(
104 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
105 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
106 EVENT_KEY_PNAMEID, PNAMEID,
107 EVENT_KEY_PVERSION, PVERSION,
108 EVENT_KEY_SOURCE, source,
109 EVENT_KEY_TEMPLATE_TYPE, templateType,
110 EVENT_KEY_STOP_PACKAGE_NAME, GetPackageName(),
111 EVENT_KEY_OPERATION_CODE, isSuccess,
112 EVENT_KEY_OPERATION_ERROR_REASON, errorReason);
113 LOG_WHEN_ERROR(ret);
114 }
115
ReportPiPActionEvent(int32_t templateType,const std::string & actionEvent)116 void PiPReporter::ReportPiPActionEvent(int32_t templateType, const std::string& actionEvent)
117 {
118 TLOGI(WmsLogTag::WMS_PIP, "Report pip widow action event");
119 std::string eventName = "CONTROL_PANNEL_ACTION_EVENT";
120 if (CONTROL_ACTION_MAP.find(actionEvent) == CONTROL_ACTION_MAP.end()) {
121 TLOGE(WmsLogTag::WMS_PIP, "actionEvent %{public}s not found", actionEvent.c_str());
122 return;
123 }
124 int32_t currentAction = CONTROL_ACTION_MAP[actionEvent];
125 int32_t ret = HiSysEventWrite(
126 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
127 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
128 EVENT_KEY_PNAMEID, PNAMEID,
129 EVENT_KEY_PVERSION, PVERSION,
130 EVENT_KEY_TEMPLATE_TYPE, templateType,
131 EVENT_KEY_ACTION_EVENT, currentAction,
132 EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
133 LOG_WHEN_ERROR(ret);
134 }
135
ReportPiPControlEvent(int32_t templateType,PiPControlType controlType)136 void PiPReporter::ReportPiPControlEvent(int32_t templateType, PiPControlType controlType)
137 {
138 TLOGI(WmsLogTag::WMS_PIP, "templateType:%{public}d, controlType:%{public}d", templateType, controlType);
139 int32_t ret = HiSysEventWrite(
140 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, "CONTROL_CONTROL_EVENT",
141 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
142 EVENT_KEY_PNAMEID, PNAMEID,
143 EVENT_KEY_PVERSION, PVERSION,
144 EVENT_KEY_TEMPLATE_TYPE, templateType,
145 EVENT_KEY_ACTION_EVENT, static_cast<uint32_t>(controlType),
146 EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
147 LOG_WHEN_ERROR(ret);
148 }
149
ReportPiPRatio(int32_t windowWidth,int32_t windowHeight)150 void PiPReporter::ReportPiPRatio(int32_t windowWidth, int32_t windowHeight)
151 {
152 TLOGI(WmsLogTag::WMS_PIP, "Report pip widow ratio");
153 std::string eventName = "UPDATE_PIP_RATIO";
154 int32_t ret = HiSysEventWrite(
155 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
156 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
157 EVENT_KEY_PNAMEID, PNAMEID,
158 EVENT_KEY_PVERSION, PVERSION,
159 EVENT_KEY_WINDOW_WIDTH, windowWidth,
160 EVENT_KEY_WINDOW_HEIGHT, windowHeight,
161 EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
162 LOG_WHEN_ERROR(ret);
163 }
164
ReportPiPRestore()165 void PiPReporter::ReportPiPRestore()
166 {
167 TLOGI(WmsLogTag::WMS_PIP, "Report pip widow restore");
168 std::string eventName = "RESOTRE_PIP";
169 int32_t ret = HiSysEventWrite(
170 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
171 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
172 EVENT_KEY_PNAMEID, PNAMEID,
173 EVENT_KEY_PVERSION, PVERSION,
174 EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
175 LOG_WHEN_ERROR(ret);
176 }
177 } // namespace Rosen
178 } // namespace OHOS
179