Home | History | Annotate | Download | only in ppapi
      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