1d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema/* 2d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* Copyright (c) 2017, The Linux Foundation. All rights reserved. 3d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* 4d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* Redistribution and use in source and binary forms, with or without 5d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* modification, are permitted provided that the following conditions are 6d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* met: 7d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Redistributions of source code must retain the above copyright 8d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* notice, this list of conditions and the following disclaimer. 9d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Redistributions in binary form must reproduce the above 10d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* copyright notice, this list of conditions and the following 11d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* disclaimer in the documentation and/or other materials provided 12d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* with the distribution. 13d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* * Neither the name of The Linux Foundation nor the names of its 14d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* contributors may be used to endorse or promote products derived 15d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* from this software without specific prior written permission. 16d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* 17d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema* IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema*/ 29d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 30d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#ifndef __DRM_LOGGER_H__ 31d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define __DRM_LOGGER_H__ 32d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 33d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#include <utility> 34d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 35d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemanamespace drm_utils { 36d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 37d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennemaclass DRMLogger { 38d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema public: 39d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema virtual ~DRMLogger() {} 40d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema virtual void Error(const char *format, ...) = 0; 41d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema virtual void Warning(const char *format, ...) = 0; 42d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema virtual void Info(const char *format, ...) = 0; 43d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema virtual void Debug(const char *format, ...) = 0; 44d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 45d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema static void Set(DRMLogger *logger) { s_instance = logger; } 46d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema static DRMLogger *Get() { return s_instance; } 47d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 48d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema private: 49d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema static DRMLogger *s_instance; 50d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema}; 51d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 52d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define DRM_LOG(method, format, ...) \ 53d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema if (drm_utils::DRMLogger::Get()) { \ 54d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema drm_utils::DRMLogger::Get()->method(format, ##__VA_ARGS__); \ 55d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema } 56d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 57d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define DRM_LOG_CONTEXT(method, format, ...) \ 58d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema DRM_LOG(method, __CLASS__ "::%s: " format, __FUNCTION__, ##__VA_ARGS__); 59d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 60d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define DRM_LOGE(format, ...) DRM_LOG_CONTEXT(Error, format, ##__VA_ARGS__) 61d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define DRM_LOGW(format, ...) DRM_LOG_CONTEXT(Warning, format, ##__VA_ARGS__) 62d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define DRM_LOGI(format, ...) DRM_LOG_CONTEXT(Info, format, ##__VA_ARGS__) 63d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#define DRM_LOGD_IF(pred, format, ...) \ 64d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema if (pred) \ 65d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema DRM_LOG_CONTEXT(Debug, format, ##__VA_ARGS__) 66d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 67d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema} // namespace drm_utils 68d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema 69d39a514dd0540cf47e121775a77e9ac1b578bdb1Ben Fennema#endif // __DRM_LOGGER_H__ 70