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 21namespace OHOS { 22namespace Rosen { 23namespace { 24const std::string PNAMEID = "windowManager"; 25const std::string PVERSION = "1.0"; 26} 27WM_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 36static 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}; 47constexpr char EVENT_KEY_SOURCE[] = "SOURCE"; 48constexpr char EVENT_KEY_TEMPLATE_TYPE[] = "TEMPLATE_TYPE"; 49constexpr char EVENT_KEY_PNAMEID[] = "PNAMEID"; 50constexpr char EVENT_KEY_PVERSION[] = "PVERSION"; 51constexpr char EVENT_KEY_START_PACKAGE_NAME[] = "START_PACKAGE_NAME"; 52constexpr char EVENT_KEY_STOP_PACKAGE_NAME[] = "STOP_PACKAGE_NAME"; 53constexpr char EVENT_KEY_OPERATION_PACKAGE_NAME[] = "OPERATION_PACKAGE_NAME"; 54constexpr char EVENT_KEY_OPERATION_CODE[] = "OPERATION_CODE"; 55constexpr char EVENT_KEY_OPERATION_ERROR_REASON[] = "OPERATION_ERROR_REASON"; 56constexpr char EVENT_KEY_ACTION_EVENT[] = "ACTION_EVENT"; 57constexpr char EVENT_KEY_WINDOW_WIDTH[] = "WINDOW_WIDTH"; 58constexpr char EVENT_KEY_WINDOW_HEIGHT[] = "WINDOW_HEIGHT"; 59 60void PiPReporter::SetCurrentPackageName(const std::string& packageName) 61{ 62 std::lock_guard<std::mutex> lock(packageNameMutex_); 63 packageName_ = packageName; 64} 65 66std::string PiPReporter::GetPackageName() const 67{ 68 std::lock_guard<std::mutex> lock(packageNameMutex_); 69 return packageName_; 70} 71 72void 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 94void 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 116void 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 136void 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 150void 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 165void 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