Skip to content

Commit ea63205

Browse files
authored
Fix eventpipe filtering (dotnet/coreclr#25221)
* Add DOTNET_TRACE_CONTEXT and change macros to use DOTNET_TRACE_CONTEXT instead of MCGEN_TRACE_CONTEXT * Fixing macro definitions * eventing codegen scripts now generates EventPipe trace contexts * Fix macros to use the EVENTPIPE_TRACE_Context * Fix linux build * Fix windows build * Update Eventpipe provider context at EtwCallbackComon * break in switch * Update rundown provider context manually * PR feedback * Eventpipe->EventPipe * cleanup in codegen script Commit migrated from dotnet/coreclr@9bd2787
1 parent 2d46586 commit ea63205

22 files changed

+359
-143
lines changed

src/coreclr/src/inc/eventtracebase.h

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -79,14 +79,14 @@ enum EtwThreadFlags
7979
// if the fields in the event are not cheap to calculate
8080
//
8181
#define ETW_EVENT_ENABLED(Context, EventDescriptor) \
82-
((MCGEN_ENABLE_CHECK(Context, EventDescriptor)) || EVENT_PIPE_ENABLED())
82+
((MCGEN_ENABLE_CHECK(Context.EtwProvider, EventDescriptor)) || EventPipeHelper::IsEnabled(Context, EventDescriptor.Level, EventDescriptor.Keyword))
8383

8484
//
8585
// Use this macro to check if a category of events is enabled
8686
//
8787

8888
#define ETW_CATEGORY_ENABLED(Context, Level, Keyword) \
89-
((Context.IsEnabled && McGenEventProviderEnabled(&Context, Level, Keyword)) || EVENT_PIPE_ENABLED())
89+
((Context.EtwProvider.IsEnabled && McGenEventProviderEnabled(&(Context.EtwProvider), Level, Keyword)) || EventPipeHelper::IsEnabled(Context, Level, Keyword))
9090

9191

9292
// This macro only checks if a provider is enabled
@@ -95,26 +95,29 @@ enum EtwThreadFlags
9595
((ProviderSymbol##_Context.IsEnabled) || EVENT_PIPE_ENABLED())
9696

9797

98-
#else //defined(FEATURE_PAL)
98+
#else //!defined(FEATURE_PAL)
9999
#if defined(FEATURE_PERFTRACING)
100100
#define ETW_INLINE
101101
#define ETWOnStartup(StartEventName, EndEventName)
102102
#define ETWFireEvent(EventName)
103103

104104
#define ETW_TRACING_INITIALIZED(RegHandle) (TRUE)
105-
#define ETW_EVENT_ENABLED(Context, EventDescriptor) (EventPipeHelper::Enabled() || XplatEventLogger::IsEventLoggingEnabled())
106-
#define ETW_CATEGORY_ENABLED(Context, Level, Keyword) (EventPipeHelper::Enabled() || XplatEventLogger::IsEventLoggingEnabled())
105+
#define ETW_EVENT_ENABLED(Context, EventDescriptor) (EventPipeHelper::IsEnabled(Context, EventDescriptor.Level, EventDescriptor.Keyword) || \
106+
(XplatEventLogger::IsEventLoggingEnabled()))
107+
#define ETW_CATEGORY_ENABLED(Context, Level, Keyword) (EventPipeHelper::IsEnabled(Context, Level, Keyword) || \
108+
(XplatEventLogger::IsEventLoggingEnabled())
107109
#define ETW_TRACING_ENABLED(Context, EventDescriptor) (EventEnabled##EventDescriptor())
108-
#define ETW_TRACING_CATEGORY_ENABLED(Context, Level, Keyword) (EventPipeHelper::Enabled() || XplatEventLogger::IsEventLoggingEnabled())
110+
#define ETW_TRACING_CATEGORY_ENABLED(Context, Level, Keyword) (EventPipeHelper::IsEnabled(Context, Level, Keyword) || \
111+
(XplatEventLogger::IsEventLoggingEnabled()))
109112
#define ETW_PROVIDER_ENABLED(ProviderSymbol) (TRUE)
110113
#else //defined(FEATURE_PERFTRACING)
111114
#define ETW_INLINE
112115
#define ETWOnStartup(StartEventName, EndEventName)
113116
#define ETWFireEvent(EventName)
114117

115118
#define ETW_TRACING_INITIALIZED(RegHandle) (TRUE)
116-
#define ETW_EVENT_ENABLED(Context, EventDescriptor) (XplatEventLogger::IsEventLoggingEnabled())
117119
#define ETW_CATEGORY_ENABLED(Context, Level, Keyword) (XplatEventLogger::IsEventLoggingEnabled())
120+
#define ETW_EVENT_ENABLED(Context, EventDescriptor) (XplatEventLogger::IsEventLoggingEnabled())
118121
#define ETW_TRACING_ENABLED(Context, EventDescriptor) (EventEnabled##EventDescriptor())
119122
#define ETW_TRACING_CATEGORY_ENABLED(Context, Level, Keyword) (XplatEventLogger::IsEventLoggingEnabled())
120123
#define ETW_PROVIDER_ENABLED(ProviderSymbol) (TRUE)
@@ -175,7 +178,8 @@ struct ProfilingScanContext;
175178
// Use this macro to check if ETW is initialized and the event is enabled
176179
//
177180
#define ETW_TRACING_ENABLED(Context, EventDescriptor) \
178-
((Context.IsEnabled && ETW_TRACING_INITIALIZED(Context.RegistrationHandle) && ETW_EVENT_ENABLED(Context, EventDescriptor)) || EVENT_PIPE_ENABLED())
181+
((Context.EtwProvider.IsEnabled && ETW_TRACING_INITIALIZED(Context.EtwProvider.RegistrationHandle) && ETW_EVENT_ENABLED(Context, EventDescriptor))|| \
182+
EventPipeHelper::IsEnabled(Context, EventDescriptor.Level, EventDescriptor.Keyword))
179183

180184
//
181185
// Using KEYWORDZERO means when checking the events category ignore the keyword
@@ -186,12 +190,12 @@ struct ProfilingScanContext;
186190
// Use this macro to check if ETW is initialized and the category is enabled
187191
//
188192
#define ETW_TRACING_CATEGORY_ENABLED(Context, Level, Keyword) \
189-
((ETW_TRACING_INITIALIZED(Context.RegistrationHandle) && ETW_CATEGORY_ENABLED(Context, Level, Keyword)) || EVENT_PIPE_ENABLED())
193+
(ETW_TRACING_INITIALIZED(Context.EtwProvider.RegistrationHandle) && ETW_CATEGORY_ENABLED(Context, Level, Keyword))
190194

191-
#define ETWOnStartup(StartEventName, EndEventName) \
192-
ETWTraceStartup trace##StartEventName##(Microsoft_Windows_DotNETRuntimePrivateHandle, &StartEventName, &StartupId, &EndEventName, &StartupId);
193-
#define ETWFireEvent(EventName) \
194-
ETWTraceStartup::StartupTraceEvent(Microsoft_Windows_DotNETRuntimePrivateHandle, &EventName, &StartupId);
195+
#define ETWOnStartup(StartEventName, EndEventName) \
196+
ETWTraceStartup trace##StartEventName##(Microsoft_Windows_DotNETRuntimePrivateHandle, &StartEventName, &StartupId, &EndEventName, &StartupId);
197+
#define ETWFireEvent(EventName) \
198+
ETWTraceStartup::StartupTraceEvent(Microsoft_Windows_DotNETRuntimePrivateHandle, &EventName, &StartupId);
195199

196200
#ifndef FEATURE_REDHAWK
197201
// Headers
@@ -217,14 +221,24 @@ struct ProfilingScanContext;
217221
extern UINT32 g_nClrInstanceId;
218222

219223
#define GetClrInstanceId() (static_cast<UINT16>(g_nClrInstanceId))
224+
#if defined(FEATURE_PAL) && (defined(FEATURE_EVENT_TRACE) || defined(FEATURE_EVENTSOURCE_XPLAT))
225+
#define KEYWORDZERO 0x0
226+
227+
/***************************************/
228+
/* Tracing levels supported by CLR ETW */
229+
/***************************************/
230+
#define MAX_TRACE_LEVEL 6 // Maximum Number of Trace Levels supported
231+
#define TRACE_LEVEL_FATAL 1 // Abnormal exit or termination
232+
#define TRACE_LEVEL_ERROR 2 // Severe errors that need logging
233+
#define TRACE_LEVEL_WARNING 3 // Warnings such as allocation failure
234+
#define TRACE_LEVEL_INFORMATION 4 // Includes non-error cases such as Entry-Exit
235+
#define TRACE_LEVEL_VERBOSE 5 // Detailed traces from intermediate steps
236+
237+
#define DEF_LTTNG_KEYWORD_ENABLED 1
238+
#include "clrproviders.h"
239+
#include "clrconfig.h"
240+
#endif // defined(FEATURE_PAL) && (defined(FEATURE_EVENT_TRACE) || defined(FEATURE_EVENTSOURCE_XPLAT))
220241

221-
#if defined(FEATURE_PERFTRACING)
222-
class EventPipeHelper
223-
{
224-
public:
225-
static bool Enabled();
226-
};
227-
#endif // defined(FEATURE_PERFTRACING)
228242

229243
#if defined(FEATURE_EVENT_TRACE) || defined(FEATURE_EVENTSOURCE_XPLAT)
230244

@@ -334,6 +348,14 @@ extern "C" {
334348
#endif //!FEATURE_PAL
335349

336350
#include "clretwallmain.h"
351+
#if defined(FEATURE_PERFTRACING)
352+
class EventPipeHelper
353+
{
354+
public:
355+
static bool Enabled();
356+
static bool IsEnabled(DOTNET_TRACE_CONTEXT Context, UCHAR Level, ULONGLONG Keyword);
357+
};
358+
#endif // defined(FEATURE_PERFTRACING)
337359

338360
#endif // FEATURE_EVENT_TRACE
339361

@@ -1043,7 +1065,7 @@ class ETWTraceStartup {
10431065
}
10441066
static void StartupTraceEvent(REGHANDLE _TraceHandle, PCEVENT_DESCRIPTOR _EventDescriptor, LPCGUID _EventGuid) {
10451067
EVENT_DESCRIPTOR desc = *_EventDescriptor;
1046-
if(ETW_TRACING_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context, desc))
1068+
if(ETW_TRACING_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_DOTNET_Context, desc))
10471069
{
10481070
CoMofTemplate_h(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context.RegistrationHandle, _EventDescriptor, _EventGuid, GetClrInstanceId());
10491071
}

src/coreclr/src/scripts/genEventing.py

Lines changed: 137 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -502,6 +502,30 @@ def generateEtmDummyHeader(sClrEtwAllMan,clretwdummy):
502502
#pal: create etmdummy.h
503503
Clretwdummy.write(generateclrEtwDummy(eventNodes, allTemplates) + "\n")
504504

505+
def convertToLevelId(level):
506+
if level == "win:LogAlways":
507+
return 0
508+
if level == "win:Critical":
509+
return 1
510+
if level == "win:Error":
511+
return 2
512+
if level == "win:Warning":
513+
return 3
514+
if level == "win:Informational":
515+
return 4
516+
if level == "win:Verbose":
517+
return 5
518+
raise Exception("unknown level " + level)
519+
520+
def getKeywordsMaskCombined(keywords, keywordsToMask):
521+
mask = 0
522+
for keyword in keywords.split(" "):
523+
if keyword == "":
524+
continue
525+
mask |= keywordsToMask[keyword]
526+
527+
return mask
528+
505529
def generatePlatformIndependentFiles(sClrEtwAllMan, incDir, etmDummyFile, extern, write_xplatheader):
506530

507531
generateEtmDummyHeader(sClrEtwAllMan,etmDummyFile)
@@ -513,15 +537,78 @@ def generatePlatformIndependentFiles(sClrEtwAllMan, incDir, etmDummyFile, extern
513537
if not os.path.exists(incDir):
514538
os.makedirs(incDir)
515539

540+
eventpipe_trace_context_typedef = """
541+
#if !defined(EVENTPIPE_TRACE_CONTEXT_DEF)
542+
#define EVENTPIPE_TRACE_CONTEXT_DEF
543+
typedef struct _EVENTPIPE_TRACE_CONTEXT
544+
{
545+
WCHAR const * Name;
546+
UCHAR Level;
547+
bool IsEnabled;
548+
ULONGLONG EnabledKeywordsBitmask;
549+
} EVENTPIPE_TRACE_CONTEXT, *PEVENTPIPE_TRACE_CONTEXT;
550+
#endif // EVENTPIPE_TRACE_CONTEXT_DEF
551+
"""
552+
553+
dotnet_trace_context_typedef_windows = """
554+
#if !defined(DOTNET_TRACE_CONTEXT_DEF)
555+
#define DOTNET_TRACE_CONTEXT_DEF
556+
typedef struct _DOTNET_TRACE_CONTEXT
557+
{
558+
MCGEN_TRACE_CONTEXT EtwProvider;
559+
EVENTPIPE_TRACE_CONTEXT EventPipeProvider;
560+
} DOTNET_TRACE_CONTEXT, *PDOTNET_TRACE_CONTEXT;
561+
#endif // DOTNET_TRACE_CONTEXT_DEF
562+
"""
563+
564+
dotnet_trace_context_typedef_unix = """
565+
#if !defined(DOTNET_TRACE_CONTEXT_DEF)
566+
#define DOTNET_TRACE_CONTEXT_DEF
567+
typedef struct _DOTNET_TRACE_CONTEXT
568+
{
569+
EVENTPIPE_TRACE_CONTEXT EventPipeProvider;
570+
} DOTNET_TRACE_CONTEXT, *PDOTNET_TRACE_CONTEXT;
571+
#endif // DOTNET_TRACE_CONTEXT_DEF
572+
"""
573+
574+
trace_context_instdef_windows = """
575+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_Context, MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_EVENTPIPE_Context };
576+
577+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context, MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_EVENTPIPE_Context };
578+
579+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_Context, MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_EVENTPIPE_Context };
580+
581+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_STRESS_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_STRESS_PROVIDER_Context, MICROSOFT_WINDOWS_DOTNETRUNTIME_STRESS_PROVIDER_EVENTPIPE_Context };
582+
"""
583+
584+
trace_context_instdef_unix = """
585+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_EVENTPIPE_Context };
586+
587+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_EVENTPIPE_Context };
588+
589+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_EVENTPIPE_Context };
590+
591+
EXTERN_C __declspec(selectany) DOTNET_TRACE_CONTEXT MICROSOFT_WINDOWS_DOTNETRUNTIME_STRESS_PROVIDER_DOTNET_Context = { MICROSOFT_WINDOWS_DOTNETRUNTIME_STRESS_PROVIDER_EVENTPIPE_Context };
592+
"""
593+
516594
# Write the main header for FireETW* functions
517595
clrallevents = os.path.join(incDir, "clretwallmain.h")
596+
is_windows = os.name == 'nt'
518597
with open_for_update(clrallevents) as Clrallevents:
519598
Clrallevents.write(stdprolog)
520599
Clrallevents.write("""
521600
#include "clrxplatevents.h"
522601
#include "clreventpipewriteevents.h"
523602
524603
""")
604+
Clrallevents.write(eventpipe_trace_context_typedef) # define EVENTPIPE_TRACE_CONTEXT
605+
606+
# define DOTNET_TRACE_CONTEXT depending on the platform
607+
if is_windows:
608+
Clrallevents.write(dotnet_trace_context_typedef_windows)
609+
else:
610+
Clrallevents.write(dotnet_trace_context_typedef_unix)
611+
525612
for providerNode in tree.getElementsByTagName('provider'):
526613
templateNodes = providerNode.getElementsByTagName('template')
527614
allTemplates = parseTemplateNodes(templateNodes)
@@ -530,6 +617,56 @@ def generatePlatformIndependentFiles(sClrEtwAllMan, incDir, etmDummyFile, extern
530617
#vm header:
531618
Clrallevents.write(generateClrallEvents(eventNodes, allTemplates) + "\n")
532619

620+
providerName = providerNode.getAttribute('name')
621+
providerSymbol = providerNode.getAttribute('symbol')
622+
623+
eventpipeProviderCtxName = providerSymbol + "_EVENTPIPE_Context"
624+
Clrallevents.write('EXTERN_C __declspec(selectany) EVENTPIPE_TRACE_CONTEXT ' + eventpipeProviderCtxName + ' = { W("' + providerName + '"), 0, false, 0 };\n')
625+
626+
# define and initialize runtime providers' DOTNET_TRACE_CONTEXT depending on the platform
627+
if is_windows:
628+
Clrallevents.write(trace_context_instdef_windows)
629+
else:
630+
Clrallevents.write(trace_context_instdef_unix)
631+
632+
if write_xplatheader:
633+
clrproviders = os.path.join(incDir, "clrproviders.h")
634+
with open_for_update(clrproviders) as Clrproviders:
635+
Clrproviders.write("""
636+
typedef struct _EVENT_DESCRIPTOR
637+
{
638+
int const Level;
639+
ULONGLONG const Keyword;
640+
} EVENT_DESCRIPTOR;
641+
""")
642+
allProviders = []
643+
for providerNode in tree.getElementsByTagName('provider'):
644+
keywords = []
645+
keywordsToMask = {}
646+
providerName = str(providerNode.getAttribute('name'))
647+
providerSymbol = str(providerNode.getAttribute('symbol'))
648+
nbKeywords = 0
649+
650+
Clrproviders.write("// Keywords\n");
651+
for keywordNode in providerNode.getElementsByTagName('keyword'):
652+
keywordName = keywordNode.getAttribute('name')
653+
keywordMask = keywordNode.getAttribute('mask')
654+
keywordSymbol = keywordNode.getAttribute('symbol')
655+
Clrproviders.write("#define " + keywordSymbol + " " + keywordMask + "\n")
656+
657+
keywords.append("{ \"" + keywordName + "\", " + keywordMask + " }")
658+
keywordsToMask[keywordName] = int(keywordMask, 16)
659+
nbKeywords += 1
660+
661+
for eventNode in providerNode.getElementsByTagName('event'):
662+
levelName = eventNode.getAttribute('level')
663+
symbolName = eventNode.getAttribute('symbol')
664+
keywords = eventNode.getAttribute('keywords')
665+
level = convertToLevelId(levelName)
666+
Clrproviders.write("EXTERN_C __declspec(selectany) EVENT_DESCRIPTOR const " + symbolName + " = { " + str(level) + ", " + hex(getKeywordsMaskCombined(keywords, keywordsToMask)) + " };\n")
667+
668+
allProviders.append("&" + providerSymbol + "_Context")
669+
533670

534671
clreventpipewriteevents = os.path.join(incDir, "clreventpipewriteevents.h")
535672
with open_for_update(clreventpipewriteevents) as Clreventpipewriteevents:

src/coreclr/src/vm/ceeload.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -368,7 +368,7 @@ void Module::NotifyEtwLoadFinished(HRESULT hr)
368368

369369
// we report only successful loads
370370
if (SUCCEEDED(hr) &&
371-
ETW_TRACING_CATEGORY_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_Context,
371+
ETW_TRACING_CATEGORY_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_DOTNET_Context,
372372
TRACE_LEVEL_INFORMATION,
373373
KEYWORDZERO))
374374
{

src/coreclr/src/vm/comcallablewrapper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ void SimpleComCallWrapper::BuildRefCountLogMessage(LPCWSTR wszOperation, StackSS
911911
if (handle != NULL)
912912
obj = *((_UNCHECKED_OBJECTREF *)(handle));
913913

914-
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context, CCWRefCountChange))
914+
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_DOTNET_Context, CCWRefCountChange))
915915
{
916916
EX_TRY
917917
{

src/coreclr/src/vm/comsynchronizable.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ ULONG WINAPI ThreadNative::KickOffThread(void* pass)
341341
//
342342

343343
// Fire ETW event to correlate with the thread that created current thread
344-
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_Context, ThreadRunning))
344+
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_DOTNET_Context, ThreadRunning))
345345
FireEtwThreadRunning(pThread, GetClrInstanceId());
346346

