| // Copyright 2018 The Chromium Authors | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef GPU_COMMAND_BUFFER_CLIENT_LOGGING_H_ | |
| #define GPU_COMMAND_BUFFER_CLIENT_LOGGING_H_ | |
| #include "base/logging.h" | |
| #include "gpu/command_buffer/client/gles2_impl_export.h" | |
| // Macros to log information if --enable-gpu-client-logging is set and either: | |
| // DCHECK_IS_ON(), or | |
| // enable_gpu_client_logging=true is set in GN args. | |
| // Code is optimized out if DCHECK is disabled or the other GN arg is not set. | |
| // Requires that a LogSettings named log_settings_ is in scope whenever a macro | |
| // is used. | |
| // | |
| // Note that it's typically necessary to also specify --enable-logging=stderr to | |
| // see this logging output on Linux or macOS. | |
| // | |
| // Example usage: | |
| // | |
| // class Foo { | |
| // public: | |
| // Foo() { | |
| // GPU_CLIENT_LOG("[" << LogPrefix() << "] Hello world"); | |
| // GPU_CLIENT_LOG_CODE_BLOCK({ | |
| // for (int i = 0; i < 10; ++i) { | |
| // GPU_CLIENT_LOG_CODE_BLOCK("Hello again"); | |
| // } | |
| // }); | |
| // } | |
| // | |
| // std::string LogPrefix() { return "Foo"; } | |
| // | |
| // private: | |
| // LogSettings log_settings_; | |
| // }; | |
| #if (DCHECK_IS_ON() || defined(GPU_ENABLE_CLIENT_LOGGING)) && \ | |
| !defined(GLES2_INLINE_OPTIMIZATION) | |
| #define GPU_CLIENT_DEBUG | |
| #endif | |
| #if defined(GPU_CLIENT_DEBUG) | |
| #define GPU_CLIENT_LOG(args) LOG_IF(INFO, log_settings_.enabled()) << args; | |
| #define GPU_CLIENT_LOG_CODE_BLOCK(code) code | |
| #define GPU_CLIENT_DCHECK_CODE_BLOCK(code) code | |
| #else // !defined(GPU_CLIENT_DEBUG) | |
| #define GPU_CLIENT_LOG(args) | |
| #define GPU_CLIENT_LOG_CODE_BLOCK(code) | |
| #define GPU_CLIENT_DCHECK_CODE_BLOCK(code) | |
| #endif // defined(GPU_CLIENT_DEBUG) | |
| namespace gpu { | |
| // Caches whether --enable-gpu-client-logging is set. | |
| class GLES2_IMPL_EXPORT LogSettings { | |
| public: | |
| LogSettings(); | |
| LogSettings(const LogSettings&) = delete; | |
| LogSettings& operator=(const LogSettings&) = delete; | |
| ~LogSettings(); | |
| bool enabled() { return enabled_; } | |
| private: | |
| bool enabled_; | |
| }; | |
| } // namespace gpu | |
| #endif // GPU_COMMAND_BUFFER_CLIENT_LOGGING_H_ |