1/* 2 * Copyright (C) 2005-2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#pragma once 18 19#include <android/log.h> 20 21/* 22 * Normally we strip the effects of ALOGV (VERBOSE messages), 23 * LOG_FATAL and LOG_FATAL_IF (FATAL assert messages) from the 24 * release builds be defining NDEBUG. You can modify this (for 25 * example with "#define LOG_NDEBUG 0" at the top of your source 26 * file) to change that behavior. 27 */ 28 29#ifndef LOG_NDEBUG 30#ifdef NDEBUG 31#define LOG_NDEBUG 1 32#else 33#define LOG_NDEBUG 0 34#endif 35#endif 36 37#ifndef __predict_false 38#define __predict_false(exp) __builtin_expect((exp) != 0, 0) 39#endif 40 41/* 42 * Simplified macro to send a verbose system log message using current LOG_TAG. 43 */ 44#ifndef SLOGV 45#define __SLOGV(...) \ 46 ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, LOG_TAG, \ 47 __VA_ARGS__)) 48#if LOG_NDEBUG 49#define SLOGV(...) \ 50 do { \ 51 if (0) { \ 52 __SLOGV(__VA_ARGS__); \ 53 } \ 54 } while (0) 55#else 56#define SLOGV(...) __SLOGV(__VA_ARGS__) 57#endif 58#endif 59 60#ifndef SLOGV_IF 61#if LOG_NDEBUG 62#define SLOGV_IF(cond, ...) ((void)0) 63#else 64#define SLOGV_IF(cond, ...) \ 65 ((__predict_false(cond)) \ 66 ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_VERBOSE, \ 67 LOG_TAG, __VA_ARGS__)) \ 68 : (void)0) 69#endif 70#endif 71 72/* 73 * Simplified macro to send a debug system log message using current LOG_TAG. 74 */ 75#ifndef SLOGD 76#define SLOGD(...) \ 77 ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, LOG_TAG, \ 78 __VA_ARGS__)) 79#endif 80 81#ifndef SLOGD_IF 82#define SLOGD_IF(cond, ...) \ 83 ((__predict_false(cond)) \ 84 ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_DEBUG, \ 85 LOG_TAG, __VA_ARGS__)) \ 86 : (void)0) 87#endif 88 89/* 90 * Simplified macro to send an info system log message using current LOG_TAG. 91 */ 92#ifndef SLOGI 93#define SLOGI(...) \ 94 ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, LOG_TAG, \ 95 __VA_ARGS__)) 96#endif 97 98#ifndef SLOGI_IF 99#define SLOGI_IF(cond, ...) \ 100 ((__predict_false(cond)) \ 101 ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_INFO, \ 102 LOG_TAG, __VA_ARGS__)) \ 103 : (void)0) 104#endif 105 106/* 107 * Simplified macro to send a warning system log message using current LOG_TAG. 108 */ 109#ifndef SLOGW 110#define SLOGW(...) \ 111 ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, LOG_TAG, \ 112 __VA_ARGS__)) 113#endif 114 115#ifndef SLOGW_IF 116#define SLOGW_IF(cond, ...) \ 117 ((__predict_false(cond)) \ 118 ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_WARN, \ 119 LOG_TAG, __VA_ARGS__)) \ 120 : (void)0) 121#endif 122 123/* 124 * Simplified macro to send an error system log message using current LOG_TAG. 125 */ 126#ifndef SLOGE 127#define SLOGE(...) \ 128 ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, LOG_TAG, \ 129 __VA_ARGS__)) 130#endif 131 132#ifndef SLOGE_IF 133#define SLOGE_IF(cond, ...) \ 134 ((__predict_false(cond)) \ 135 ? ((void)__android_log_buf_print(LOG_ID_SYSTEM, ANDROID_LOG_ERROR, \ 136 LOG_TAG, __VA_ARGS__)) \ 137 : (void)0) 138#endif 139