venus: add atrace support
authorChia-I Wu <olvaffe@gmail.com>
Thu, 7 Oct 2021 22:12:58 +0000 (15:12 -0700)
committerMarge Bot <eric+marge@anholt.net>
Sat, 9 Oct 2021 00:42:32 +0000 (00:42 +0000)
Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
Reviewed-by: Yiwei Zhang <zzyiwei@chromium.org>
Reviewed-by: Ryan Neph <ryanneph@google.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13255>

src/virtio/vulkan/vn_common.c
src/virtio/vulkan/vn_common.h
src/virtio/vulkan/vn_icd.c
src/virtio/vulkan/vn_instance.c

index e728a79..809a8fd 100644 (file)
@@ -41,6 +41,14 @@ vn_debug_init(void)
 }
 
 void
+vn_trace_init(void)
+{
+#ifdef ANDROID
+   atrace_init();
+#endif
+}
+
+void
 vn_log(struct vn_instance *instance, const char *format, ...)
 {
    va_list ap;
index e5232f4..5781da2 100644 (file)
 #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;
@@ -128,6 +171,9 @@ void
 vn_debug_init(void);
 
 void
+vn_trace_init(void);
+
+void
 vn_log(struct vn_instance *instance, const char *format, ...)
    PRINTFLIKE(2, 3);
 
index a478425..68db22c 100644 (file)
@@ -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))
index bdb2730..744ca62 100644 (file)
@@ -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);