From 5efbd2e648d2a2c614c495d28325761d62cc5750 Mon Sep 17 00:00:00 2001 From: Jonah Williams Date: Tue, 25 Mar 2025 17:08:40 -0700 Subject: [PATCH] [Impeller] disable GLES tracing unless opted in. (#165887) GLES tracing may add substantial overhead on some devices. Since this is only useful when using frame capture tools, and its unlikely anyone that isn't an engine developer (or who knows how to compile the engine) will use them - we can turn off with a define. If there are other usecases we need to cover later this can be made to use the new flag system. --- .../renderer/backend/gles/proc_table_gles.cc | 2 +- .../renderer/backend/gles/proc_table_gles.h | 3 +++ .../backend/gles/test/reactor_unittests.cc | 15 ++++++++------- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.cc b/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.cc index a87b9df01e..e7cf345f75 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.cc +++ b/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.cc @@ -129,7 +129,7 @@ ProcTableGLES::ProcTableGLES( // NOLINT(google-readability-function-size) #undef IMPELLER_PROC - if (!description_->HasDebugExtension()) { + if (!IP_ENABLE_GLES_LABELING || !description_->HasDebugExtension()) { PushDebugGroupKHR.Reset(); PopDebugGroupKHR.Reset(); ObjectLabelKHR.Reset(); diff --git a/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h b/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h index 95cac18673..87308fb4d3 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h +++ b/engine/src/flutter/impeller/renderer/backend/gles/proc_table_gles.h @@ -14,6 +14,9 @@ #include "impeller/renderer/backend/gles/description_gles.h" #include "impeller/renderer/backend/gles/gles.h" +/// Enable to allow GLES to push/pop labels for usage in GPU traces +#define IP_ENABLE_GLES_LABELING false + namespace impeller { const char* GLErrorToString(GLenum value); diff --git a/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc b/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc index 86323b268f..3010e4c480 100644 --- a/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc +++ b/engine/src/flutter/impeller/renderer/backend/gles/test/reactor_unittests.cc @@ -98,13 +98,7 @@ TEST(ReactorGLES, UntrackedHandle) { TEST(ReactorGLES, NameUntrackedHandle) { auto mock_gles_impl = std::make_unique>(); - - EXPECT_CALL(*mock_gles_impl, GenTextures(1, _)) - .WillOnce([](GLsizei size, GLuint* queries) { queries[0] = 1234; }); - EXPECT_CALL(*mock_gles_impl, - ObjectLabelKHR(_, 1234, _, ::testing::StrEq("hello, joe!"))) - .Times(1); - ON_CALL(*mock_gles_impl, IsTexture).WillByDefault(::testing::Return(GL_TRUE)); + NiceMock* raw_mock_gles = mock_gles_impl.get(); std::shared_ptr mock_gles = MockGLES::Init(std::move(mock_gles_impl)); @@ -115,6 +109,13 @@ TEST(ReactorGLES, NameUntrackedHandle) { GTEST_SKIP() << "This device doesn't support labelling."; } + EXPECT_CALL(*raw_mock_gles, GenTextures(1, _)) + .WillOnce([](GLsizei size, GLuint* queries) { queries[0] = 1234; }); + EXPECT_CALL(*raw_mock_gles, + ObjectLabelKHR(_, 1234, _, ::testing::StrEq("hello, joe!"))) + .Times(1); + ON_CALL(*raw_mock_gles, IsTexture).WillByDefault(::testing::Return(GL_TRUE)); + auto worker = std::make_shared(); auto reactor = std::make_shared(std::move(proc_table)); reactor->AddWorker(worker);