// Copyright 2019 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 UI_GL_GL_IMPLEMENTATION_WRAPPER_H_ #define UI_GL_GL_IMPLEMENTATION_WRAPPER_H_ #include #include "base/command_line.h" #include "ui/gl/gl_switches.h" #define GL_IMPL_WRAPPER_TYPE(name) \ GLImplementationWrapper namespace gl { // Wraps a GLApi with its tracing and logging variants when the corresponding // command line flags are passed. template class GLImplementationWrapper { public: GLImplementationWrapper(std::unique_ptr real_gl) : real_gl_(std::move(real_gl)) { gl_api_ = real_gl_.get(); static bool enable_tracing = base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableGPUServiceTracing); if (enable_tracing) { trace_gl_ = std::make_unique(gl_api_); gl_api_ = trace_gl_.get(); } static bool enable_logging = base::CommandLine::ForCurrentProcess()->HasSwitch( switches::kEnableGPUServiceLogging); if (enable_logging) { log_gl_ = std::make_unique(gl_api_); gl_api_ = log_gl_.get(); } } ~GLImplementationWrapper() = default; GLImplApi* api() { return gl_api_; } private: std::unique_ptr real_gl_; std::unique_ptr trace_gl_; std::unique_ptr log_gl_; GLImplApi* gl_api_ = nullptr; DISALLOW_COPY_AND_ASSIGN(GLImplementationWrapper); }; } // namespace gl #endif // UI_GL_GL_IMPLEMENTATION_WRAPPER_H_