From 858070b4f3d9a3b64ea4b399a85143a112b0e413 Mon Sep 17 00:00:00 2001 From: Mitchell Hwang Date: Fri, 1 Aug 2025 22:27:17 +0000 Subject: [PATCH] [EventPipe][User_Events] Add Provider name to metadata --- src/native/eventpipe/ep-session.c | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/src/native/eventpipe/ep-session.c b/src/native/eventpipe/ep-session.c index f3c41504719393..ca38e701c74794 100644 --- a/src/native/eventpipe/ep-session.c +++ b/src/native/eventpipe/ep-session.c @@ -765,7 +765,7 @@ session_tracepoint_write_event ( return false; // Setup iovec array - const int max_non_parameter_iov = 8; + const int max_non_parameter_iov = 9; const int max_static_io_capacity = 30; // Should account for most events that use EventData structs struct iovec static_io[max_static_io_capacity]; struct iovec *io = static_io; @@ -824,21 +824,33 @@ session_tracepoint_write_event ( uint64_t session_mask = ep_session_get_mask (session); bool should_write_metadata = !ep_event_was_metadata_written (ep_event, session_mask); if (should_write_metadata) { + EventPipeProvider *event_provider = ep_event_get_provider (ep_event); + const ep_char16_t *provider_name_utf16 = ep_provider_get_provider_name_utf16 (event_provider); + uint32_t provider_name_len = (uint32_t)ep_rt_utf16_string_len (provider_name_utf16); + uint32_t provider_name_size_bytes = (provider_name_len + 1) * sizeof (ep_char16_t); + uint32_t event_metadata_len = ep_event_get_metadata_len (ep_event); + uint32_t complete_metadata_len = provider_name_size_bytes + event_metadata_len; + uint8_t extension_metadata[1 + sizeof(uint32_t)]; - uint32_t metadata_len = ep_event_get_metadata_len (ep_event); extension_metadata[0] = 0x01; // label - *(uint32_t*)&extension_metadata[1] = metadata_len; + *(uint32_t*)&extension_metadata[1] = complete_metadata_len; io[io_index].iov_base = extension_metadata; io[io_index].iov_len = sizeof(extension_metadata); io_index++; extension_len += sizeof(extension_metadata); io_bytes_to_write += sizeof(extension_metadata); + io[io_index].iov_base = (void *)provider_name_utf16; + io[io_index].iov_len = provider_name_size_bytes; + io_index++; + extension_len += provider_name_size_bytes; + io_bytes_to_write += provider_name_size_bytes; + io[io_index].iov_base = (void *)ep_event_get_metadata (ep_event); - io[io_index].iov_len = metadata_len; + io[io_index].iov_len = event_metadata_len; io_index++; - extension_len += metadata_len; - io_bytes_to_write += metadata_len; + extension_len += event_metadata_len; + io_bytes_to_write += event_metadata_len; } // Extension Activity IDs