tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

ImageLogging.h (6378B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
      2 *
      3 * This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #ifndef mozilla_image_ImageLogging_h
      8 #define mozilla_image_ImageLogging_h
      9 
     10 #include "mozilla/Logging.h"
     11 #include "Image.h"
     12 #include "nsIURI.h"
     13 #include "prinrval.h"
     14 
     15 static mozilla::LazyLogModule gImgLog("imgRequest");
     16 
     17 #define GIVE_ME_MS_NOW() PR_IntervalToMilliseconds(PR_IntervalNow())
     18 
     19 using mozilla::LogLevel;
     20 
     21 class LogScope {
     22 public:
     23  LogScope(mozilla::LogModule* aLog, void* aFrom, const char* aFunc)
     24      : mLog(aLog), mFrom(aFrom), mFunc(aFunc) {
     25    MOZ_LOG(mLog, LogLevel::Debug,
     26            ("%d [this=%p] %s {ENTER}\n", GIVE_ME_MS_NOW(), mFrom, mFunc));
     27  }
     28 
     29  /* const char * constructor */
     30  LogScope(mozilla::LogModule* aLog, void* from, const char* fn,
     31           const char* paramName, const char* paramValue)
     32      : mLog(aLog), mFrom(from), mFunc(fn) {
     33    MOZ_LOG(mLog, LogLevel::Debug,
     34            ("%d [this=%p] %s (%s=\"%s\") {ENTER}\n", GIVE_ME_MS_NOW(), mFrom,
     35             mFunc, paramName, paramValue));
     36  }
     37 
     38  /* void ptr constructor */
     39  LogScope(mozilla::LogModule* aLog, void* from, const char* fn,
     40           const char* paramName, const void* paramValue)
     41      : mLog(aLog), mFrom(from), mFunc(fn) {
     42    MOZ_LOG(mLog, LogLevel::Debug,
     43            ("%d [this=%p] %s (%s=%p) {ENTER}\n", GIVE_ME_MS_NOW(), mFrom,
     44             mFunc, paramName, paramValue));
     45  }
     46 
     47  /* int32_t constructor */
     48  LogScope(mozilla::LogModule* aLog, void* from, const char* fn,
     49           const char* paramName, int32_t paramValue)
     50      : mLog(aLog), mFrom(from), mFunc(fn) {
     51    MOZ_LOG(mLog, LogLevel::Debug,
     52            ("%d [this=%p] %s (%s=\"%d\") {ENTER}\n", GIVE_ME_MS_NOW(), mFrom,
     53             mFunc, paramName, paramValue));
     54  }
     55 
     56  /* uint32_t constructor */
     57  LogScope(mozilla::LogModule* aLog, void* from, const char* fn,
     58           const char* paramName, uint32_t paramValue)
     59      : mLog(aLog), mFrom(from), mFunc(fn) {
     60    MOZ_LOG(mLog, LogLevel::Debug,
     61            ("%d [this=%p] %s (%s=\"%d\") {ENTER}\n", GIVE_ME_MS_NOW(), mFrom,
     62             mFunc, paramName, paramValue));
     63  }
     64 
     65  /* nsIURI constructor */
     66  LogScope(mozilla::LogModule* aLog, void* from, const char* fn,
     67           const char* paramName, nsIURI* aURI)
     68      : mLog(aLog), mFrom(from), mFunc(fn) {
     69    if (MOZ_LOG_TEST(gImgLog, LogLevel::Debug)) {
     70      static const size_t sMaxTruncatedLength = 1024;
     71      nsAutoCString spec("<unknown>");
     72      if (aURI) {
     73        aURI->GetSpec(spec);
     74        if (spec.Length() >= sMaxTruncatedLength) {
     75          spec.Truncate(sMaxTruncatedLength);
     76        }
     77      }
     78      MOZ_LOG(aLog, LogLevel::Debug,
     79              ("%d [this=%p] %s (%s=\"%s\") {ENTER}\n", GIVE_ME_MS_NOW(), from,
     80               fn, paramName, spec.get()));
     81    }
     82  }
     83 
     84  /* Image constructor */
     85  LogScope(mozilla::LogModule* aLog, void* from, const char* fn,
     86           const char* paramName, mozilla::image::Image* aImage)
     87      : LogScope(aLog, from, fn, paramName,
     88                 aImage ? aImage->GetURI() : nullptr) {}
     89 
     90  ~LogScope() {
     91    MOZ_LOG(mLog, LogLevel::Debug,
     92            ("%d [this=%p] %s {EXIT}\n", GIVE_ME_MS_NOW(), mFrom, mFunc));
     93  }
     94 
     95 private:
     96  mozilla::LogModule* mLog;
     97  void* mFrom;
     98  const char* mFunc;
     99 };
    100 
    101 class LogFunc {
    102 public:
    103  LogFunc(mozilla::LogModule* aLog, void* from, const char* fn) {
    104    MOZ_LOG(aLog, LogLevel::Debug,
    105            ("%d [this=%p] %s\n", GIVE_ME_MS_NOW(), from, fn));
    106  }
    107 
    108  LogFunc(mozilla::LogModule* aLog, void* from, const char* fn,
    109          const char* paramName, const char* paramValue) {
    110    MOZ_LOG(aLog, LogLevel::Debug,
    111            ("%d [this=%p] %s (%s=\"%s\")\n", GIVE_ME_MS_NOW(), from, fn,
    112             paramName, paramValue));
    113  }
    114 
    115  LogFunc(mozilla::LogModule* aLog, void* from, const char* fn,
    116          const char* paramName, const void* paramValue) {
    117    MOZ_LOG(aLog, LogLevel::Debug,
    118            ("%d [this=%p] %s (%s=\"%p\")\n", GIVE_ME_MS_NOW(), from, fn,
    119             paramName, paramValue));
    120  }
    121 
    122  LogFunc(mozilla::LogModule* aLog, void* from, const char* fn,
    123          const char* paramName, uint32_t paramValue) {
    124    MOZ_LOG(aLog, LogLevel::Debug,
    125            ("%d [this=%p] %s (%s=\"%d\")\n", GIVE_ME_MS_NOW(), from, fn,
    126             paramName, paramValue));
    127  }
    128 
    129  LogFunc(mozilla::LogModule* aLog, void* from, const char* fn,
    130          const char* paramName, nsIURI* aURI) {
    131    if (MOZ_LOG_TEST(gImgLog, LogLevel::Debug)) {
    132      static const size_t sMaxTruncatedLength = 1024;
    133      nsAutoCString spec("<unknown>");
    134      if (aURI) {
    135        aURI->GetSpec(spec);
    136        if (spec.Length() >= sMaxTruncatedLength) {
    137          spec.Truncate(sMaxTruncatedLength);
    138        }
    139      }
    140      MOZ_LOG(aLog, LogLevel::Debug,
    141              ("%d [this=%p] %s (%s=\"%s\")\n", GIVE_ME_MS_NOW(), from, fn,
    142               paramName, spec.get()));
    143    }
    144  }
    145 
    146  LogFunc(mozilla::LogModule* aLog, void* from, const char* fn,
    147          const char* paramName, mozilla::image::Image* aImage)
    148      : LogFunc(aLog, from, fn, paramName,
    149                aImage ? aImage->GetURI() : nullptr) {}
    150 };
    151 
    152 class LogMessage {
    153 public:
    154  LogMessage(mozilla::LogModule* aLog, void* from, const char* fn,
    155             const char* msg) {
    156    MOZ_LOG(aLog, LogLevel::Debug,
    157            ("%d [this=%p] %s -- %s\n", GIVE_ME_MS_NOW(), from, fn, msg));
    158  }
    159 };
    160 
    161 #define LOG_SCOPE_APPEND_LINE_NUMBER_PASTE(id, line) id##line
    162 #define LOG_SCOPE_APPEND_LINE_NUMBER_EXPAND(id, line) \
    163  LOG_SCOPE_APPEND_LINE_NUMBER_PASTE(id, line)
    164 #define LOG_SCOPE_APPEND_LINE_NUMBER(id) \
    165  LOG_SCOPE_APPEND_LINE_NUMBER_EXPAND(id, __LINE__)
    166 
    167 #define LOG_SCOPE(l, s) \
    168  LogScope LOG_SCOPE_APPEND_LINE_NUMBER(LOG_SCOPE_TMP_VAR)(l, this, s)
    169 
    170 #define LOG_SCOPE_WITH_PARAM(l, s, pn, pv) \
    171  LogScope LOG_SCOPE_APPEND_LINE_NUMBER(LOG_SCOPE_TMP_VAR)(l, this, s, pn, pv)
    172 
    173 #define LOG_FUNC(l, s) LogFunc(l, this, s)
    174 
    175 #define LOG_FUNC_WITH_PARAM(l, s, pn, pv) LogFunc(l, this, s, pn, pv)
    176 
    177 #define LOG_STATIC_FUNC(l, s) LogFunc(l, nullptr, s)
    178 
    179 #define LOG_STATIC_FUNC_WITH_PARAM(l, s, pn, pv) LogFunc(l, nullptr, s, pn, pv)
    180 
    181 #define LOG_MSG(l, s, m) LogMessage(l, this, s, m)
    182 
    183 #define LOG_MSG_WITH_PARAM LOG_FUNC_WITH_PARAM
    184 
    185 #endif  // mozilla_image_ImageLogging_h