From af76cd92df8eface69034b305e63c0d837a7eabe Mon Sep 17 00:00:00 2001 From: Chinmay Garde Date: Tue, 31 May 2022 17:27:40 -0700 Subject: [PATCH] [Impeller] Control GL error checking and tracing via GN options. Now that https://github.com/flutter/flutter/issues/104712 is complete, it no longer makes sense to perform an error check after every single OpenGL call. Only restrict to debug modes but allow configuration based on GN args. Also allow tracing all OpenGL calls. --- impeller/BUILD.gn | 8 ++++++++ impeller/renderer/backend/gles/proc_table_gles.h | 6 ++++++ impeller/tools/impeller.gni | 7 +++++++ 3 files changed, 21 insertions(+) diff --git a/impeller/BUILD.gn b/impeller/BUILD.gn index 9ef06cbad73eb..9a3e23f8d859a 100644 --- a/impeller/BUILD.gn +++ b/impeller/BUILD.gn @@ -25,6 +25,14 @@ config("impeller_public_config") { defines += [ "IMPELLER_ENABLE_OPENGLES=1" ] } + if (impeller_trace_all_gl_calls) { + defines += [ "IMPELLER_TRACE_ALL_GL_CALLS" ] + } + + if (impeller_error_check_all_gl_calls) { + defines += [ "IMPELLER_ERROR_CHECK_ALL_GL_CALLS" ] + } + if (is_win) { defines += [ "_USE_MATH_DEFINES", diff --git a/impeller/renderer/backend/gles/proc_table_gles.h b/impeller/renderer/backend/gles/proc_table_gles.h index ef4e7c5d55be1..222dd7d2f1f80 100644 --- a/impeller/renderer/backend/gles/proc_table_gles.h +++ b/impeller/renderer/backend/gles/proc_table_gles.h @@ -11,6 +11,7 @@ #include "flutter/fml/logging.h" #include "flutter/fml/macros.h" #include "flutter/fml/mapping.h" +#include "flutter/fml/trace_event.h" #include "impeller/renderer/backend/gles/capabilities_gles.h" #include "impeller/renderer/backend/gles/description_gles.h" #include "impeller/renderer/backend/gles/gles.h" @@ -64,7 +65,12 @@ struct GLProc { /// template auto operator()(Args&&... args) const { +#ifdef IMPELLER_ERROR_CHECK_ALL_GL_CALLS AutoErrorCheck error(error_fn, name); +#endif // IMPELLER_ERROR_CHECK_ALL_GL_CALLS +#ifdef IMPELLER_TRACE_ALL_GL_CALLS + TRACE_EVENT0("impeller", name); +#endif // IMPELLER_TRACE_ALL_GL_CALLS return function(std::forward(args)...); } diff --git a/impeller/tools/impeller.gni b/impeller/tools/impeller.gni index 90b994a6acf91..5e293ba840915 100644 --- a/impeller/tools/impeller.gni +++ b/impeller/tools/impeller.gni @@ -23,6 +23,13 @@ declare_args() { # If this is the empty string, impellerc will be built. # If it is non-empty, it should be the absolute path to impellerc. impeller_use_prebuilt_impellerc = "" + + # If enabled, all OpenGL calls will be traced. Because additional trace + # overhead may be substantial, this is not enabled by default. + impeller_trace_all_gl_calls = false + + # Call glGetError after each OpenGL call and log failures. + impeller_error_check_all_gl_calls = is_debug } declare_args() {