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 WMS_PATTERN, // C04216 64 WMS_ATTRIBUTE, // C04217 65 WMS_PC, // C04218 66 WMS_DECOR, // C04219 67 WMS_LAYOUT_PC, // C0421A 68 WMS_STARTUP_PAGE, // C0421B 69 WMS_COMPAT, // C0421C 70 END = 256, // Last one, do not use 71 }; 72 73 inline const std::unordered_map<WmsLogTag, const char *> DOMAIN_CONTENTS_MAP = { 74 { WmsLogTag::DEFAULT, "WMS" }, 75 { WmsLogTag::DMS, "DMS" }, 76 { WmsLogTag::WMS_MAIN, "WMSMain" }, 77 { WmsLogTag::WMS_SUB, "WMSSub" }, 78 { WmsLogTag::WMS_SCB, "WMSScb" }, 79 { WmsLogTag::WMS_DIALOG, "WMSDialog" }, 80 { WmsLogTag::WMS_SYSTEM, "WMSSystem" }, 81 { WmsLogTag::WMS_FOCUS, "WMSFocus" }, 82 { WmsLogTag::WMS_LAYOUT, "WMSLayout" }, 83 { WmsLogTag::WMS_IMMS, "WMSImms" }, 84 { WmsLogTag::WMS_LIFE, "WMSLife" }, 85 { WmsLogTag::WMS_KEYBOARD, "WMSKeyboard" }, 86 { WmsLogTag::WMS_EVENT, "WMSEvent" }, 87 { WmsLogTag::WMS_UIEXT, "WMSUiext" }, 88 { WmsLogTag::WMS_PIP, "WMSPiP" }, 89 { WmsLogTag::WMS_RECOVER, "WMSRecover" }, 90 { WmsLogTag::WMS_MULTI_USER, "WMSMultiUser" }, 91 { WmsLogTag::WMS_TOAST, "WMSToast" }, 92 { WmsLogTag::WMS_MULTI_WINDOW, "WMSMultiWindow" }, 93 { WmsLogTag::WMS_INPUT_KEY_FLOW, "InputKeyFlow" }, 94 { WmsLogTag::WMS_PIPELINE, "WMSPipeLine" }, 95 { WmsLogTag::WMS_HIERARCHY, "WMSHierarchy" }, 96 { WmsLogTag::WMS_PATTERN, "WMSPattern" }, 97 { WmsLogTag::WMS_ATTRIBUTE, "WMSAttribute" }, 98 { WmsLogTag::WMS_PC, "WMSPc" }, 99 { WmsLogTag::WMS_DECOR, "WMSDecor" }, 100 { WmsLogTag::WMS_LAYOUT_PC, "WMSLayoutPc" }, 101 { WmsLogTag::WMS_STARTUP_PAGE, "WMSStartupPage" }, 102 { WmsLogTag::WMS_COMPAT, "WMSCompat" }, 103 }; 104 #ifdef IS_RELEASE_VERSION 105 #define WMS_FILE_NAME "" 106 #else 107 #define WMS_FILE_NAME (__builtin_strrchr(__FILE_NAME__, '/') ? \ 108 __builtin_strrchr(__FILE_NAME__, '/') + 1 : __FILE_NAME__) 109 #endif 110 111 #define FMT_PREFIX "[%{public}s] %{public}s(%{public}d): " 112 113 #define FMT_PREFIX_NO_FUNC "[%{public}s]: " 114 115 #define PRINT_TLOG(level, tag, ...) \ 116 do { \ 117 uint32_t hilogDomain = HILOG_DOMAIN_WINDOW + static_cast<uint32_t>(tag); \ 118 const char *domainContent = DOMAIN_CONTENTS_MAP.count(tag) ? DOMAIN_CONTENTS_MAP.at(tag) : ""; \ 119 HILOG_IMPL(LOG_CORE, level, hilogDomain, domainContent, ##__VA_ARGS__); \ 120 } while (0) 121 122 #define TLOGD(tag, fmt, ...) \ 123 PRINT_TLOG(LOG_DEBUG, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, __LINE__, ##__VA_ARGS__) 124 #define TLOGI(tag, fmt, ...) \ 125 PRINT_TLOG(LOG_INFO, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, __LINE__, ##__VA_ARGS__) 126 #define TLOGW(tag, fmt, ...) \ 127 PRINT_TLOG(LOG_WARN, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, __LINE__, ##__VA_ARGS__) 128 #define TLOGE(tag, fmt, ...) \ 129 PRINT_TLOG(LOG_ERROR, tag, FMT_PREFIX fmt, WMS_FILE_NAME, C_W_FUNC, __LINE__, ##__VA_ARGS__) 130 131 /* 132 * There is no function name built in TLOGN log micros. Choose suitable log micros when needed. 133 */ 134 #define TLOGND(tag, fmt, ...) \ 135 PRINT_TLOG(LOG_DEBUG, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 136 #define TLOGNI(tag, fmt, ...) \ 137 PRINT_TLOG(LOG_INFO, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 138 #define TLOGNW(tag, fmt, ...) \ 139 PRINT_TLOG(LOG_WARN, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 140 #define TLOGNE(tag, fmt, ...) \ 141 PRINT_TLOG(LOG_ERROR, tag, FMT_PREFIX_NO_FUNC fmt, WMS_FILE_NAME, ##__VA_ARGS__) 142 143 } // namespace OHOS 144 } 145 #endif // FRAMEWORKS_WM_INCLUDE_WINDOW_MANAGER_HILOG_H 146