From febfd880a770cac83f9ec19e3bcb9df159b860b1 Mon Sep 17 00:00:00 2001 From: David Mason Date: Thu, 8 Sep 2022 01:15:29 -0700 Subject: [PATCH 1/3] Update ep-provider.c --- src/native/eventpipe/ep-provider.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/native/eventpipe/ep-provider.c b/src/native/eventpipe/ep-provider.c index c8640433478fb4..25dd0c886168d7 100644 --- a/src/native/eventpipe/ep-provider.c +++ b/src/native/eventpipe/ep-provider.c @@ -145,11 +145,13 @@ provider_compute_event_enable_mask ( if (session_provider) { int64_t session_keyword = ep_session_provider_get_keywords (session_provider); EventPipeEventLevel session_level = ep_session_provider_get_logging_level (session_provider); + // EventSources always set 0xF00000000000 to signify no keywords + int64_t session_mask = ~0xF00000000000; // The event is enabled if: // - The provider is enabled. // - The event keywords are unspecified in the manifest (== 0) or when masked with the enabled config are != 0. // - The event level is LogAlways or the provider's verbosity level is set to greater than the event's verbosity level in the manifest. - bool keyword_enabled = (keywords == 0) || ((session_keyword & keywords) != 0); + bool keyword_enabled = ((keywords & session_mask) == 0) || ((session_keyword & keywords) != 0); bool level_enabled = ((event_level == EP_EVENT_LEVEL_LOGALWAYS) || (session_level >= event_level)); if (provider_enabled && keyword_enabled && level_enabled) result = result | ep_session_get_mask (session); From 480eee97ce4763a66376d1910eca18c51d21175f Mon Sep 17 00:00:00 2001 From: David Mason Date: Tue, 20 Sep 2022 15:44:24 -0700 Subject: [PATCH 2/3] Code review feedback --- src/native/eventpipe/ep-provider.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/native/eventpipe/ep-provider.c b/src/native/eventpipe/ep-provider.c index 25dd0c886168d7..4d503befbfff3d 100644 --- a/src/native/eventpipe/ep-provider.c +++ b/src/native/eventpipe/ep-provider.c @@ -145,13 +145,11 @@ provider_compute_event_enable_mask ( if (session_provider) { int64_t session_keyword = ep_session_provider_get_keywords (session_provider); EventPipeEventLevel session_level = ep_session_provider_get_logging_level (session_provider); - // EventSources always set 0xF00000000000 to signify no keywords - int64_t session_mask = ~0xF00000000000; // The event is enabled if: // - The provider is enabled. // - The event keywords are unspecified in the manifest (== 0) or when masked with the enabled config are != 0. // - The event level is LogAlways or the provider's verbosity level is set to greater than the event's verbosity level in the manifest. - bool keyword_enabled = ((keywords & session_mask) == 0) || ((session_keyword & keywords) != 0); + bool keyword_enabled = (keywords == 0) || ((session_keyword & keywords) != 0); bool level_enabled = ((event_level == EP_EVENT_LEVEL_LOGALWAYS) || (session_level >= event_level)); if (provider_enabled && keyword_enabled && level_enabled) result = result | ep_session_get_mask (session); @@ -247,6 +245,12 @@ ep_provider_add_event ( ep_requires_lock_not_held (); + // Keyword bits 44-47 are reserved for use by EventSources, and every EventSource sets them all. + // We filter out those bits here so later comparisons don't have to take them in to account. Without + // filtering, EventSources wouldn't show up with Keywords=0. + int64_t session_mask = ~0xF00000000000; + keywords &= session_mask; + EventPipeEvent *instance = ep_event_alloc ( provider, keywords, From d0a91c524c5dbfec2a0e7ae2a6af7fc8c49045b4 Mon Sep 17 00:00:00 2001 From: David Mason Date: Fri, 30 Sep 2022 04:19:40 -0700 Subject: [PATCH 3/3] Don't change -1 as a keyword --- src/native/eventpipe/ep-provider.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/native/eventpipe/ep-provider.c b/src/native/eventpipe/ep-provider.c index 4d503befbfff3d..31c838ddec5e33 100644 --- a/src/native/eventpipe/ep-provider.c +++ b/src/native/eventpipe/ep-provider.c @@ -248,8 +248,12 @@ ep_provider_add_event ( // Keyword bits 44-47 are reserved for use by EventSources, and every EventSource sets them all. // We filter out those bits here so later comparisons don't have to take them in to account. Without // filtering, EventSources wouldn't show up with Keywords=0. - int64_t session_mask = ~0xF00000000000; - keywords &= session_mask; + uint64_t session_mask = ~0xF00000000000; + // -1 is special, it means all keywords. Don't change it. + uint64_t all_keywords = (uint64_t)(-1); + if (keywords != all_keywords) { + keywords &= session_mask; + } EventPipeEvent *instance = ep_event_alloc ( provider,