log.h revision b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80
1a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 2a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Copyright (C) 2013 The Android Open Source Project 3a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 4a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Licensed under the Apache License, Version 2.0 (the "License"); 5a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * you may not use this file except in compliance with the License. 6a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * You may obtain a copy of the License at 7a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 8a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * http://www.apache.org/licenses/LICENSE-2.0 9a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 10a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Unless required by applicable law or agreed to in writing, software 11a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * distributed under the License is distributed on an "AS IS" BASIS, 12a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * See the License for the specific language governing permissions and 14a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * limitations under the License. 15a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 16a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 17a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_H_ 18a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_H_ 19a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 20a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#include <android/log.h> 21a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 22a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifdef __cplusplus 23a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craikextern "C" { 24a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 25a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 26a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik// --------------------------------------------------------------------- 27a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 28a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 29a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Normally we strip ALOGV (VERBOSE messages) from release builds. 30a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * You can modify this (for example with "#define LOG_NDEBUG 0" 31a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * at the top of your source file) to change that behavior. 32a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 33a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_NDEBUG 34a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifdef NDEBUG 35a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_NDEBUG 1 36a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#else 37a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_NDEBUG 0 38a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 39a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 40a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 41a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 42a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * This is the local tag used for the following simplified 43a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * logging macros. You can change this preprocessor definition 44a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * before using the other macros to change the tag. 45a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 46a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_TAG 47a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_TAG "RasterMill" 48a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 49a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 50a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik// --------------------------------------------------------------------- 51a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 52a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 53a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Simplified macro to send a verbose log message using the current LOG_TAG. 54a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 55a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGV 56a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#if LOG_NDEBUG 57a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGV(...) ((void)0) 58a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#else 59a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGV(...) ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) 60a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 61a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 62a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 63a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define CONDITION(cond) (__builtin_expect((cond)!=0, 0)) 64a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 65a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGV_IF 66a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#if LOG_NDEBUG 67a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGV_IF(cond, ...) ((void)0) 68a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#else 69a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGV_IF(cond, ...) \ 70a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ( (CONDITION(cond)) \ 71a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ? ((void)ALOG(LOG_VERBOSE, LOG_TAG, __VA_ARGS__)) \ 72a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik : (void)0 ) 73a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 74a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 75a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 76a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 77a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Simplified macro to send a debug log message using the current LOG_TAG. 78a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 79a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGD 80a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGD(...) ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) 81a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 82a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 83a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGD_IF 84a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGD_IF(cond, ...) \ 85a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ( (CONDITION(cond)) \ 86a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ? ((void)ALOG(LOG_DEBUG, LOG_TAG, __VA_ARGS__)) \ 87a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik : (void)0 ) 88a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 89a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 90a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 91a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Simplified macro to send an info log message using the current LOG_TAG. 92a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 93a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGI 94a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGI(...) ((void)ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) 95a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 96a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 97a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGI_IF 98a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGI_IF(cond, ...) \ 99a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ( (CONDITION(cond)) \ 100a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ? ((void)ALOG(LOG_INFO, LOG_TAG, __VA_ARGS__)) \ 101a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik : (void)0 ) 102a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 103a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 104a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 105a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Simplified macro to send a warning log message using the current LOG_TAG. 106a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 107a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGW 108a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGW(...) ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) 109a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 110a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 111a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGW_IF 112a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGW_IF(cond, ...) \ 113a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ( (CONDITION(cond)) \ 114a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ? ((void)ALOG(LOG_WARN, LOG_TAG, __VA_ARGS__)) \ 115a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik : (void)0 ) 116a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 117a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 118a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 119a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Simplified macro to send an error log message using the current LOG_TAG. 120a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 121a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGE 122a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGE(...) ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) 123a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 124a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 125a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOGE_IF 126a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOGE_IF(cond, ...) \ 127a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ( (CONDITION(cond)) \ 128a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ? ((void)ALOG(LOG_ERROR, LOG_TAG, __VA_ARGS__)) \ 129a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik : (void)0 ) 130a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 131a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 132a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik// --------------------------------------------------------------------- 133a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 134a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 135a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Conditional based on whether the current LOG_TAG is enabled at 136a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * verbose priority. 137a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 138a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef IF_ALOGV 139a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#if LOG_NDEBUG 140a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define IF_ALOGV() if (false) 141a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#else 142a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define IF_ALOGV() IF_ALOG(LOG_VERBOSE, LOG_TAG) 143a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 144a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 145a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 146a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 147a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Conditional based on whether the current LOG_TAG is enabled at 148a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * debug priority. 149a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 150a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef IF_ALOGD 151a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define IF_ALOGD() IF_ALOG(LOG_DEBUG, LOG_TAG) 152a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 153a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 154a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 155a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Conditional based on whether the current LOG_TAG is enabled at 156a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * info priority. 157a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 158a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef IF_ALOGI 159a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define IF_ALOGI() IF_ALOG(LOG_INFO, LOG_TAG) 160a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 161a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 162a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 163a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Conditional based on whether the current LOG_TAG is enabled at 164a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * warn priority. 165a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 166a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef IF_ALOGW 167a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define IF_ALOGW() IF_ALOG(LOG_WARN, LOG_TAG) 168a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 169a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 170a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 171a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Conditional based on whether the current LOG_TAG is enabled at 172a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * error priority. 173a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 174a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef IF_ALOGE 175a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define IF_ALOGE() IF_ALOG(LOG_ERROR, LOG_TAG) 176a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 177a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 178a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik// --------------------------------------------------------------------- 179a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 180a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 181a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Log a fatal error. If the given condition fails, this stops program 182a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * execution like a normal assertion, but also generating the given message. 183a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * It is NOT stripped from release builds. Note that the condition test 184a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * is -inverted- from the normal assert() semantics. 185a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 186a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_ALWAYS_FATAL_IF 187a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_ALWAYS_FATAL_IF(cond, ...) \ 188a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ( (CONDITION(cond)) \ 189a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ? ((void)android_printAssert(#cond, LOG_TAG, ## __VA_ARGS__)) \ 190a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik : (void)0 ) 191a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 192a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 193a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_ALWAYS_FATAL 194a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_ALWAYS_FATAL(...) \ 195a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik ( ((void)android_printAssert(NULL, LOG_TAG, ## __VA_ARGS__)) ) 196a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 197a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 198a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 199a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Versions of LOG_ALWAYS_FATAL_IF and LOG_ALWAYS_FATAL that 200a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * are stripped out of release builds. 201a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 202a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#if LOG_NDEBUG 203a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 204a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_FATAL_IF 205a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_FATAL_IF(cond, ...) ((void)0) 206a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 207a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_FATAL 208a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_FATAL(...) ((void)0) 209a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 210a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 211a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#else 212a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 213a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_FATAL_IF 214a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_FATAL_IF(cond, ...) LOG_ALWAYS_FATAL_IF(cond, ## __VA_ARGS__) 215a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 216a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_FATAL 217a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_FATAL(...) LOG_ALWAYS_FATAL(__VA_ARGS__) 218a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 219a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 220a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 221a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 222a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 223a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Assertion that generates a log message when the assertion fails. 224a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Stripped out of release builds. Uses the current LOG_TAG. 225a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 226a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOG_ASSERT 227a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOG_ASSERT(cond, ...) LOG_FATAL_IF(!(cond), ## __VA_ARGS__) 228a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik//#define ALOG_ASSERT(cond) LOG_FATAL_IF(!(cond), "Assertion failed: " #cond) 229a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 230a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 231a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik// --------------------------------------------------------------------- 232a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 233a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 234a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Basic log message macro. 235a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 236a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Example: 237a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * ALOG(LOG_WARN, NULL, "Failed with error %d", errno); 238a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * 239a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * The second argument may be NULL or "" to indicate the "global" tag. 240a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 241a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef ALOG 242a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define ALOG(priority, tag, ...) \ 243a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik LOG_PRI(ANDROID_##priority, tag, __VA_ARGS__) 244a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 245a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 246a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 247a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Log macro that allows you to specify a number for the priority. 248a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 249a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_PRI 250a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_PRI(priority, tag, ...) \ 251a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik __android_log_print(priority, tag, __VA_ARGS__) 252a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 253a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 254a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 255a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Log macro that allows you to pass in a varargs ("args" is a va_list). 256a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 257a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef LOG_PRI_VA 258a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define LOG_PRI_VA(priority, tag, fmt, args) \ 259a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik __android_log_vprint(priority, NULL, tag, fmt, args) 260a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 261a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 262a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik/* 263a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik * Conditional given a desired logging priority and tag. 264a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik */ 265a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifndef IF_ALOG 266a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#define IF_ALOG(priority, tag) \ 267a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik if (__android_log_assert(ANDROID_##priority, tag)) 268a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 269a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 270b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck/* Returns 2nd arg. Used to substitute default value if caller's vararg list 271b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck * is empty. 272b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck */ 273b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck#define __android_second(dummy, second, ...) second 274b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck 275b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck/* If passed multiple args, returns ',' followed by all but 1st arg, otherwise 276b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck * returns nothing. 277b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck */ 278b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck#define __android_rest(first, ...) , ## __VA_ARGS__ 279b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck 280b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck#define android_printAssert(cond, tag, fmt...) \ 281b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck __android_log_assert(cond, tag, \ 282b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck __android_second(0, ## fmt, NULL) __android_rest(fmt)) 283b5fb6d0f18fed511256fd3aa07bb3eccbbb15f80John Reck 284a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#ifdef __cplusplus 285a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik} 286a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif 287a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik 288a1265c3d8a20e805e0c45083d5c7d728d4b70009Chris Craik#endif /* LOG_H_ */ 289