| // Copyright 2013 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| // This file defines useful logging macros/methods for CDM adapter. |
| |
| #ifndef MEDIA_CDM_PPAPI_CDM_LOGGING_H_ |
| #define MEDIA_CDM_PPAPI_CDM_LOGGING_H_ |
| |
| #include <iostream> |
| #include <sstream> |
| #include <string> |
| |
| namespace media { |
| |
| namespace { |
| |
| // The following classes/macros are adapted from base/logging.h. |
| |
| // This class is used to explicitly ignore values in the conditional |
| // logging macros. This avoids compiler warnings like "value computed |
| // is not used" and "statement has no effect". |
| class LogMessageVoidify { |
| public: |
| LogMessageVoidify() {} |
| // This has to be an operator with a precedence lower than << but |
| // higher than ?: |
| void operator&(std::ostream&) {} |
| }; |
| |
| } // namespace |
| |
| // This class serves two purposes: |
| // (1) It adds common headers to the log message, e.g. timestamp, process ID. |
| // (2) It adds a line break at the end of the log message. |
| // This class is copied and modified from base/logging.* but is quite different |
| // in terms of how things work. This class is designed to work only with the |
| // CDM_DLOG() defined below and should not be used for other purposes. |
| class CdmLogMessage { |
| public: |
| CdmLogMessage(const char* file, int line); |
| ~CdmLogMessage(); |
| |
| std::string message() { return stream_.str(); } |
| |
| private: |
| std::ostringstream stream_; |
| }; |
| |
| // Helper macro which avoids evaluating the arguments to a stream if |
| // the condition doesn't hold. |
| #define CDM_LAZY_STREAM(stream, condition) \ |
| !(condition) ? (void) 0 : LogMessageVoidify() & (stream) |
| |
| #define CDM_DLOG() CDM_LAZY_STREAM(std::cout, CDM_DLOG_IS_ON()) \ |
| << CdmLogMessage(__FILE__, __LINE__).message() |
| |
| #if defined(NDEBUG) |
| #define CDM_DLOG_IS_ON() false |
| #else |
| #define CDM_DLOG_IS_ON() true |
| #endif |
| |
| } // namespace media |
| |
| #endif // MEDIA_CDM_PPAPI_CDM_LOGGING_H_ |