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