| /* |
| // 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 */ |