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 a87b9df01ef..e7cf345f75e 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 95cac186733..87308fb4d32 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 86323b268fb..3010e4c4806 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);