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() {