From 45140ac90ca79729087fdea61e774aa8b1589d1f Mon Sep 17 00:00:00 2001 From: Jason Simmons Date: Wed, 31 Jan 2024 19:28:57 -0800 Subject: [PATCH] [Impeller] Clear the GPUTracerVK in_frame flag when ending a frame even if the tracer is disabled Without this an assertion in GPUTracerVK::MarkFrameStart will fail on the next frame. --- .../renderer/backend/vulkan/gpu_tracer_vk.cc | 3 ++- .../backend/vulkan/test/gpu_tracer_unittests.cc | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/impeller/renderer/backend/vulkan/gpu_tracer_vk.cc b/impeller/renderer/backend/vulkan/gpu_tracer_vk.cc index ea26279a206e8..a710d74a9e591 100644 --- a/impeller/renderer/backend/vulkan/gpu_tracer_vk.cc +++ b/impeller/renderer/backend/vulkan/gpu_tracer_vk.cc @@ -82,6 +82,8 @@ void GPUTracerVK::MarkFrameStart() { } void GPUTracerVK::MarkFrameEnd() { + in_frame_ = false; + if (!enabled_) { return; } @@ -98,7 +100,6 @@ void GPUTracerVK::MarkFrameEnd() { FML_DCHECK(state.pending_buffers == 0u); state.pending_buffers = 0; state.current_index = 0; - in_frame_ = false; } std::unique_ptr GPUTracerVK::CreateGPUProbe() { diff --git a/impeller/renderer/backend/vulkan/test/gpu_tracer_unittests.cc b/impeller/renderer/backend/vulkan/test/gpu_tracer_unittests.cc index 896ff3c421cd9..8f8e195d1a670 100644 --- a/impeller/renderer/backend/vulkan/test/gpu_tracer_unittests.cc +++ b/impeller/renderer/backend/vulkan/test/gpu_tracer_unittests.cc @@ -27,6 +27,22 @@ TEST(GPUTracerVK, CanBeDisabled) { ASSERT_FALSE(tracer->IsEnabled()); } +TEST(GPUTracerVK, DisabledFrameCycle) { + auto const context = + MockVulkanContextBuilder() + .SetSettingsCallback([](ContextVK::Settings& settings) { + settings.enable_gpu_tracing = false; + }) + .Build(); + auto tracer = context->GetGPUTracer(); + + // Check that a repeated frame start/end cycle does not fail any assertions. + for (int i = 0; i < 2; i++) { + tracer->MarkFrameStart(); + tracer->MarkFrameEnd(); + } +} + TEST(GPUTracerVK, CanTraceCmdBuffer) { auto const context = MockVulkanContextBuilder()