• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 constexpr char TEMPLATE_TYPE[] = "TEMPLATE_TYPE";
60 constexpr char ORIGIN_CONTENT_TYPE[] = "ORIGIN_CONTENT_TYPE";
61 
SetCurrentPackageName(const std::string & packageName)62 void PiPReporter::SetCurrentPackageName(const std::string& packageName)
63 {
64     std::lock_guard<std::mutex> lock(packageNameMutex_);
65     packageName_ = packageName;
66 }
67 
GetPackageName() const68 std::string PiPReporter::GetPackageName() const
69 {
70     std::lock_guard<std::mutex> lock(packageNameMutex_);
71     return packageName_;
72 }
73 
ReportPiPStartWindow(int32_t source,int32_t templateType,int32_t isSuccess,const std::string & errorReason)74 void PiPReporter::ReportPiPStartWindow(int32_t source, int32_t templateType,
75                                        int32_t isSuccess, const std::string& errorReason)
76 {
77     TLOGI(WmsLogTag::WMS_PIP, "Report start pip widow");
78     if (source == 0) {
79         TLOGI(WmsLogTag::WMS_PIP, "need not report start pip widow");
80         return;
81     }
82     std::string eventName = "START_PIP";
83     int32_t ret = HiSysEventWrite(
84         OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
85         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
86         EVENT_KEY_PNAMEID, PNAMEID,
87         EVENT_KEY_PVERSION, PVERSION,
88         EVENT_KEY_SOURCE, source,
89         EVENT_KEY_TEMPLATE_TYPE, templateType,
90         EVENT_KEY_START_PACKAGE_NAME, GetPackageName(),
91         EVENT_KEY_OPERATION_CODE, isSuccess,
92         EVENT_KEY_OPERATION_ERROR_REASON, errorReason);
93     LOG_WHEN_ERROR(ret);
94 }
95 
ReportPiPStopWindow(int32_t source,int32_t templateType,int32_t isSuccess,const std::string & errorReason)96 void PiPReporter::ReportPiPStopWindow(int32_t source, int32_t templateType,
97                                       int32_t isSuccess, const std::string& errorReason)
98 {
99     TLOGI(WmsLogTag::WMS_PIP, "Report stop pip widow");
100     if (source == 0) {
101         TLOGI(WmsLogTag::WMS_PIP, "need not report stop pip widow");
102         return;
103     }
104     std::string eventName = "STOP_PIP";
105     int32_t ret = HiSysEventWrite(
106         OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
107         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
108         EVENT_KEY_PNAMEID, PNAMEID,
109         EVENT_KEY_PVERSION, PVERSION,
110         EVENT_KEY_SOURCE, source,
111         EVENT_KEY_TEMPLATE_TYPE, templateType,
112         EVENT_KEY_STOP_PACKAGE_NAME, GetPackageName(),
113         EVENT_KEY_OPERATION_CODE, isSuccess,
114         EVENT_KEY_OPERATION_ERROR_REASON, errorReason);
115     LOG_WHEN_ERROR(ret);
116 }
117 
ReportPiPActionEvent(int32_t templateType,const std::string & actionEvent)118 void PiPReporter::ReportPiPActionEvent(int32_t templateType, const std::string& actionEvent)
119 {
120     TLOGI(WmsLogTag::WMS_PIP, "Report pip widow action event");
121     std::string eventName = "CONTROL_PANNEL_ACTION_EVENT";
122     if (CONTROL_ACTION_MAP.find(actionEvent) == CONTROL_ACTION_MAP.end()) {
123         TLOGE(WmsLogTag::WMS_PIP, "actionEvent %{public}s not found", actionEvent.c_str());
124         return;
125     }
126     int32_t currentAction = CONTROL_ACTION_MAP[actionEvent];
127     int32_t ret = HiSysEventWrite(
128         OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
129         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
130         EVENT_KEY_PNAMEID, PNAMEID,
131         EVENT_KEY_PVERSION, PVERSION,
132         EVENT_KEY_TEMPLATE_TYPE, templateType,
133         EVENT_KEY_ACTION_EVENT, currentAction,
134         EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
135     LOG_WHEN_ERROR(ret);
136 }
137 
ReportPiPControlEvent(int32_t templateType,PiPControlType controlType)138 void PiPReporter::ReportPiPControlEvent(int32_t templateType, PiPControlType controlType)
139 {
140     TLOGI(WmsLogTag::WMS_PIP, "templateType:%{public}d, controlType:%{public}d", templateType, controlType);
141     int32_t ret = HiSysEventWrite(
142         OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, "CONTROL_CONTROL_EVENT",
143         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
144         EVENT_KEY_PNAMEID, PNAMEID,
145         EVENT_KEY_PVERSION, PVERSION,
146         EVENT_KEY_TEMPLATE_TYPE, templateType,
147         EVENT_KEY_ACTION_EVENT, static_cast<uint32_t>(controlType),
148         EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
149     LOG_WHEN_ERROR(ret);
150 }
151 
ReportPiPRatio(int32_t windowWidth,int32_t windowHeight)152 void PiPReporter::ReportPiPRatio(int32_t windowWidth, int32_t windowHeight)
153 {
154     TLOGI(WmsLogTag::WMS_PIP, "Report pip widow ratio");
155     std::string eventName = "UPDATE_PIP_RATIO";
156     int32_t ret = HiSysEventWrite(
157         OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
158         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
159         EVENT_KEY_PNAMEID, PNAMEID,
160         EVENT_KEY_PVERSION, PVERSION,
161         EVENT_KEY_WINDOW_WIDTH, windowWidth,
162         EVENT_KEY_WINDOW_HEIGHT, windowHeight,
163         EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
164     LOG_WHEN_ERROR(ret);
165 }
166 
ReportPiPRestore()167 void PiPReporter::ReportPiPRestore()
168 {
169     TLOGI(WmsLogTag::WMS_PIP, "Report pip widow restore");
170     std::string eventName = "RESOTRE_PIP";
171     int32_t ret = HiSysEventWrite(
172         OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
173         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
174         EVENT_KEY_PNAMEID, PNAMEID,
175         EVENT_KEY_PVERSION, PVERSION,
176         EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
177     LOG_WHEN_ERROR(ret);
178 }
179 
ReportPiPUpdateContent(int32_t originType,int32_t templateType,int32_t isSuccess,const std::string & errorReason)180 void PiPReporter::ReportPiPUpdateContent(int32_t originType, int32_t templateType,
181     int32_t isSuccess, const std::string &errorReason)
182 {
183     TLOGI(WmsLogTag::WMS_PIP, "Report pip widow update typeNode");
184     std::string eventName = "updateContent_PIP";
185     int32_t ret = HiSysEventWrite(
186         OHOS::HiviewDFX::HiSysEvent::Domain::MULTIWINDOW_UE, eventName,
187         OHOS::HiviewDFX::HiSysEvent::EventType::BEHAVIOR,
188         EVENT_KEY_PNAMEID, PNAMEID,
189         EVENT_KEY_PVERSION, PVERSION,
190         ORIGIN_CONTENT_TYPE, originType,
191         TEMPLATE_TYPE, templateType,
192         EVENT_KEY_OPERATION_CODE, isSuccess,
193         EVENT_KEY_OPERATION_ERROR_REASON, errorReason,
194         EVENT_KEY_OPERATION_PACKAGE_NAME, GetPackageName());
195     LOG_WHEN_ERROR(ret);
196 }
197 } // namespace Rosen
198 } // namespace OHOS
199