From: Chia-I Wu Date: Thu, 7 Oct 2021 22:12:58 +0000 (-0700) Subject: venus: add atrace support X-Git-Tag: upstream/22.3.5~16807 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6df3973b61973dd320756d0cb1d3141e1be1e815;p=platform%2Fupstream%2Fmesa.git venus: add atrace support Signed-off-by: Chia-I Wu Reviewed-by: Yiwei Zhang Reviewed-by: Ryan Neph Part-of: --- diff --git a/src/virtio/vulkan/vn_common.c b/src/virtio/vulkan/vn_common.c index e728a79..809a8fd 100644 --- a/src/virtio/vulkan/vn_common.c +++ b/src/virtio/vulkan/vn_common.c @@ -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; diff --git a/src/virtio/vulkan/vn_common.h b/src/virtio/vulkan/vn_common.h index e5232f4..5781da2 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 + +#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); diff --git a/src/virtio/vulkan/vn_icd.c b/src/virtio/vulkan/vn_icd.c index a478425..68db22c 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 bdb2730..744ca62 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);