148f512ceSopenharmony_ci/* 248f512ceSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 348f512ceSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 448f512ceSopenharmony_ci * you may not use this file except in compliance with the License. 548f512ceSopenharmony_ci * You may obtain a copy of the License at 648f512ceSopenharmony_ci * 748f512ceSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 848f512ceSopenharmony_ci * 948f512ceSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1048f512ceSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1148f512ceSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1248f512ceSopenharmony_ci * See the License for the specific language governing permissions and 1348f512ceSopenharmony_ci * limitations under the License. 1448f512ceSopenharmony_ci */ 1548f512ceSopenharmony_ci 1648f512ceSopenharmony_ci#ifndef HIPERF_HILOG 1748f512ceSopenharmony_ci#define HIPERF_HILOG 1848f512ceSopenharmony_ci 1948f512ceSopenharmony_ci#include <securec.h> 2048f512ceSopenharmony_ci#include <stdarg.h> 2148f512ceSopenharmony_ci 2248f512ceSopenharmony_ci#ifndef CONFIG_NO_HILOG 2348f512ceSopenharmony_ci#define HILOG_PUBLIC "{public}" 2448f512ceSopenharmony_ci#define HILOG_NEWLINE "" 2548f512ceSopenharmony_ci#else 2648f512ceSopenharmony_ci#define HILOG_PUBLIC "" 2748f512ceSopenharmony_ci#define HILOG_NEWLINE "\n" 2848f512ceSopenharmony_ci#endif 2948f512ceSopenharmony_ci 3048f512ceSopenharmony_ci#ifdef IS_RELEASE_VERSION 3148f512ceSopenharmony_ci#define FORMATTED(fmt, ...) "[%" HILOG_PUBLIC "s]" fmt HILOG_NEWLINE, __FUNCTION__, ##__VA_ARGS__ 3248f512ceSopenharmony_ci#else 3348f512ceSopenharmony_ci#define FORMATTED(fmt, ...) \ 3448f512ceSopenharmony_ci "[%" HILOG_PUBLIC "s:%" HILOG_PUBLIC "d] %" HILOG_PUBLIC "s# " fmt HILOG_NEWLINE, __FILE_NAME__, \ 3548f512ceSopenharmony_ci __LINE__, __FUNCTION__, ##__VA_ARGS__ 3648f512ceSopenharmony_ci#endif 3748f512ceSopenharmony_ci 3848f512ceSopenharmony_ci#ifndef CONFIG_NO_HILOG 3948f512ceSopenharmony_ci#include "hilog/log.h" 4048f512ceSopenharmony_ci 4148f512ceSopenharmony_ci#ifdef HIPERF_HILOGF 4248f512ceSopenharmony_ci#undef HIPERF_HILOGF 4348f512ceSopenharmony_ci#endif 4448f512ceSopenharmony_ci 4548f512ceSopenharmony_ci#ifdef HIPERF_HILOGE 4648f512ceSopenharmony_ci#undef HIPERF_HILOGE 4748f512ceSopenharmony_ci#endif 4848f512ceSopenharmony_ci 4948f512ceSopenharmony_ci#ifdef HIPERF_HILOGW 5048f512ceSopenharmony_ci#undef HIPERF_HILOGW 5148f512ceSopenharmony_ci#endif 5248f512ceSopenharmony_ci 5348f512ceSopenharmony_ci#ifdef HIPERF_HILOGI 5448f512ceSopenharmony_ci#undef HIPERF_HILOGI 5548f512ceSopenharmony_ci#endif 5648f512ceSopenharmony_ci 5748f512ceSopenharmony_ci#ifdef HIPERF_HILOGD 5848f512ceSopenharmony_ci#undef HIPERF_HILOGD 5948f512ceSopenharmony_ci#endif 6048f512ceSopenharmony_ci 6148f512ceSopenharmony_ci// param of log interface, such as HIPERF_HILOGF. 6248f512ceSopenharmony_cienum HiperfModule { 6348f512ceSopenharmony_ci MODULE_DEFAULT = 0, 6448f512ceSopenharmony_ci MODULE_JS_NAPI, 6548f512ceSopenharmony_ci MODULE_CPP_API, 6648f512ceSopenharmony_ci}; 6748f512ceSopenharmony_ci 6848f512ceSopenharmony_cistatic constexpr unsigned int BASE_HIPERF_DOMAIN_ID = 0xD002D0D; 6948f512ceSopenharmony_cistatic constexpr OHOS::HiviewDFX::HiLogLabel HIPERF_HILOG_LABLE[] = { 7048f512ceSopenharmony_ci {LOG_CORE, BASE_HIPERF_DOMAIN_ID, "hiperf"}, 7148f512ceSopenharmony_ci {LOG_CORE, BASE_HIPERF_DOMAIN_ID, "HiperfJSNAPI"}, 7248f512ceSopenharmony_ci {LOG_CORE, BASE_HIPERF_DOMAIN_ID, "HiperfCPPAPI"}, 7348f512ceSopenharmony_ci}; 7448f512ceSopenharmony_ci 7548f512ceSopenharmony_ci#ifdef LOG_DOMAIN 7648f512ceSopenharmony_ci#undef LOG_DOMAIN 7748f512ceSopenharmony_ci#endif 7848f512ceSopenharmony_ci#define LOG_DOMAIN 0xD002D0D 7948f512ceSopenharmony_ci 8048f512ceSopenharmony_ci#ifdef LOG_TAG 8148f512ceSopenharmony_ci#undef LOG_TAG 8248f512ceSopenharmony_ci#endif 8348f512ceSopenharmony_ci#define LOG_TAG "hiperf" 8448f512ceSopenharmony_ci 8548f512ceSopenharmony_ci// In order to improve performance, do not check the module range 8648f512ceSopenharmony_ci 8748f512ceSopenharmony_ci#define HIPERF_HILOGF(module, ...) \ 8848f512ceSopenharmony_ci HILOG_FATAL(LOG_CORE, __VA_ARGS__) 8948f512ceSopenharmony_ci#define HIPERF_HILOGE(module, ...) \ 9048f512ceSopenharmony_ci HILOG_ERROR(LOG_CORE, __VA_ARGS__) 9148f512ceSopenharmony_ci#define HIPERF_HILOGW(module, ...) \ 9248f512ceSopenharmony_ci HILOG_WARN(LOG_CORE, __VA_ARGS__) 9348f512ceSopenharmony_ci#define HIPERF_HILOGI(module, ...) \ 9448f512ceSopenharmony_ci HILOG_INFO(LOG_CORE, __VA_ARGS__) 9548f512ceSopenharmony_ci#define HIPERF_HILOGD(module, ...) \ 9648f512ceSopenharmony_ci HILOG_DEBUG(LOG_CORE, __VA_ARGS__) 9748f512ceSopenharmony_ci#else 9848f512ceSopenharmony_ci 9948f512ceSopenharmony_ci#define HIPERF_HILOGF(module, ...) printf(FORMATTED(__VA_ARGS__)) 10048f512ceSopenharmony_ci#define HIPERF_HILOGE(module, ...) printf(FORMATTED(__VA_ARGS__)) 10148f512ceSopenharmony_ci#define HIPERF_HILOGW(module, ...) printf(FORMATTED(__VA_ARGS__)) 10248f512ceSopenharmony_ci#define HIPERF_HILOGI(module, ...) printf(FORMATTED(__VA_ARGS__)) 10348f512ceSopenharmony_ci#define HIPERF_HILOGD(module, ...) printf(FORMATTED(__VA_ARGS__)) 10448f512ceSopenharmony_ci 10548f512ceSopenharmony_ci#endif // CONFIG_NO_HILOG 10648f512ceSopenharmony_ci 10748f512ceSopenharmony_cistatic inline std::string StringFormat(const char* fmt, ...) 10848f512ceSopenharmony_ci{ 10948f512ceSopenharmony_ci va_list vargs; 11048f512ceSopenharmony_ci char buf[1024] = {0}; // 1024: buf size 11148f512ceSopenharmony_ci std::string format(fmt); 11248f512ceSopenharmony_ci va_start(vargs, fmt); 11348f512ceSopenharmony_ci if (vsnprintf_s(buf, sizeof(buf), sizeof(buf) - 1, format.c_str(), vargs) < 0) { 11448f512ceSopenharmony_ci va_end(vargs); 11548f512ceSopenharmony_ci return ""; 11648f512ceSopenharmony_ci } 11748f512ceSopenharmony_ci 11848f512ceSopenharmony_ci va_end(vargs); 11948f512ceSopenharmony_ci return buf; 12048f512ceSopenharmony_ci} 12148f512ceSopenharmony_ci 12248f512ceSopenharmony_ci#define NO_RETVAL /* retval */ 12348f512ceSopenharmony_ci#define LOG_TYPE_PRINTF 2 12448f512ceSopenharmony_ci#define LOG_TYPE_WITH_HILOG 3 12548f512ceSopenharmony_ci#define CHECK_TRUE(expr, retval, log, fmt, ...) \ 12648f512ceSopenharmony_ci do { \ 12748f512ceSopenharmony_ci if (expr) { \ 12848f512ceSopenharmony_ci if (log == 1) { \ 12948f512ceSopenharmony_ci std::string str = StringFormat(fmt, ##__VA_ARGS__); \ 13048f512ceSopenharmony_ci HLOGE("%s", str.c_str()); \ 13148f512ceSopenharmony_ci } else if (log == LOG_TYPE_PRINTF) { \ 13248f512ceSopenharmony_ci printf("%s", StringFormat(fmt, ##__VA_ARGS__).c_str()); \ 13348f512ceSopenharmony_ci } else if (log == LOG_TYPE_WITH_HILOG) { \ 13448f512ceSopenharmony_ci std::string str = StringFormat(fmt, ##__VA_ARGS__); \ 13548f512ceSopenharmony_ci HLOGE("%s", str.c_str()); \ 13648f512ceSopenharmony_ci HIPERF_HILOGE(MODULE_DEFAULT, "%s", str.c_str()); \ 13748f512ceSopenharmony_ci } \ 13848f512ceSopenharmony_ci return retval; \ 13948f512ceSopenharmony_ci } \ 14048f512ceSopenharmony_ci } while (0) 14148f512ceSopenharmony_ci 14248f512ceSopenharmony_ci#endif // HIPERF_HILOG 143