Mesa (main): venus: add atrace support

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Sat Oct 9 03:15:09 UTC 2021


Module: Mesa
Branch: main
Commit: 6df3973b61973dd320756d0cb1d3141e1be1e815
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=6df3973b61973dd320756d0cb1d3141e1be1e815

Author: Chia-I Wu <olvaffe at gmail.com>
Date:   Thu Oct  7 15:12:58 2021 -0700

venus: add atrace support

Signed-off-by: Chia-I Wu <olvaffe at gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei at chromium.org>
Reviewed-by: Ryan Neph <ryanneph at google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13255>

---

 src/virtio/vulkan/vn_common.c   |  8 +++++++
 src/virtio/vulkan/vn_common.h   | 46 +++++++++++++++++++++++++++++++++++++++++
 src/virtio/vulkan/vn_icd.c      |  1 +
 src/virtio/vulkan/vn_instance.c |  1 +
 4 files changed, 56 insertions(+)

diff --git a/src/virtio/vulkan/vn_common.c b/src/virtio/vulkan/vn_common.c
index e728a7971d2..809a8fd82ae 100644
--- a/src/virtio/vulkan/vn_common.c
+++ b/src/virtio/vulkan/vn_common.c
@@ -40,6 +40,14 @@ vn_debug_init(void)
    call_once(&once, vn_debug_init_once);
 }
 
+void
+vn_trace_init(void)
+{
+#ifdef ANDROID
+   atrace_init();
+#endif
+}
+
 void
 vn_log(struct vn_instance *instance, const char *format, ...)
 {
diff --git a/src/virtio/vulkan/vn_common.h b/src/virtio/vulkan/vn_common.h
index e5232f45ed5..5781da2d168 100644
--- a/src/virtio/vulkan/vn_common.h
+++ b/src/virtio/vulkan/vn_common.h
@@ -49,6 +49,49 @@
 #define vn_result(instance, result)                                          \
    ((result) >= VK_SUCCESS ? (result) : vn_error((instance), (result)))
 
+#ifdef ANDROID
+
+#include <cutils/trace.h>
+
+#define VN_TRACE_BEGIN(name) atrace_begin(ATRACE_TAG_GRAPHICS, name)
+#define VN_TRACE_END() atrace_end(ATRACE_TAG_GRAPHICS)
+
+#else
+
+/* XXX we would like to use perfetto, but it lacks a C header */
+#define VN_TRACE_BEGIN(name)
+#define VN_TRACE_END()
+
+#endif /* ANDROID */
+
+#if __has_attribute(cleanup) && __has_attribute(unused)
+
+#define VN_TRACE_SCOPE(name)                                                 \
+   int _vn_trace_scope_##__LINE__                                            \
+      __attribute__((cleanup(vn_trace_scope_end), unused)) =                 \
+         vn_trace_scope_begin(name)
+
+static inline int
+vn_trace_scope_begin(const char *name)
+{
+   VN_TRACE_BEGIN(name);
+   return 0;
+}
+
+static inline void
+vn_trace_scope_end(int *scope)
+{
+   VN_TRACE_END();
+}
+
+#else
+
+#define VN_TRACE_SCOPE(name)
+
+#endif /* __has_attribute(cleanup) && __has_attribute(unused) */
+
+#define VN_TRACE_FUNC() VN_TRACE_SCOPE(__func__)
+
 struct vn_instance;
 struct vn_physical_device;
 struct vn_device;
@@ -127,6 +170,9 @@ extern uint64_t vn_debug;
 void
 vn_debug_init(void);
 
+void
+vn_trace_init(void);
+
 void
 vn_log(struct vn_instance *instance, const char *format, ...)
    PRINTFLIKE(2, 3);
diff --git a/src/virtio/vulkan/vn_icd.c b/src/virtio/vulkan/vn_icd.c
index a4784250d3e..68db22cdd56 100644
--- a/src/virtio/vulkan/vn_icd.c
+++ b/src/virtio/vulkan/vn_icd.c
@@ -19,6 +19,7 @@ VkResult
 vk_icdNegotiateLoaderICDInterfaceVersion(uint32_t *pSupportedVersion)
 {
    vn_debug_init();
+   vn_trace_init();
 
    vn_icd_version = MIN2(vn_icd_version, *pSupportedVersion);
    if (VN_DEBUG(INIT))
diff --git a/src/virtio/vulkan/vn_instance.c b/src/virtio/vulkan/vn_instance.c
index bdb2730e095..744ca62aabb 100644
--- a/src/virtio/vulkan/vn_instance.c
+++ b/src/virtio/vulkan/vn_instance.c
@@ -697,6 +697,7 @@ vn_CreateInstance(const VkInstanceCreateInfo *pCreateInfo,
    VkResult result;
 
    vn_debug_init();
+   vn_trace_init();
 
    instance = vk_zalloc(alloc, sizeof(*instance), VN_DEFAULT_ALIGN,
                         VK_SYSTEM_ALLOCATION_SCOPE_INSTANCE);



More information about the mesa-commit mailing list