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 constexpr HiviewDFX::HiLogLabel LABEL = {LOG_CORE, HILOG_DOMAIN_WINDOW, "PictureInPictureReport"};
25 const std::string PNAMEID = "windowManager";
26 const std::string PVERSION = "1.0";
27 }
28 WM_IMPLEMENT_SINGLE_INSTANCE(PiPReporter)
29
30 static std::map<std::string, int32_t> CONTROL_ACTION_MAP = {
31 {"playbackStateChanged", 0},
32 {"nextVideo", 1},
33 {"previousVideo", 2},
34 {"hangUp", 3},
35 {"microphoneStateChanged", 4},
36 {"cameraStateChanged", 5},
37 {"videoStateChanged", 6}
38 };
39 constexpr char EVENT_KEY_SOURCE[] = "SOURCE";
40 constexpr char EVENT_KEY_TEMPLATE_TYPE[] = "TEMPLATE_TYPE";
41 constexpr char EVENT_KEY_PNAMEID[] = "PNAMEID";
42 constexpr char EVENT_KEY_PVERSION[] = "PVERSION";
43 constexpr char EVENT_KEY_START_PACKAGE_NAME[] = "START_PACKAGE_NAME";
44 constexpr char EVENT_KEY_STOP_PACKAGE_NAME[] = "STOP_PACKAGE_NAME";
45 constexpr char EVENT_KEY_OPERATION_PACKAGE_NAME[] = "OPERATION_PACKAGE_NAME";
46 constexpr char EVENT_KEY_OPERATION_CODE[] = "OPERATION_CODE";
47 constexpr char EVENT_KEY_OPERATION_ERROR_REASON[] = "OPERATION_ERROR_REASON";
48 constexpr char EVENT_KEY_ACTION_EVENT[] = "ACTION_EVENT";
49 constexpr char EVENT_KEY_SCALE_LEVEL[] = "SCALE_LEVEL";
50 constexpr char EVENT_KEY_WINDOW_WIDTH[] = "WINDOW_WIDTH";
51 constexpr char EVENT_KEY_WINDOW_HEIGHT[] = "WINDOW_HEIGHT";
52
SetCurrentPackageName(const std::string & packageName)53 void PiPReporter::SetCurrentPackageName(const std::string &packageName)
54 {
55 packageName_ = packageName;
56 }
57
ReportPiPStartWindow(int32_t source,int32_t templateType,int32_t isSuccess,const std::string & errorReason)58 void PiPReporter::ReportPiPStartWindow(int32_t source, int32_t templateType,
59 int32_t isSuccess, const std::string& errorReason)
60 {
61 WLOGI("Report start pip widow");
62 if (source == 0) {
63 WLOGI("need not report start pip widow");
64 return;
65 }
66 std::string eventName = "START_PIP";
67 int32_t ret = HiSysEventWrite(
68 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
69 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
70 EVENT_KEY_PNAMEID, PNAMEID,
71 EVENT_KEY_PVERSION, PVERSION,
72 EVENT_KEY_SOURCE, source,
73 EVENT_KEY_TEMPLATE_TYPE, templateType,
74 EVENT_KEY_START_PACKAGE_NAME, packageName_,
75 EVENT_KEY_OPERATION_CODE, isSuccess,
76 EVENT_KEY_OPERATION_ERROR_REASON, errorReason);
77 if (ret != 0) {
78 WLOGFE("Write HiSysEvent error, ret:%{public}d", ret);
79 }
80 }
81
ReportPiPStopWindow(int32_t source,int32_t templateType,int32_t isSuccess,const std::string & errorReason)82 void PiPReporter::ReportPiPStopWindow(int32_t source, int32_t templateType,
83 int32_t isSuccess, const std::string& errorReason)
84 {
85 WLOGI("Report stop pip widow");
86 if (source == 0) {
87 WLOGI("need not report stop pip widow");
88 return;
89 }
90 std::string eventName = "STOP_PIP";
91 int32_t ret = HiSysEventWrite(
92 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
93 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
94 EVENT_KEY_PNAMEID, PNAMEID,
95 EVENT_KEY_PVERSION, PVERSION,
96 EVENT_KEY_SOURCE, source,
97 EVENT_KEY_TEMPLATE_TYPE, templateType,
98 EVENT_KEY_STOP_PACKAGE_NAME, packageName_,
99 EVENT_KEY_OPERATION_CODE, isSuccess,
100 EVENT_KEY_OPERATION_ERROR_REASON, errorReason);
101 if (ret != 0) {
102 WLOGFE("Write HiSysEvent error, ret:%{public}d", ret);
103 }
104 }
105
ReportPiPActionEvent(int32_t templateType,const std::string & actionEvent)106 void PiPReporter::ReportPiPActionEvent(int32_t templateType, const std::string &actionEvent)
107 {
108 WLOGI("Report pip widow action event");
109 std::string eventName = "CONTROL_PANNEL_ACTION_EVENT";
110 int32_t currentAction = CONTROL_ACTION_MAP[actionEvent];
111 int32_t ret = HiSysEventWrite(
112 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
113 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
114 EVENT_KEY_PNAMEID, PNAMEID,
115 EVENT_KEY_PVERSION, PVERSION,
116 EVENT_KEY_TEMPLATE_TYPE, templateType,
117 EVENT_KEY_ACTION_EVENT, currentAction,
118 EVENT_KEY_OPERATION_PACKAGE_NAME, packageName_);
119 if (ret != 0) {
120 WLOGFE("Write HiSysEvent error, ret:%{public}d", ret);
121 }
122 }
123
ReportPiPResize(int32_t scaleLevel,int32_t windowWidth,int32_t windowHeight)124 void PiPReporter::ReportPiPResize(int32_t scaleLevel, int32_t windowWidth, int32_t windowHeight)
125 {
126 WLOGI("Report pip widow resize");
127 std::string eventName = "RESIZE_PIP_SIZE";
128 int32_t currentScaleLevel = scaleLevel + 1;
129 int32_t ret = HiSysEventWrite(
130 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
131 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
132 EVENT_KEY_PNAMEID, PNAMEID,
133 EVENT_KEY_PVERSION, PVERSION,
134 EVENT_KEY_SCALE_LEVEL, currentScaleLevel,
135 EVENT_KEY_WINDOW_WIDTH, windowWidth,
136 EVENT_KEY_WINDOW_HEIGHT, windowHeight,
137 EVENT_KEY_OPERATION_PACKAGE_NAME, packageName_);
138 if (ret != 0) {
139 WLOGFE("Write HiSysEvent error, ret:%{public}d", ret);
140 }
141 }
142
ReportPiPRatio(int32_t windowWidth,int32_t windowHeight)143 void PiPReporter::ReportPiPRatio(int32_t windowWidth, int32_t windowHeight)
144 {
145 WLOGI("Report pip widow ratio");
146 std::string eventName = "UPDATE_PIP_RATIO";
147 int32_t ret = HiSysEventWrite(
148 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
149 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
150 EVENT_KEY_PNAMEID, PNAMEID,
151 EVENT_KEY_PVERSION, PVERSION,
152 EVENT_KEY_WINDOW_WIDTH, windowWidth,
153 EVENT_KEY_WINDOW_HEIGHT, windowHeight,
154 EVENT_KEY_OPERATION_PACKAGE_NAME, packageName_);
155 if (ret != 0) {
156 WLOGFE("Write HiSysEvent error, ret:%{public}d", ret);
157 }
158 }
159
ReportPiPRestore()160 void PiPReporter::ReportPiPRestore()
161 {
162 WLOGI("Report pip widow restore");
163 std::string eventName = "RESOTRE_PIP";
164 int32_t ret = HiSysEventWrite(
165 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
166 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
167 EVENT_KEY_PNAMEID, PNAMEID,
168 EVENT_KEY_PVERSION, PVERSION,
169 EVENT_KEY_OPERATION_PACKAGE_NAME, packageName_);
170 if (ret != 0) {
171 WLOGFE("Write HiSysEvent error, ret:%{public}d", ret);
172 }
173 }
174
ReportPiPMove()175 void PiPReporter::ReportPiPMove()
176 {
177 WLOGI("Report pip widow move");
178 std::string eventName = "MOVE_PIP";
179 int32_t ret = HiSysEventWrite(
180 OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
181 OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
182 EVENT_KEY_PNAMEID, PNAMEID,
183 EVENT_KEY_PVERSION, PVERSION,
184 EVENT_KEY_OPERATION_PACKAGE_NAME, packageName_);
185 if (ret != 0) {
186 WLOGFE("Write HiSysEvent error, ret:%{public}d", ret);
187 }
188 }
189 } // namespace Rosen
190 } // namespace OHOS
191