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