8#include "gtest/gtest.h"
17TEST(GPUTracerVK, CanBeDisabled) {
19 MockVulkanContextBuilder()
20 .SetSettingsCallback([](ContextVK::Settings& settings) {
21 settings.enable_gpu_tracing =
false;
24 auto tracer = context->GetGPUTracer();
26 ASSERT_FALSE(tracer->IsEnabled());
29TEST(GPUTracerVK, DisabledFrameCycle) {
31 MockVulkanContextBuilder()
32 .SetSettingsCallback([](ContextVK::Settings& settings) {
33 settings.enable_gpu_tracing =
false;
36 auto tracer = context->GetGPUTracer();
39 for (
int i = 0;
i < 2;
i++) {
40 tracer->MarkFrameStart();
41 tracer->MarkFrameEnd();
45TEST(GPUTracerVK, CanTraceCmdBuffer) {
47 MockVulkanContextBuilder()
48 .SetSettingsCallback([](ContextVK::Settings& settings) {
49 settings.enable_gpu_tracing =
true;
52 auto tracer = context->GetGPUTracer();
54 ASSERT_TRUE(tracer->IsEnabled());
55 tracer->MarkFrameStart();
57 auto cmd_buffer = context->CreateCommandBuffer();
58 auto blit_pass = cmd_buffer->CreateBlitPass();
59 blit_pass->EncodeCommands();
61 auto latch = std::make_shared<fml::CountDownLatch>(1u);
63 if (!context->GetCommandQueue()
68 GTEST_FAIL() <<
"Failed to submit cmd buffer";
71 tracer->MarkFrameEnd();
75 ASSERT_NE(called,
nullptr);
76 ASSERT_TRUE(std::find(called->begin(), called->end(),
"vkCreateQueryPool") !=
78 ASSERT_TRUE(std::find(called->begin(), called->end(),
79 "vkGetQueryPoolResults") != called->end());
82TEST(GPUTracerVK, DoesNotTraceOutsideOfFrameWorkload) {
84 MockVulkanContextBuilder()
85 .SetSettingsCallback([](ContextVK::Settings& settings) {
86 settings.enable_gpu_tracing =
true;
89 auto tracer = context->GetGPUTracer();
91 ASSERT_TRUE(tracer->IsEnabled());
93 auto cmd_buffer = context->CreateCommandBuffer();
94 auto blit_pass = cmd_buffer->CreateBlitPass();
95 blit_pass->EncodeCommands();
97 auto latch = std::make_shared<fml::CountDownLatch>(1u);
98 if (!context->GetCommandQueue()
103 GTEST_FAIL() <<
"Failed to submit cmd buffer";
110 ASSERT_NE(called,
nullptr);
111 ASSERT_TRUE(std::find(called->begin(), called->end(),
112 "vkGetQueryPoolResults") == called->end());
117TEST(GPUTracerVK, TracesWithPartialFrameOverlap) {
119 MockVulkanContextBuilder()
120 .SetSettingsCallback([](ContextVK::Settings& settings) {
121 settings.enable_gpu_tracing =
true;
124 auto tracer = context->GetGPUTracer();
126 ASSERT_TRUE(tracer->IsEnabled());
127 tracer->MarkFrameStart();
129 auto cmd_buffer = context->CreateCommandBuffer();
130 auto blit_pass = cmd_buffer->CreateBlitPass();
131 blit_pass->EncodeCommands();
133 auto latch = std::make_shared<fml::CountDownLatch>(1u);
134 if (!context->GetCommandQueue()
139 GTEST_FAIL() <<
"Failed to submit cmd buffer";
141 tracer->MarkFrameEnd();
146 ASSERT_NE(called,
nullptr);
147 ASSERT_TRUE(std::find(called->begin(), called->end(),
"vkCreateQueryPool") !=
149 ASSERT_TRUE(std::find(called->begin(), called->end(),
150 "vkGetQueryPoolResults") != called->end());
TEST(FrameTimingsRecorderTest, RecordVsync)
std::shared_ptr< std::vector< std::string > > GetMockVulkanFunctions(VkDevice device)