1 /* 2 * Copyright (c) 2021-2022 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 #ifndef OHOS_WM_INCLUDE_WINDOW_MANAGER_HILOG_H 17 #define OHOS_WM_INCLUDE_WINDOW_MANAGER_HILOG_H 18 19 #include "hilog/log.h" 20 #include <unordered_map> 21 namespace OHOS { 22 namespace Rosen { 23 static constexpr unsigned int HILOG_DOMAIN_WINDOW = 0xD004200; 24 static constexpr unsigned int HILOG_DOMAIN_DISPLAY = 0xD004201; 25 26 #define PRINT_WLOG(level, ...) HILOG_IMPL(LABEL.type, level, LABEL.domain, LABEL.tag, ##__VA_ARGS__) 27 28 #define WLOGD(fmt, ...) PRINT_WLOG(LOG_DEBUG, "(%{public}d)" fmt, __LINE__, ##__VA_ARGS__) 29 #define WLOGI(fmt, ...) PRINT_WLOG(LOG_INFO, "(%{public}d)" fmt, __LINE__, ##__VA_ARGS__) 30 #define WLOGW(fmt, ...) PRINT_WLOG(LOG_WARN, "(%{public}d)" fmt, __LINE__, ##__VA_ARGS__) 31 #define WLOGE(fmt, ...) PRINT_WLOG(LOG_ERROR, "(%{public}d)" fmt, __LINE__, ##__VA_ARGS__) 32 33 #define C_W_FUNC __func__ 34 35 #define WLOGFD(fmt, ...) WLOGD("%{public}s: " fmt, C_W_FUNC, ##__VA_ARGS__) 36 #define WLOGFI(fmt, ...) WLOGI("%{public}s: " fmt, C_W_FUNC, ##__VA_ARGS__) 37 #define WLOGFW(fmt, ...) WLOGW("%{public}s: " fmt, C_W_FUNC, ##__VA_ARGS__) 38 #define WLOGFE(fmt, ...) WLOGE("%{public}s: " fmt, C_W_FUNC, ##__VA_ARGS__) 39 40 enum class WmsLogTag : uint8_t { 41 DEFAULT = 0, // C04200 42 DMS, // C04201 43 WMS_MAIN, // C04202 44 WMS_SUB, // C04203 45 WMS_SCB, // C04204 46 WMS_DIALOG, // C04205 47 WMS_SYSTEM, // C04206 48 WMS_FOCUS, // C04207 49 WMS_LAYOUT, // C04208 50 WMS_IMMS, // C04209 51 WMS_LIFE, // C0420A 52 WMS_KEYBOARD, // C0420B 53 WMS_EVENT, // C0420C 54 WMS_UIEXT, // C0420D 55 WMS_PIP, // C0420E 56 WMS_RECOVER, // C0420F 57 WMS_MULTI_USER, // C04210 58 WMS_TOAST, // C04211 59 WMS_MULTI_WINDOW, // C04212 60 WMS_INPUT_KEY_FLOW, // C04213 61 WMS_PIPELINE, // C04214 62 WMS_HIERARCHY, // C04215 63 END = 256, // Last one, do not use 64 }; 65 66 inline const std::unordered_map<WmsLogTag, const char *> DOMAIN_CONTENTS_MAP = { 67 { WmsLogTag::DEFAULT, "WMS" }, 68 { WmsLogTag::DMS, "DMS" }, 69 { WmsLogTag::WMS_MAIN, "WMSMain" }, 70 { WmsLogTag::WMS_SUB, "WMSSub" }, 71 { WmsLogTag::WMS_SCB, "WMSScb" }, 72 { WmsLogTag::WMS_DIALOG, "WMSDialog" }, 73 { WmsLogTag::WMS_SYSTEM, "WMSSystem" }, 74 { WmsLogTag::WMS_FOCUS, "WMSFocus" }, 75 { WmsLogTag::WMS_LAYOUT, "WMSLayout" }, 76 { WmsLogTag::WMS_IMMS, "WMSImms" }, 77 { WmsLogTag::WMS_LIFE, "WMSLife" }, 78 { WmsLogTag::WMS_KEYBOARD, "WMSKeyboard" }, 79 { WmsLogTag::WMS_EVENT, "WMSEvent" }, 80 { WmsLogTag::WMS_UIEXT, "WMSUiext" }, 81 { WmsLogTag::WMS_PIP, "WMSPiP" }, 82 { WmsLogTag::WMS_RECOVER, "WMSRecover" }, 83 { WmsLogTag::WMS_MULTI_USER, "WMSMultiUser" }, 84 { WmsLogTag::WMS_TOAST, "WMSToast" }, 85 { WmsLogTag::WMS_MULTI_WINDOW, "WMSMultiWindow" }, 86 { WmsLogTag::WMS_INPUT_KEY_FLOW, "InputKeyFlow" }, 87 { WmsLogTag::WMS_PIPELINE, "WMSPipeLine" }, 88 { WmsLogTag::WMS_HIERARCHY, "WMSHierarchy" }, 89 }; 90 #ifdef IS_RELEASE_VERSION 91 #define WMS_FILE_NAME "" 92 #else 93 #define WMS_FILE_NAME (__builtin_strrchr(__FILE_NAME__, '/') ? \ 94 __builtin_strrchr(__FILE_NAME__, '/') + 1 : __FILE_NAME__) 95 #endif 96 97 #define FMT_PREFIX "[%{public}s] %{public}s: " 98 99 #define FMT_PREFIX_NO_FUNC "[%{public}s]: " 100 101 #define PRINT_TLOG(level, tag, ...) \ 102 do { \ 103 uint32_t hilogDomain = HILOG_DOMAIN_WINDOW + static_cast<uint32_t>(tag); \ 104 const char *domainContent = DOMAIN_CONTENTS_MAP.count(tag) ? DOMAIN_CONTENTS_MAP.at(tag) : ""; \ 105 HILOG_IMPL(LOG_CORE, level, hilogDomain, domainContent, ##__VA_ARGS__); \ 106 } while (0) 107 108 #define TLOGD(tag, fmt, ...) \ 109 PRINT_TLOG(LOG_DEBUG, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, ##__VA_ARGS__) 110 #define TLOGI(tag, fmt, ...) \ 111 PRINT_TLOG(LOG_INFO, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, ##__VA_ARGS__) 112 #define TLOGW(tag, fmt, ...) \ 113 PRINT_TLOG(LOG_WARN, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, ##__VA_ARGS__) 114 #define TLOGE(tag, fmt, ...) \ 115 PRINT_TLOG(LOG_ERROR, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, ##__VA_ARGS__) 116 117 /* 118 * There is no function name built in TLOGN log micros. Choose suitable log micros when needed. 119 */ 120 #define TLOGND(tag, fmt, ...) \ 121 PRINT_TLOG(LOG_DEBUG, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 122 #define TLOGNI(tag, fmt, ...) \ 123 PRINT_TLOG(LOG_INFO, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 124 #define TLOGNW(tag, fmt, ...) \ 125 PRINT_TLOG(LOG_WARN, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 126 #define TLOGNE(tag, fmt, ...) \ 127 PRINT_TLOG(LOG_ERROR, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 128 129 } // namespace OHOS 130 } 131 #endif // FRAMEWORKS_WM_INCLUDE_WINDOW_MANAGER_HILOG_H 132