1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 // This file defines useful logging macros/methods for CDM adapter. 6 7 #ifndef MEDIA_CDM_PPAPI_CDM_LOGGING_H_ 8 #define MEDIA_CDM_PPAPI_CDM_LOGGING_H_ 9 10 #include <iostream> 11 #include <sstream> 12 #include <string> 13 14 namespace media { 15 16 namespace { 17 18 // The following classes/macros are adapted from base/logging.h. 19 20 // This class is used to explicitly ignore values in the conditional 21 // logging macros. This avoids compiler warnings like "value computed 22 // is not used" and "statement has no effect". 23 class LogMessageVoidify { 24 public: 25 LogMessageVoidify() {} 26 // This has to be an operator with a precedence lower than << but 27 // higher than ?: 28 void operator&(std::ostream&) {} 29 }; 30 31 } // namespace 32 33 // This class serves two purposes: 34 // (1) It adds common headers to the log message, e.g. timestamp, process ID. 35 // (2) It adds a line break at the end of the log message. 36 // This class is copied and modified from base/logging.* but is quite different 37 // in terms of how things work. This class is designed to work only with the 38 // CDM_DLOG() defined below and should not be used for other purposes. 39 class CdmLogMessage { 40 public: 41 CdmLogMessage(const char* file, int line); 42 ~CdmLogMessage(); 43 44 std::string message() { return stream_.str(); } 45 46 private: 47 std::ostringstream stream_; 48 }; 49 50 // Helper macro which avoids evaluating the arguments to a stream if 51 // the condition doesn't hold. 52 #define CDM_LAZY_STREAM(stream, condition) \ 53 !(condition) ? (void) 0 : LogMessageVoidify() & (stream) 54 55 #define CDM_DLOG() CDM_LAZY_STREAM(std::cout, CDM_DLOG_IS_ON()) \ 56 << CdmLogMessage(__FILE__, __LINE__).message() 57 58 #if defined(NDEBUG) 59 #define CDM_DLOG_IS_ON() false 60 #else 61 #define CDM_DLOG_IS_ON() true 62 #endif 63 64 } // namespace media 65 66 #endif // MEDIA_CDM_PPAPI_CDM_LOGGING_H_ 67