347347
// We have a sticky problem here.
@@ -445,7 +445,7 @@ void ThreadNative::StartInner(ThreadBaseObject* pThisUNSAFE)
445445
pNewThread->IncExternalCount();
446446

447447
// Fire an ETW event to mark the current thread as the launcher of the new thread
448-
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_Context, ThreadCreating))
448+
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_DOTNET_Context, ThreadCreating))
449449
FireEtwThreadCreating(pNewThread, GetClrInstanceId());
450450

451451
// copy out the managed name into a buffer that will not move if a GC happens

src/coreclr/src/vm/comthreadpool.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -747,7 +747,7 @@ FCIMPL1(FC_BOOL_RET, ThreadPoolNative::CorPostQueuedCompletionStatus, LPOVERLAPP
747747
// OS doesn't signal handle, so do it here
748748
lpOverlapped->Internal = 0;
749749

750-
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_Context, ThreadPoolIOEnqueue))
750+
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_DOTNET_Context, ThreadPoolIOEnqueue))
751751
FireEtwThreadPoolIOEnqueue(lpOverlapped, OBJECTREFToObject(overlapped), false, GetClrInstanceId());
752752

753753
res = ThreadpoolMgr::PostQueuedCompletionStatus(lpOverlapped,

src/coreclr/src/vm/dllimport.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1048,7 +1048,7 @@ class ILStubState : public StubState
10481048
//
10491049

10501050
// If the category and the event is enabled...
1051-
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_Context, ILStubGenerated))
1051+
if (ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_DOTNET_Context, ILStubGenerated))
10521052
{
10531053
EtwOnILStubGenerated(
10541054
pStubMD,

src/coreclr/src/vm/eepolicy.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -878,7 +878,7 @@ void EEPolicy::LogFatalError(UINT exitCode, UINT_PTR address, LPCWSTR pszMessage
878878
// Log exception to StdErr
879879
LogInfoForFatalError(exitCode, pszMessage, errorSource, argExceptionString);
880880

881-
if(ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context, FailFast))
881+
if(ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_DOTNET_Context, FailFast))
882882
{
883883
// Fire an ETW FailFast event
884884
FireEtwFailFast(pszMessage,
@@ -1058,7 +1058,7 @@ void DECLSPEC_NORETURN EEPolicy::HandleFatalStackOverflow(EXCEPTION_POINTERS *pE
10581058

10591059
DisplayStackOverflowException();
10601060

1061-
if(ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context, FailFast))
1061+
if(ETW_EVENT_ENABLED(MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_DOTNET_Context, FailFast))
10621062
{
10631063
// Fire an ETW FailFast event
10641064
FireEtwFailFast(W("StackOverflowException"),

src/coreclr/src/vm/eventpipesession.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,11 @@ void EventPipeSession::EnableRundown()
429429
};
430430
const uint32_t RundownProvidersSize = sizeof(RundownProviders) / sizeof(EventPipeProviderConfiguration);
431431

432+
// update the provider context here since the callback doesn't happen till we actually try to do rundown.
433+
MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_DOTNET_Context.EventPipeProvider.Level = VerboseLoggingLevel;
434+
MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_DOTNET_Context.EventPipeProvider.EnabledKeywordsBitmask = Keywords;
435+
MICROSOFT_WINDOWS_DOTNETRUNTIME_RUNDOWN_PROVIDER_DOTNET_Context.EventPipeProvider.IsEnabled = true;
436+
432437
// Update provider list with rundown configuration.
433438
for (uint32_t i = 0; i < RundownProvidersSize; ++i)
434439
{

0 commit comments

Comments
 (0)