1c29fa5a6Sopenharmony_ci/*
2c29fa5a6Sopenharmony_ci * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3c29fa5a6Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4c29fa5a6Sopenharmony_ci * you may not use this file except in compliance with the License.
5c29fa5a6Sopenharmony_ci * You may obtain a copy of the License at
6c29fa5a6Sopenharmony_ci *
7c29fa5a6Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0
8c29fa5a6Sopenharmony_ci *
9c29fa5a6Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10c29fa5a6Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11c29fa5a6Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12c29fa5a6Sopenharmony_ci * See the License for the specific language governing permissions and
13c29fa5a6Sopenharmony_ci * limitations under the License.
14c29fa5a6Sopenharmony_ci */
15c29fa5a6Sopenharmony_ci
16c29fa5a6Sopenharmony_ci#ifndef MMI_LOG_H
17c29fa5a6Sopenharmony_ci#define MMI_LOG_H
18c29fa5a6Sopenharmony_ci
19c29fa5a6Sopenharmony_ci#include <cinttypes>
20c29fa5a6Sopenharmony_ci#include <functional>
21c29fa5a6Sopenharmony_ci#include <future>
22c29fa5a6Sopenharmony_ci#include <string>
23c29fa5a6Sopenharmony_ci#include <sstream>
24c29fa5a6Sopenharmony_ci
25c29fa5a6Sopenharmony_ci#include "hilog/log.h"
26c29fa5a6Sopenharmony_ci
27c29fa5a6Sopenharmony_ci#include "util.h"
28c29fa5a6Sopenharmony_ci#include "klog.h"
29c29fa5a6Sopenharmony_ci
30c29fa5a6Sopenharmony_ci#ifndef MMI_DISABLE_LOG_TRACE
31c29fa5a6Sopenharmony_ci
32c29fa5a6Sopenharmony_cinamespace OHOS {
33c29fa5a6Sopenharmony_cinamespace MMI {
34c29fa5a6Sopenharmony_ciclass LogTracer {
35c29fa5a6Sopenharmony_cipublic:
36c29fa5a6Sopenharmony_ci    LogTracer();
37c29fa5a6Sopenharmony_ci
38c29fa5a6Sopenharmony_ci    LogTracer(int64_t, int32_t, int32_t);
39c29fa5a6Sopenharmony_ci
40c29fa5a6Sopenharmony_ci    LogTracer(LogTracer &&other) noexcept;
41c29fa5a6Sopenharmony_ci
42c29fa5a6Sopenharmony_ci    LogTracer &operator=(LogTracer &&other) noexcept;
43c29fa5a6Sopenharmony_ci
44c29fa5a6Sopenharmony_ci    ~LogTracer();
45c29fa5a6Sopenharmony_ci
46c29fa5a6Sopenharmony_ciprivate:
47c29fa5a6Sopenharmony_ci    int64_t traceId_;
48c29fa5a6Sopenharmony_ci};
49c29fa5a6Sopenharmony_ci
50c29fa5a6Sopenharmony_civoid StartLogTraceId(int64_t, int32_t, int32_t);
51c29fa5a6Sopenharmony_ci
52c29fa5a6Sopenharmony_civoid EndLogTraceId(int64_t);
53c29fa5a6Sopenharmony_ci
54c29fa5a6Sopenharmony_ciconst char *FormatLogTrace();
55c29fa5a6Sopenharmony_ci
56c29fa5a6Sopenharmony_civoid ResetLogTrace();
57c29fa5a6Sopenharmony_ci}
58c29fa5a6Sopenharmony_ci}
59c29fa5a6Sopenharmony_ci
60c29fa5a6Sopenharmony_ci#define MMI_FUNC_FMT "[%{public}s][%{public}s:%{public}d] "
61c29fa5a6Sopenharmony_ci#define MMI_FUNC_NOLINE_FMT "[%{public}s][%{public}s] "
62c29fa5a6Sopenharmony_ci#define INPUT_KEY_FLOW "InputKeyFlow"
63c29fa5a6Sopenharmony_ci#define MMI_TRACE_ID (OHOS::MMI::FormatLogTrace()),
64c29fa5a6Sopenharmony_ci#else
65c29fa5a6Sopenharmony_ci#define MMI_FUNC_FMT "[%{public}s:%{public}d] "
66c29fa5a6Sopenharmony_ci#define MMI_FUNC_NOLINE_FMT "[%{public}s] "
67c29fa5a6Sopenharmony_ci#define MMI_TRACE_ID
68c29fa5a6Sopenharmony_ci#endif //MMI_DISABLE_LOG_TRACE
69c29fa5a6Sopenharmony_ci
70c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_DOMAIN
71c29fa5a6Sopenharmony_ci#undef MMI_LOG_DOMAIN
72c29fa5a6Sopenharmony_ci#endif
73c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_FRAMEWORK
74c29fa5a6Sopenharmony_ci#undef MMI_LOG_FRAMEWORK
75c29fa5a6Sopenharmony_ci#endif
76c29fa5a6Sopenharmony_ci#define MMI_LOG_FRAMEWORK 0XD002800
77c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_SERVER
78c29fa5a6Sopenharmony_ci#undef MMI_LOG_SERVER
79c29fa5a6Sopenharmony_ci#endif
80c29fa5a6Sopenharmony_ci#define MMI_LOG_SERVER 0XD002801
81c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_HANDLER
82c29fa5a6Sopenharmony_ci#undef MMI_LOG_HANDLER
83c29fa5a6Sopenharmony_ci#endif
84c29fa5a6Sopenharmony_ci#define MMI_LOG_HANDLER 0XD002802
85c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_WINDOW
86c29fa5a6Sopenharmony_ci#undef MMI_LOG_WINDOW
87c29fa5a6Sopenharmony_ci#endif
88c29fa5a6Sopenharmony_ci#define MMI_LOG_WINDOW 0XD002803
89c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_CURSOR
90c29fa5a6Sopenharmony_ci#undef MMI_LOG_CURSOR
91c29fa5a6Sopenharmony_ci#endif
92c29fa5a6Sopenharmony_ci#define MMI_LOG_CURSOR 0XD002804
93c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_DISPATCH
94c29fa5a6Sopenharmony_ci#undef MMI_LOG_DISPATCH
95c29fa5a6Sopenharmony_ci#endif
96c29fa5a6Sopenharmony_ci#define MMI_LOG_DISPATCH 0XD002805
97c29fa5a6Sopenharmony_ci#ifdef MMI_LOG_ANRDETECT
98c29fa5a6Sopenharmony_ci#undef MMI_LOG_ANRDETECT
99c29fa5a6Sopenharmony_ci#endif
100c29fa5a6Sopenharmony_ci#define MMI_LOG_ANRDETECT 0XD002806
101c29fa5a6Sopenharmony_ci
102c29fa5a6Sopenharmony_ci#define MMI_LOG_DOMAIN MMI_LOG_FRAMEWORK
103c29fa5a6Sopenharmony_ci
104c29fa5a6Sopenharmony_ci#ifndef MMI_FUNC_INFO
105c29fa5a6Sopenharmony_ci#define MMI_FUNC_INFO __FUNCTION__
106c29fa5a6Sopenharmony_ci#endif
107c29fa5a6Sopenharmony_ci
108c29fa5a6Sopenharmony_ci#ifndef MMI_FILE_NAME
109c29fa5a6Sopenharmony_ci#define MMI_FILE_NAME (strrchr((__FILE__), '/') ? strrchr((__FILE__), '/') + 1 : (__FILE__))
110c29fa5a6Sopenharmony_ci#endif
111c29fa5a6Sopenharmony_ci
112c29fa5a6Sopenharmony_ci#ifndef MMI_LINE_INFO
113c29fa5a6Sopenharmony_ci#define MMI_LINE_INFO MMI_FILE_NAME, __LINE__
114c29fa5a6Sopenharmony_ci#endif
115c29fa5a6Sopenharmony_ci
116c29fa5a6Sopenharmony_ci#define MMI_HILOG_BASE(type, level, domain, tag, fmt, ...) do { \
117c29fa5a6Sopenharmony_ci        HILOG_IMPL(type, level, domain, tag, MMI_FUNC_FMT fmt, MMI_TRACE_ID MMI_FUNC_INFO, __LINE__, ##__VA_ARGS__); \
118c29fa5a6Sopenharmony_ci} while (0)
119c29fa5a6Sopenharmony_ci#define MMI_HILOG_HEADER(level, lh, fmt, ...) do { \
120c29fa5a6Sopenharmony_ci        HILOG_IMPL(LOG_CORE, level, lh.domain, lh.tag, MMI_FUNC_FMT fmt, MMI_TRACE_ID lh.func, lh.line, \
121c29fa5a6Sopenharmony_ci        ##__VA_ARGS__); \
122c29fa5a6Sopenharmony_ci} while (0)
123c29fa5a6Sopenharmony_ci#define MMI_HILOG_HEADER_NO_RELEASE(level, lh, fmt, ...) do { \
124c29fa5a6Sopenharmony_ci        HILOG_IMPL(LOG_ONLY_PRERELEASE, level, lh.domain, lh.tag, MMI_FUNC_FMT fmt, MMI_TRACE_ID lh.func, lh.line, \
125c29fa5a6Sopenharmony_ci        ##__VA_ARGS__); \
126c29fa5a6Sopenharmony_ci} while (0)
127c29fa5a6Sopenharmony_ci
128c29fa5a6Sopenharmony_ci#define MMI_HILOGD(fmt, ...) do { \
129c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_DOMAIN, MMI_LOG_TAG, LOG_DEBUG)) { \
130c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_CORE, LOG_DEBUG, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
131c29fa5a6Sopenharmony_ci    } \
132c29fa5a6Sopenharmony_ci} while (0)
133c29fa5a6Sopenharmony_ci#define MMI_HILOGD_NO_RELEASE(fmt, ...) do { \
134c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_DOMAIN, MMI_LOG_TAG, LOG_DEBUG)) { \
135c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_DEBUG, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
136c29fa5a6Sopenharmony_ci    } \
137c29fa5a6Sopenharmony_ci} while (0)
138c29fa5a6Sopenharmony_ci
139c29fa5a6Sopenharmony_ci#define MMI_HILOGI(fmt, ...) do { \
140c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
141c29fa5a6Sopenharmony_ci} while (0)
142c29fa5a6Sopenharmony_ci#define MMI_HILOGI_NO_RELEASE(fmt, ...) do { \
143c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
144c29fa5a6Sopenharmony_ci} while (0)
145c29fa5a6Sopenharmony_ci
146c29fa5a6Sopenharmony_ci#define MMI_HILOGW(fmt, ...) do { \
147c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_WARN, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
148c29fa5a6Sopenharmony_ci} while (0)
149c29fa5a6Sopenharmony_ci#define MMI_HILOGW_NO_RELEASE(fmt, ...) do { \
150c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_WARN, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
151c29fa5a6Sopenharmony_ci} while (0)
152c29fa5a6Sopenharmony_ci
153c29fa5a6Sopenharmony_ci#define MMI_HILOGE(fmt, ...) do { \
154c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
155c29fa5a6Sopenharmony_ci} while (0)
156c29fa5a6Sopenharmony_ci#define MMI_HILOGE_NO_RELEASE(fmt, ...) do { \
157c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
158c29fa5a6Sopenharmony_ci} while (0)
159c29fa5a6Sopenharmony_ci
160c29fa5a6Sopenharmony_ci#define MMI_HILOGF(fmt, ...) do { \
161c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_FATAL, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
162c29fa5a6Sopenharmony_ci} while (0)
163c29fa5a6Sopenharmony_ci#define MMI_HILOGF_NO_RELEASE(fmt, ...) do { \
164c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_FATAL, MMI_LOG_DOMAIN, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
165c29fa5a6Sopenharmony_ci} while (0)
166c29fa5a6Sopenharmony_ci
167c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERD(fmt, ...) do { \
168c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_SERVER, MMI_LOG_TAG, LOG_DEBUG)) { \
169c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_CORE, LOG_DEBUG, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
170c29fa5a6Sopenharmony_ci    } \
171c29fa5a6Sopenharmony_ci} while (0)
172c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERD_NO_RELEASE(fmt, ...) do { \
173c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_SERVER, MMI_LOG_TAG, LOG_DEBUG)) { \
174c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_DEBUG, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
175c29fa5a6Sopenharmony_ci    } \
176c29fa5a6Sopenharmony_ci} while (0)
177c29fa5a6Sopenharmony_ci
178c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERI(fmt, ...) do { \
179c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
180c29fa5a6Sopenharmony_ci} while (0)
181c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERI_NO_RELEASE(fmt, ...) do { \
182c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
183c29fa5a6Sopenharmony_ci} while (0)
184c29fa5a6Sopenharmony_ci
185c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERW(fmt, ...) do { \
186c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_WARN, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
187c29fa5a6Sopenharmony_ci} while (0)
188c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERW_NO_RELEASE(fmt, ...) do { \
189c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_WARN, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
190c29fa5a6Sopenharmony_ci} while (0)
191c29fa5a6Sopenharmony_ci
192c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERE(fmt, ...) do { \
193c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
194c29fa5a6Sopenharmony_ci} while (0)
195c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERE_NO_RELEASE(fmt, ...) do { \
196c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
197c29fa5a6Sopenharmony_ci} while (0)
198c29fa5a6Sopenharmony_ci
199c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERF(fmt, ...) do { \
200c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_FATAL, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
201c29fa5a6Sopenharmony_ci} while (0)
202c29fa5a6Sopenharmony_ci#define MMI_HILOG_SERVERF_NO_RELEASE(fmt, ...) do { \
203c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_FATAL, MMI_LOG_SERVER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
204c29fa5a6Sopenharmony_ci} while (0)
205c29fa5a6Sopenharmony_ci
206c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERD(fmt, ...) do { \
207c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_HANDLER, MMI_LOG_TAG, LOG_DEBUG)) { \
208c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_CORE, LOG_DEBUG, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
209c29fa5a6Sopenharmony_ci    } \
210c29fa5a6Sopenharmony_ci} while (0)
211c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERD_NO_RELEASE(fmt, ...) do { \
212c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_HANDLER, MMI_LOG_TAG, LOG_DEBUG)) { \
213c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_DEBUG, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
214c29fa5a6Sopenharmony_ci    } \
215c29fa5a6Sopenharmony_ci} while (0)
216c29fa5a6Sopenharmony_ci
217c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERI(fmt, ...) do { \
218c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
219c29fa5a6Sopenharmony_ci} while (0)
220c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERI_NO_RELEASE(fmt, ...) do { \
221c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
222c29fa5a6Sopenharmony_ci} while (0)
223c29fa5a6Sopenharmony_ci
224c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERW(fmt, ...) do { \
225c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_WARN, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
226c29fa5a6Sopenharmony_ci} while (0)
227c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERW_NO_RELEASE(fmt, ...) do { \
228c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_WARN, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
229c29fa5a6Sopenharmony_ci} while (0)
230c29fa5a6Sopenharmony_ci
231c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERE(fmt, ...) do { \
232c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
233c29fa5a6Sopenharmony_ci} while (0)
234c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERE_NO_RELEASE(fmt, ...) do { \
235c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
236c29fa5a6Sopenharmony_ci} while (0)
237c29fa5a6Sopenharmony_ci
238c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERF(fmt, ...) do { \
239c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_FATAL, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
240c29fa5a6Sopenharmony_ci} while (0)
241c29fa5a6Sopenharmony_ci#define MMI_HILOG_HANDLERF_NO_RELEASE(fmt, ...) do { \
242c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_FATAL, MMI_LOG_HANDLER, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
243c29fa5a6Sopenharmony_ci} while (0)
244c29fa5a6Sopenharmony_ci
245c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWD(fmt, ...) do { \
246c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_WINDOW, MMI_LOG_TAG, LOG_DEBUG)) { \
247c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_CORE, LOG_DEBUG, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
248c29fa5a6Sopenharmony_ci    } \
249c29fa5a6Sopenharmony_ci} while (0)
250c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWD_NO_RELEASE(fmt, ...) do { \
251c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_WINDOW, MMI_LOG_TAG, LOG_DEBUG)) { \
252c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_DEBUG, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
253c29fa5a6Sopenharmony_ci    } \
254c29fa5a6Sopenharmony_ci} while (0)
255c29fa5a6Sopenharmony_ci
256c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWI(fmt, ...) do { \
257c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
258c29fa5a6Sopenharmony_ci} while (0)
259c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWI_NO_RELEASE(fmt, ...) do { \
260c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
261c29fa5a6Sopenharmony_ci} while (0)
262c29fa5a6Sopenharmony_ci
263c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWW(fmt, ...) do { \
264c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_WARN, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
265c29fa5a6Sopenharmony_ci} while (0)
266c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWW_NO_RELEASE(fmt, ...) do { \
267c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_WARN, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
268c29fa5a6Sopenharmony_ci} while (0)
269c29fa5a6Sopenharmony_ci
270c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWE(fmt, ...) do { \
271c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
272c29fa5a6Sopenharmony_ci} while (0)
273c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWE_NO_RELEASE(fmt, ...) do { \
274c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
275c29fa5a6Sopenharmony_ci} while (0)
276c29fa5a6Sopenharmony_ci
277c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWF(fmt, ...) do { \
278c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_FATAL, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
279c29fa5a6Sopenharmony_ci} while (0)
280c29fa5a6Sopenharmony_ci#define MMI_HILOG_WINDOWF_NO_RELEASE(fmt, ...) do { \
281c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_FATAL, MMI_LOG_WINDOW, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
282c29fa5a6Sopenharmony_ci} while (0)
283c29fa5a6Sopenharmony_ci
284c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORD(fmt, ...) do { \
285c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_CURSOR, MMI_LOG_TAG, LOG_DEBUG)) { \
286c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_CORE, LOG_DEBUG, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
287c29fa5a6Sopenharmony_ci    } \
288c29fa5a6Sopenharmony_ci} while (0)
289c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORD_NO_RELEASE(fmt, ...) do { \
290c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_CURSOR, MMI_LOG_TAG, LOG_DEBUG)) { \
291c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_DEBUG, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
292c29fa5a6Sopenharmony_ci    } \
293c29fa5a6Sopenharmony_ci} while (0)
294c29fa5a6Sopenharmony_ci
295c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORI(fmt, ...) do { \
296c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
297c29fa5a6Sopenharmony_ci} while (0)
298c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORI_NO_RELEASE(fmt, ...) do { \
299c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
300c29fa5a6Sopenharmony_ci} while (0)
301c29fa5a6Sopenharmony_ci
302c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORW(fmt, ...) do { \
303c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_WARN, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
304c29fa5a6Sopenharmony_ci} while (0)
305c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORW_NO_RELEASE(fmt, ...) do { \
306c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_WARN, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
307c29fa5a6Sopenharmony_ci} while (0)
308c29fa5a6Sopenharmony_ci
309c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORE(fmt, ...) do { \
310c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
311c29fa5a6Sopenharmony_ci} while (0)
312c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORE_NO_RELEASE(fmt, ...) do { \
313c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
314c29fa5a6Sopenharmony_ci} while (0)
315c29fa5a6Sopenharmony_ci
316c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORF(fmt, ...) do { \
317c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_FATAL, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
318c29fa5a6Sopenharmony_ci} while (0)
319c29fa5a6Sopenharmony_ci#define MMI_HILOG_CURSORF_NO_RELEASE(fmt, ...) do { \
320c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_FATAL, MMI_LOG_CURSOR, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
321c29fa5a6Sopenharmony_ci} while (0)
322c29fa5a6Sopenharmony_ci
323c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHD(fmt, ...) do { \
324c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_DISPATCH, MMI_LOG_TAG, LOG_DEBUG)) { \
325c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_CORE, LOG_DEBUG, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
326c29fa5a6Sopenharmony_ci    } \
327c29fa5a6Sopenharmony_ci} while (0)
328c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHD_NO_RELEASE(fmt, ...) do { \
329c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_DISPATCH, MMI_LOG_TAG, LOG_DEBUG)) { \
330c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_DEBUG, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
331c29fa5a6Sopenharmony_ci    } \
332c29fa5a6Sopenharmony_ci} while (0)
333c29fa5a6Sopenharmony_ci
334c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHI(fmt, ...) do { \
335c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
336c29fa5a6Sopenharmony_ci} while (0)
337c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHI_NO_RELEASE(fmt, ...) do { \
338c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
339c29fa5a6Sopenharmony_ci} while (0)
340c29fa5a6Sopenharmony_ci
341c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHW(fmt, ...) do { \
342c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_WARN, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
343c29fa5a6Sopenharmony_ci} while (0)
344c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHW_NO_RELEASE(fmt, ...) do { \
345c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_WARN, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
346c29fa5a6Sopenharmony_ci} while (0)
347c29fa5a6Sopenharmony_ci
348c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHE(fmt, ...) do { \
349c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
350c29fa5a6Sopenharmony_ci} while (0)
351c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHE_NO_RELEASE(fmt, ...) do { \
352c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
353c29fa5a6Sopenharmony_ci} while (0)
354c29fa5a6Sopenharmony_ci
355c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHF(fmt, ...) do { \
356c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_FATAL, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
357c29fa5a6Sopenharmony_ci} while (0)
358c29fa5a6Sopenharmony_ci#define MMI_HILOG_DISPATCHF_NO_RELEASE(fmt, ...) do { \
359c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_FATAL, MMI_LOG_DISPATCH, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
360c29fa5a6Sopenharmony_ci} while (0)
361c29fa5a6Sopenharmony_ci
362c29fa5a6Sopenharmony_ci#define MMI_HILOG_FREEZEI(fmt, ...) do { \
363c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_DISPATCH, INPUT_KEY_FLOW, fmt, ##__VA_ARGS__); \
364c29fa5a6Sopenharmony_ci} while (0)
365c29fa5a6Sopenharmony_ci#define MMI_HILOG_FREEZEI_NO_RELEASE(fmt, ...) do { \
366c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_DISPATCH, INPUT_KEY_FLOW, fmt, ##__VA_ARGS__); \
367c29fa5a6Sopenharmony_ci} while (0)
368c29fa5a6Sopenharmony_ci
369c29fa5a6Sopenharmony_ci#define MMI_HILOG_FREEZEE(fmt, ...) do { \
370c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_DISPATCH, INPUT_KEY_FLOW, fmt, ##__VA_ARGS__); \
371c29fa5a6Sopenharmony_ci} while (0)
372c29fa5a6Sopenharmony_ci#define MMI_HILOG_FREEZEE_NO_RELEASE(fmt, ...) do { \
373c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_DISPATCH, INPUT_KEY_FLOW, fmt, ##__VA_ARGS__); \
374c29fa5a6Sopenharmony_ci} while (0)
375c29fa5a6Sopenharmony_ci
376c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTD(fmt, ...) do { \
377c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_DISPATCH, MMI_LOG_TAG, LOG_DEBUG)) { \
378c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_CORE, LOG_DEBUG, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
379c29fa5a6Sopenharmony_ci    } \
380c29fa5a6Sopenharmony_ci} while (0)
381c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTD_NO_RELEASE(fmt, ...) do { \
382c29fa5a6Sopenharmony_ci    if (HiLogIsLoggable(MMI_LOG_DISPATCH, MMI_LOG_TAG, LOG_DEBUG)) { \
383c29fa5a6Sopenharmony_ci        MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_DEBUG, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
384c29fa5a6Sopenharmony_ci    } \
385c29fa5a6Sopenharmony_ci} while (0)
386c29fa5a6Sopenharmony_ci
387c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTI(fmt, ...) do { \
388c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_INFO, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
389c29fa5a6Sopenharmony_ci} while (0)
390c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTI_NO_RELEASE(fmt, ...) do { \
391c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_INFO, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
392c29fa5a6Sopenharmony_ci} while (0)
393c29fa5a6Sopenharmony_ci
394c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTW(fmt, ...) do { \
395c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_WARN, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
396c29fa5a6Sopenharmony_ci} while (0)
397c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTW_NO_RELEASE(fmt, ...) do { \
398c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_WARN, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
399c29fa5a6Sopenharmony_ci} while (0)
400c29fa5a6Sopenharmony_ci
401c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTE(fmt, ...) do { \
402c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_ERROR, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
403c29fa5a6Sopenharmony_ci} while (0)
404c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTE_NO_RELEASE(fmt, ...) do { \
405c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_ERROR, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
406c29fa5a6Sopenharmony_ci} while (0)
407c29fa5a6Sopenharmony_ci
408c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTF(fmt, ...) do { \
409c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_CORE, LOG_FATAL, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
410c29fa5a6Sopenharmony_ci} while (0)
411c29fa5a6Sopenharmony_ci#define MMI_HILOG_ANRDETECTF_NO_RELEASE(fmt, ...) do { \
412c29fa5a6Sopenharmony_ci    MMI_HILOG_BASE(LOG_ONLY_PRERELEASE, LOG_FATAL, MMI_LOG_ANRDETECT, MMI_LOG_TAG, fmt, ##__VA_ARGS__); \
413c29fa5a6Sopenharmony_ci} while (0)
414c29fa5a6Sopenharmony_ci
415c29fa5a6Sopenharmony_ci#define MMI_HILOGDK(fmt, ...) do { \
416c29fa5a6Sopenharmony_ci    KMSG_LOGD(fmt, ##__VA_ARGS__); \
417c29fa5a6Sopenharmony_ci    MMI_HILOGD(fmt, ##__VA_ARGS__); \
418c29fa5a6Sopenharmony_ci} while (0)
419c29fa5a6Sopenharmony_ci
420c29fa5a6Sopenharmony_ci#define MMI_HILOGIK(fmt, ...) do { \
421c29fa5a6Sopenharmony_ci    KMSG_LOGI(fmt, ##__VA_ARGS__); \
422c29fa5a6Sopenharmony_ci    MMI_HILOGI(fmt, ##__VA_ARGS__); \
423c29fa5a6Sopenharmony_ci} while (0)
424c29fa5a6Sopenharmony_ci
425c29fa5a6Sopenharmony_ci#define MMI_HILOGWK(fmt, ...) do { \
426c29fa5a6Sopenharmony_ci    KMSG_LOGW(fmt, ##__VA_ARGS__); \
427c29fa5a6Sopenharmony_ci    MMI_HILOGW(fmt, ##__VA_ARGS__); \
428c29fa5a6Sopenharmony_ci} while (0)
429c29fa5a6Sopenharmony_ci
430c29fa5a6Sopenharmony_ci#define MMI_HILOGEK(fmt, ...) do { \
431c29fa5a6Sopenharmony_ci    KMSG_LOGE(fmt, ##__VA_ARGS__); \
432c29fa5a6Sopenharmony_ci    MMI_HILOGE(fmt, ##__VA_ARGS__); \
433c29fa5a6Sopenharmony_ci} while (0)
434c29fa5a6Sopenharmony_ci
435c29fa5a6Sopenharmony_ci#define MMI_HILOGFK(fmt, ...) do { \
436c29fa5a6Sopenharmony_ci    KMSG_LOGF(fmt, ##__VA_ARGS__); \
437c29fa5a6Sopenharmony_ci    MMI_HILOGF(fmt, ##__VA_ARGS__); \
438c29fa5a6Sopenharmony_ci} while (0)
439c29fa5a6Sopenharmony_ci
440c29fa5a6Sopenharmony_cinamespace OHOS {
441c29fa5a6Sopenharmony_cinamespace MMI {
442c29fa5a6Sopenharmony_ciinline constexpr int32_t EVENT_TYPE_POINTER { 0X00020000 };
443c29fa5a6Sopenharmony_ciinline constexpr int32_t TIMEOUT { 100000 };
444c29fa5a6Sopenharmony_ciinline constexpr int32_t POINTER_ACTION_UP { 4 };
445c29fa5a6Sopenharmony_ciinline constexpr int32_t POINTER_ACTION_MOVE { 3 };
446c29fa5a6Sopenharmony_ciinline constexpr int32_t FINAL_FINGER { 1 };
447c29fa5a6Sopenharmony_ci
448c29fa5a6Sopenharmony_ciclass InnerFunctionTracer {
449c29fa5a6Sopenharmony_cipublic:
450c29fa5a6Sopenharmony_ci    InnerFunctionTracer(LogLevel level, const char* tag, const char* logfn, uint32_t logline)
451c29fa5a6Sopenharmony_ci        : level_ { level }, tag_ { tag }, logfn_ { logfn }, logline_ { logline }
452c29fa5a6Sopenharmony_ci    {
453c29fa5a6Sopenharmony_ci        if (HiLogIsLoggable(MMI_LOG_DOMAIN, tag_, level_)) {
454c29fa5a6Sopenharmony_ci            if (logfn_ != nullptr) {
455c29fa5a6Sopenharmony_ci                HILOG_IMPL(LOG_CORE, level_, MMI_LOG_DOMAIN, tag_, MMI_FUNC_FMT "enter", MMI_TRACE_ID logfn_, logline_);
456c29fa5a6Sopenharmony_ci            }
457c29fa5a6Sopenharmony_ci        }
458c29fa5a6Sopenharmony_ci    }
459c29fa5a6Sopenharmony_ci    ~InnerFunctionTracer()
460c29fa5a6Sopenharmony_ci    {
461c29fa5a6Sopenharmony_ci        if (HiLogIsLoggable(MMI_LOG_DOMAIN, tag_, level_)) {
462c29fa5a6Sopenharmony_ci            if (logfn_ != nullptr) {
463c29fa5a6Sopenharmony_ci                HILOG_IMPL(LOG_CORE, level_, MMI_LOG_DOMAIN, tag_, MMI_FUNC_NOLINE_FMT "leave", MMI_TRACE_ID logfn_);
464c29fa5a6Sopenharmony_ci            }
465c29fa5a6Sopenharmony_ci        }
466c29fa5a6Sopenharmony_ci    }
467c29fa5a6Sopenharmony_ciprivate:
468c29fa5a6Sopenharmony_ci    LogLevel level_ { LOG_LEVEL_MIN };
469c29fa5a6Sopenharmony_ci    const char* tag_ { nullptr };
470c29fa5a6Sopenharmony_ci    const char* logfn_ { nullptr };
471c29fa5a6Sopenharmony_ci    const uint32_t logline_ { 0 };
472c29fa5a6Sopenharmony_ci};
473c29fa5a6Sopenharmony_ci
474c29fa5a6Sopenharmony_cistruct LogHeader {
475c29fa5a6Sopenharmony_ci    const uint32_t domain;
476c29fa5a6Sopenharmony_ci    const char* tag;
477c29fa5a6Sopenharmony_ci    const char* func;
478c29fa5a6Sopenharmony_ci    const uint32_t line;
479c29fa5a6Sopenharmony_ci
480c29fa5a6Sopenharmony_ci    LogHeader(uint32_t domain, const char* tag, const char* func, uint32_t line)
481c29fa5a6Sopenharmony_ci        : domain(domain), tag(tag), func(func), line(line) {}
482c29fa5a6Sopenharmony_ci};
483c29fa5a6Sopenharmony_ci} // namespace MMI
484c29fa5a6Sopenharmony_ci} // namespace OHOS
485c29fa5a6Sopenharmony_ci
486c29fa5a6Sopenharmony_ci#define MMI_LOG_HEADER { MMI_LOG_DOMAIN, MMI_LOG_TAG, __FUNCTION__, __LINE__ }
487c29fa5a6Sopenharmony_ci#define MMI_LOG_FREEZE { MMI_LOG_DOMAIN, INPUT_KEY_FLOW, __FUNCTION__, __LINE__ }
488c29fa5a6Sopenharmony_ci
489c29fa5a6Sopenharmony_ci#define CALL_DEBUG_ENTER ::OHOS::MMI::InnerFunctionTracer __innerFuncTracer_Debug___ \
490c29fa5a6Sopenharmony_ci    { LOG_DEBUG, MMI_LOG_TAG, __FUNCTION__, __LINE__ }
491c29fa5a6Sopenharmony_ci#define CALL_INFO_TRACE ::OHOS::MMI::InnerFunctionTracer ___innerFuncTracer_Info___ \
492c29fa5a6Sopenharmony_ci    { LOG_INFO, MMI_LOG_TAG, __FUNCTION__, __LINE__ }
493c29fa5a6Sopenharmony_ci#define CALL_TEST_DEBUG ::OHOS::MMI::InnerFunctionTracer ___innerFuncTracer_Info___ \
494c29fa5a6Sopenharmony_ci    { LOG_DEBUG, MMI_LOG_TAG, test_info_ == nullptr ? "TestBody" : test_info_->name(), __LINE__ }
495c29fa5a6Sopenharmony_ci#endif // MMI_LOG_H
496