• 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     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