[gtk+] vulkan: Measure gpu time



commit 535529ca98954fed250d20a9b0742df74833ecc7
Author: Matthias Clasen <mclasen redhat com>
Date:   Thu Sep 28 10:27:58 2017 -0400

    vulkan: Measure gpu time
    
    Since this value is only meaningful if we wait for the rendering
    to end, we only keep this timer if GSK_RENDERING_MODE=sync is
    enabled.

 gsk/gskvulkanrender.c   |   14 ++++++++++++++
 gsk/gskvulkanrenderer.c |    2 ++
 2 files changed, 16 insertions(+), 0 deletions(-)
---
diff --git a/gsk/gskvulkanrender.c b/gsk/gskvulkanrender.c
index cddc331..ee0b59f 100644
--- a/gsk/gskvulkanrender.c
+++ b/gsk/gskvulkanrender.c
@@ -56,6 +56,7 @@ struct _GskVulkanRender
   GSList *cleanup_images;
 
   GQuark render_pass_counter;
+  GQuark gpu_time_timer;
 };
 
 static void
@@ -208,6 +209,7 @@ gsk_vulkan_render_new (GskRenderer      *renderer,
 
 #ifdef G_ENABLE_DEBUG
   self->render_pass_counter = g_quark_from_static_string ("render-passes");
+  self->gpu_time_timer = g_quark_from_static_string ("gpu-time");
 #endif
 
   return self;
@@ -537,6 +539,11 @@ gsk_vulkan_render_draw (GskVulkanRender   *self,
 {
   GList *l;
 
+#ifdef G_ENABLE_DEBUG
+  if (GSK_RENDER_MODE_CHECK (SYNC))
+    gsk_profiler_timer_begin (gsk_renderer_get_profiler (self->renderer), self->gpu_time_timer);
+#endif
+
   gsk_vulkan_render_prepare_descriptor_sets (self, sampler);
 
   for (l = self->render_passes; l; l = l->next)
@@ -566,11 +573,18 @@ gsk_vulkan_render_draw (GskVulkanRender   *self,
 
   if (GSK_RENDER_MODE_CHECK (SYNC))
     {
+      GskProfiler *profiler;
+      gint64 gpu_time;
+
       GSK_VK_CHECK (vkWaitForFences, gdk_vulkan_context_get_device (self->vulkan),
                                      1,
                                      &self->fence,
                                      VK_TRUE,
                                      INT64_MAX);
+
+      profiler = gsk_renderer_get_profiler (self->renderer);
+      gpu_time = gsk_profiler_timer_end (profiler, self->gpu_time_timer);
+      gsk_profiler_timer_set (profiler, self->gpu_time_timer, gpu_time);
     }
 }
 
diff --git a/gsk/gskvulkanrenderer.c b/gsk/gskvulkanrenderer.c
index 7a422dc..20c204f 100644
--- a/gsk/gskvulkanrenderer.c
+++ b/gsk/gskvulkanrenderer.c
@@ -314,6 +314,8 @@ gsk_vulkan_renderer_init (GskVulkanRenderer *self)
   self->profile_counters.fallback_pixels = gsk_profiler_add_counter (profiler, "fallback-pixels", "Fallback 
pixels", TRUE);
 
   self->profile_timers.cpu_time = gsk_profiler_add_timer (profiler, "cpu-time", "CPU time", FALSE, TRUE);
+  if (GSK_RENDER_MODE_CHECK (SYNC))
+    self->profile_timers.gpu_time = gsk_profiler_add_timer (profiler, "gpu-time", "GPU time", FALSE, TRUE);
 #endif
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]