| // Copyright 2018 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. |
| |
| #ifndef GPU_COMMAND_BUFFER_CLIENT_LOGGING_H_ |
| #define GPU_COMMAND_BUFFER_CLIENT_LOGGING_H_ |
| |
| #include "base/logging.h" |
| #include "base/macros.h" |
| #include "gpu/command_buffer/client/gles2_impl_export.h" |
| |
| // Macros to log information if DCHECK_IS_ON() and --enable-gpu-client-logging |
| // flag is set. Code is optimized out if DCHECK is disabled. Requires that a |
| // LogSettings named log_settings_ is in scope whenever a macro is used. |
| // |
| // 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(__native_client__) && \ |
| !defined(GLES2_CONFORMANCE_TESTS) && !defined(GLES2_INLINE_OPTIMIZATION) |
| #define GPU_CLIENT_DEBUG |
| #endif |
| |
| #if defined(GPU_CLIENT_DEBUG) |
| #define GPU_CLIENT_LOG(args) DLOG_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(); |
| |
| bool enabled() { return enabled_; } |
| |
| private: |
| bool enabled_; |
| |
| DISALLOW_COPY_AND_ASSIGN(LogSettings); |
| }; |
| |
| } // namespace gpu |
| |
| #endif // GPU_COMMAND_BUFFER_CLIENT_LOGGING_H_ |