/* // Copyright (c) 2014 Intel Corporation // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. */ #ifndef HWC_TRACE_H #define HWC_TRACE_H #define LOG_TAG "hwcomposer" //#define LOG_NDEBUG 0 #include <cutils/log.h> #ifdef _cplusplus extern "C" { #endif // Helper to automatically preappend classname::functionname to the log message #define VTRACE(fmt,...) ALOGV("%s: " fmt, __func__, ##__VA_ARGS__) #define DTRACE(fmt,...) ALOGD("%s: " fmt, __func__, ##__VA_ARGS__) #define ITRACE(fmt,...) ALOGI("%s: " fmt, __func__, ##__VA_ARGS__) #define WTRACE(fmt,...) ALOGW("%s: " fmt, __func__, ##__VA_ARGS__) #define ETRACE(fmt,...) ALOGE("%s: " fmt, __func__, ##__VA_ARGS__) // Function call tracing #if 0 #define CTRACE() ALOGV("Calling %s", __func__) #define XTRACE() ALOGV("Leaving %s", __func__) #else #define CTRACE() ((void)0) #define XTRACE() ((void)0) #endif // Arguments tracing #if 0 #define ATRACE(fmt,...) ALOGV("%s(args): "fmt, __func__, ##__VA_ARGS__); #else #define ATRACE(fmt,...) ((void)0) #endif // Helper to abort the execution if object is not initialized. // This should never happen if the rules below are followed during design: // 1) Create an object. // 2) Initialize the object immediately. // 3) If failed, delete the object. // These helpers should be disabled and stripped out of release build #define RETURN_X_IF_NOT_INIT(X) \ do { \ CTRACE(); \ if (false == mInitialized) { \ LOG_ALWAYS_FATAL("%s: Object is not initialized! Line = %d", __func__, __LINE__); \ return X; \ } \ } while (0) #if 1 #define RETURN_FALSE_IF_NOT_INIT() RETURN_X_IF_NOT_INIT(false) #define RETURN_VOID_IF_NOT_INIT() RETURN_X_IF_NOT_INIT() #define RETURN_NULL_IF_NOT_INIT() RETURN_X_IF_NOT_INIT(0) #else #define RETURN_FALSE_IF_NOT_INIT() ((void)0) #define RETURN_VOID_IF_NOT_INIT() ((void)0) #define RETURN_NULL_IF_NOT_INIT() ((void)0) #endif // Helper to log error message, call de-initializer and return false. #define DEINIT_AND_RETURN_FALSE(...) \ do { \ ETRACE(__VA_ARGS__); \ deinitialize(); \ return false; \ } while (0) #define DEINIT_AND_DELETE_OBJ(X) \ if (X) {\ X->deinitialize();\ delete X; \ X = NULL; \ } #define WARN_IF_NOT_DEINIT() \ CTRACE(); \ if (mInitialized) {\ LOG_ALWAYS_FATAL("%s: Object is not deinitialized! Line = %d", __func__, __LINE__); \ } // _cplusplus #ifdef _cplusplus } #endif #endif /* HWC_TRACE_H */