From 4a45bd833c96302f62f159fe7993618c921df131 Mon Sep 17 00:00:00 2001 From: Elinor Fung Date: Fri, 14 Jul 2023 13:58:24 -0700 Subject: [PATCH] Make firing of ETW events in nativeaot opt-in via the enabled/disabled lib (#88800) --- src/coreclr/nativeaot/Runtime/CMakeLists.txt | 14 +- .../Runtime/DisabledEventPipeInterface.cpp | 1 - .../Runtime/EnabledEventPipeInterface.cpp | 1 - src/coreclr/nativeaot/Runtime/EtwEvents.h | 125 +- src/coreclr/nativeaot/Runtime/EventPipeInterface.h | 2 +- src/coreclr/nativeaot/Runtime/PalRedhawk.h | 9 +- src/coreclr/nativeaot/Runtime/clretwallmain.h | 988 ++++++--------- .../nativeaot/Runtime/disabledeventtrace.cpp | 22 + .../nativeaot/Runtime/eventpipe/CMakeLists.txt | 22 +- .../nativeaot/Runtime/eventpipe/clretwallmain.cpp | 1253 ++++++++++++++++++++ .../Runtime/eventpipe/disabledclretwallmain.cpp | 877 ++++++++++++++ .../Runtime/eventpipe/disableddotnetruntime.cpp | 639 ---------- .../nativeaot/Runtime/eventpipe/dotnetruntime.cpp | 11 - src/coreclr/nativeaot/Runtime/eventtrace.cpp | 64 + src/coreclr/nativeaot/Runtime/eventtrace.h | 15 +- src/coreclr/nativeaot/Runtime/eventtrace_etw.h | 2 + .../nativeaot/Runtime/eventtrace_gcheap.cpp | 130 ++ src/coreclr/nativeaot/Runtime/gcenv.h | 11 - src/coreclr/nativeaot/Runtime/gcrhenv.cpp | 211 +--- src/coreclr/nativeaot/Runtime/inc/CommonTypes.h | 18 + src/coreclr/nativeaot/Runtime/startup.cpp | 3 + 21 files changed, 2820 insertions(+), 1598 deletions(-) create mode 100644 src/coreclr/nativeaot/Runtime/disabledeventtrace.cpp create mode 100644 src/coreclr/nativeaot/Runtime/eventpipe/clretwallmain.cpp create mode 100644 src/coreclr/nativeaot/Runtime/eventpipe/disabledclretwallmain.cpp delete mode 100644 src/coreclr/nativeaot/Runtime/eventpipe/disableddotnetruntime.cpp diff --git a/src/coreclr/nativeaot/Runtime/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/CMakeLists.txt index 7cce306..5249be0 100644 --- a/src/coreclr/nativeaot/Runtime/CMakeLists.txt +++ b/src/coreclr/nativeaot/Runtime/CMakeLists.txt @@ -23,7 +23,6 @@ set(COMMON_RUNTIME_SOURCES TypeManager.cpp ObjectLayout.cpp portable.cpp - profheapwalkhelper.cpp RestrictedCallouts.cpp RhConfig.cpp RuntimeInstance.cpp @@ -220,18 +219,6 @@ endif() if(FEATURE_EVENT_TRACE) add_definitions(-DFEATURE_EVENT_TRACE) - list(APPEND COMMON_RUNTIME_SOURCES - eventtrace.cpp - ) - # These are carry-overs from .NET Native and only included on Windows currently - # bulktype : directly emits via ETW with EventWrite - # gcheap : GCHeapDump, GCHeapSurvivalAndMovement - not prioritizing for nativeaot yet - if (WIN32) - list(APPEND COMMON_RUNTIME_SOURCES - eventtrace_bulktype.cpp - eventtrace_gcheap.cpp - ) - endif() endif() add_definitions(-DFEATURE_BASICFREEZE) @@ -252,6 +239,7 @@ add_definitions(-D_LIB) # add_definitions(-DSTRESS_HEAP) if(WIN32) + set(FEATURE_ETW 1) add_definitions(-DFEATURE_ETW) add_definitions(-DFEATURE_SUSPEND_REDIRECTION) add_definitions(-DFEATURE_SPECIAL_USER_MODE_APC) diff --git a/src/coreclr/nativeaot/Runtime/DisabledEventPipeInterface.cpp b/src/coreclr/nativeaot/Runtime/DisabledEventPipeInterface.cpp index eebbcf4..cb654d8 100644 --- a/src/coreclr/nativeaot/Runtime/DisabledEventPipeInterface.cpp +++ b/src/coreclr/nativeaot/Runtime/DisabledEventPipeInterface.cpp @@ -2,7 +2,6 @@ // The .NET Foundation licenses this file to you under the MIT license. void EventPipeAdapter_Initialize() {} -bool EventPipeAdapter_Enabled() { return false; } bool DiagnosticServerAdapter_Initialize() { return false; } void DiagnosticServerAdapter_PauseForDiagnosticsMonitor() {} diff --git a/src/coreclr/nativeaot/Runtime/EnabledEventPipeInterface.cpp b/src/coreclr/nativeaot/Runtime/EnabledEventPipeInterface.cpp index 312c8aa..a94cdd0 100644 --- a/src/coreclr/nativeaot/Runtime/EnabledEventPipeInterface.cpp +++ b/src/coreclr/nativeaot/Runtime/EnabledEventPipeInterface.cpp @@ -11,7 +11,6 @@ #include "SpinLock.h" void EventPipeAdapter_Initialize() { EventPipeAdapter::Initialize(); } -bool EventPipeAdapter_Enabled() { return EventPipeAdapter::Enabled(); } bool DiagnosticServerAdapter_Initialize() { return DiagnosticServerAdapter::Initialize(); } void DiagnosticServerAdapter_PauseForDiagnosticsMonitor() { DiagnosticServerAdapter::PauseForDiagnosticsMonitor();} diff --git a/src/coreclr/nativeaot/Runtime/EtwEvents.h b/src/coreclr/nativeaot/Runtime/EtwEvents.h index 32649b1..b6f39fa 100644 --- a/src/coreclr/nativeaot/Runtime/EtwEvents.h +++ b/src/coreclr/nativeaot/Runtime/EtwEvents.h @@ -1,24 +1,18 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -// **** This file is auto-generated. Do not edit by hand. **** -// -// Instead ensure this file and EtwEvents.man are checked-out from source code control, locate the PUCLR ETW -// manifest file (it should be in puclr\ndp\clr\src\VM\ClrEtwAll.man), copy it into the rh\src\rtetw -// directory and run the following command from an rhenv window: -// perl EtwImportClrEvents.pl -// -// This script consults EtwEventFilter.txt to determine which events to extract from the CLR manifest. It then -// merges any additional Redhawk-specific events from EtwRedhawkEvents.xml. The result is an updated version -// of this header file plus EtwEvents.man, a new ETW manifest file describing the final Redhawk events which -// can be registered with the system via the following command: -// wevtutil im EtwEvents.man -// +// shipping criteria: no EVENTPIPE-NATIVEAOT-TODO left in the codebase +// @TODO: Use genEtwProvider.py to generate headers to replace this file. +// Reconcile tracking/callbacks/contexts used for ETW vs EventPipe. +// FireEtXplat* functions handle ETW only. The naming matches the generated +// output of genEtwProvider.py. #ifndef __RH_ETW_DEFS_INCLUDED #define __RH_ETW_DEFS_INCLUDED #if defined(FEATURE_ETW) && !defined(DACCESS_COMPILE) +#include + #ifndef RH_ETW_INLINE #define RH_ETW_INLINE __declspec(noinline) __inline #endif @@ -106,59 +100,59 @@ extern "C" __declspec(selectany) RH_ETW_CONTEXT MICROSOFT_WINDOWS_NATIVEAOT_GC_P #define RH_ETW_REGISTER_Microsoft_Windows_Redhawk_GC_Private() do { PalEventRegister(&MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER, RhEtwControlCallback, &MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context, &Microsoft_Windows_Redhawk_GC_PrivateHandle); } while (false) #define RH_ETW_UNREGISTER_Microsoft_Windows_Redhawk_GC_Private() do { PalEventUnregister(Microsoft_Windows_Redhawk_GC_PrivateHandle); } while (false) -#define FireEtwBGC1stConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stConEnd, ClrInstanceID) : 0 +#define FireEtXplatBGC1stConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stConEnd, ClrInstanceID) : 0 -#define FireEtwBGC1stNonConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stNonConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stNonConEnd, ClrInstanceID) : 0 +#define FireEtXplatBGC1stNonConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stNonConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC1stNonConEnd, ClrInstanceID) : 0 -#define FireEtwBGC2ndConBegin(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConBegin, ClrInstanceID) : 0 +#define FireEtXplatBGC2ndConBegin(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConBegin, ClrInstanceID) : 0 -#define FireEtwBGC2ndConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConEnd, ClrInstanceID) : 0 +#define FireEtXplatBGC2ndConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndConEnd, ClrInstanceID) : 0 -#define FireEtwBGC2ndNonConBegin(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConBegin, ClrInstanceID) : 0 +#define FireEtXplatBGC2ndNonConBegin(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConBegin, ClrInstanceID) : 0 -#define FireEtwBGC2ndNonConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConEnd, ClrInstanceID) : 0 +#define FireEtXplatBGC2ndNonConEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGC2ndNonConEnd, ClrInstanceID) : 0 -#define FireEtwBGCAllocWaitBegin(Reason, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCAllocWait(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitBegin, Reason, ClrInstanceID) : 0 +#define FireEtXplatBGCAllocWaitBegin(Reason, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCAllocWait(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitBegin, Reason, ClrInstanceID) : 0 -#define FireEtwBGCAllocWaitEnd(Reason, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCAllocWait(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitEnd, Reason, ClrInstanceID) : 0 +#define FireEtXplatBGCAllocWaitEnd(Reason, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCAllocWait(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCAllocWaitEnd, Reason, ClrInstanceID) : 0 -#define FireEtwBGCBegin(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCBegin, ClrInstanceID) : 0 +#define FireEtXplatBGCBegin(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCBegin)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCBegin, ClrInstanceID) : 0 -#define FireEtwBGCDrainMark(Objects, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCDrainMark)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCDrainMark(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCDrainMark, Objects, ClrInstanceID) : 0 +#define FireEtXplatBGCDrainMark(Objects, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCDrainMark)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCDrainMark(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCDrainMark, Objects, ClrInstanceID) : 0 -#define FireEtwBGCOverflow(Min, Max, Objects, IsLarge, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCOverflow)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCOverflow(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCOverflow, Min, Max, Objects, IsLarge, ClrInstanceID) : 0 +#define FireEtXplatBGCOverflow(Min, Max, Objects, IsLarge, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCOverflow)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCOverflow(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCOverflow, Min, Max, Objects, IsLarge, ClrInstanceID) : 0 -#define FireEtwBGCPlanEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCPlanEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCPlanEnd, ClrInstanceID) : 0 +#define FireEtXplatBGCPlanEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCPlanEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCPlanEnd, ClrInstanceID) : 0 -#define FireEtwBGCRevisit(Pages, Objects, IsLarge, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCRevisit)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCRevisit(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCRevisit, Pages, Objects, IsLarge, ClrInstanceID) : 0 +#define FireEtXplatBGCRevisit(Pages, Objects, IsLarge, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCRevisit)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCRevisit(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCRevisit, Pages, Objects, IsLarge, ClrInstanceID) : 0 -#define FireEtwBGCSweepEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCSweepEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCSweepEnd, ClrInstanceID) : 0 +#define FireEtXplatBGCSweepEnd(ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCSweepEnd)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCNoUserData(Microsoft_Windows_Redhawk_GC_PrivateHandle, &BGCSweepEnd, ClrInstanceID) : 0 -#define FireEtwGCFullNotify_V1(GenNumber, IsAlloc, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCFullNotify_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCFullNotify_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCFullNotify_V1, GenNumber, IsAlloc, ClrInstanceID) : 0 +#define FireEtXplatGCFullNotify_V1(GenNumber, IsAlloc, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCFullNotify_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCFullNotify_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCFullNotify_V1, GenNumber, IsAlloc, ClrInstanceID) : 0 -#define FireEtwGCGlobalHeapHistory_V1(FinalYoungestDesired, NumHeaps, CondemnedGeneration, Gen0ReductionCount, Reason, GlobalMechanisms, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCGlobalHeapHistory_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCGlobalHeap_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCGlobalHeapHistory_V1, FinalYoungestDesired, NumHeaps, CondemnedGeneration, Gen0ReductionCount, Reason, GlobalMechanisms, ClrInstanceID) : 0 +#define FireEtXplatGCGlobalHeapHistory_V1(FinalYoungestDesired, NumHeaps, CondemnedGeneration, Gen0ReductionCount, Reason, GlobalMechanisms, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCGlobalHeapHistory_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCGlobalHeap_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCGlobalHeapHistory_V1, FinalYoungestDesired, NumHeaps, CondemnedGeneration, Gen0ReductionCount, Reason, GlobalMechanisms, ClrInstanceID) : 0 -#define FireEtwGCJoin_V1(Heap, JoinTime, JoinType, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCJoin_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCJoin_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCJoin_V1, Heap, JoinTime, JoinType, ClrInstanceID) : 0 +#define FireEtXplatGCJoin_V1(Heap, JoinTime, JoinType, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCJoin_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCJoin_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCJoin_V1, Heap, JoinTime, JoinType, ClrInstanceID) : 0 -#define FireEtwGCOptimized_V1(DesiredAllocation, NewAllocation, GenerationNumber, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCOptimized_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCOptimized_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCOptimized_V1, DesiredAllocation, NewAllocation, GenerationNumber, ClrInstanceID) : 0 +#define FireEtXplatGCOptimized_V1(DesiredAllocation, NewAllocation, GenerationNumber, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCOptimized_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCOptimized_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCOptimized_V1, DesiredAllocation, NewAllocation, GenerationNumber, ClrInstanceID) : 0 -#define FireEtwGCPerHeapHistory() (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCPerHeapHistory)) ? TemplateEventDescriptor(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCPerHeapHistory) : 0 +#define FireEtXplatGCPerHeapHistory() (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCPerHeapHistory)) ? TemplateEventDescriptor(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCPerHeapHistory) : 0 -#define FireEtwGCSettings(SegmentSize, LargeObjectSegmentSize, ServerGC) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCSettings)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCSettings(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCSettings, SegmentSize, LargeObjectSegmentSize, ServerGC) : 0 +#define FireEtXplatGCSettings(SegmentSize, LargeObjectSegmentSize, ServerGC) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCSettings)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCSettings(Microsoft_Windows_Redhawk_GC_PrivateHandle, &GCSettings, SegmentSize, LargeObjectSegmentSize, ServerGC) : 0 -#define FireEtwPinPlugAtGCTime(PlugStart, PlugEnd, GapBeforeSize, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PinPlugAtGCTime)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PinPlugAtGCTime(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PinPlugAtGCTime, PlugStart, PlugEnd, GapBeforeSize, ClrInstanceID) : 0 +#define FireEtXplatPinPlugAtGCTime(PlugStart, PlugEnd, GapBeforeSize, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PinPlugAtGCTime)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PinPlugAtGCTime(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PinPlugAtGCTime, PlugStart, PlugEnd, GapBeforeSize, ClrInstanceID) : 0 -#define FireEtwPrvDestroyGCHandle(HandleID, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvDestroyGCHandle)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvDestroyGCHandle(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvDestroyGCHandle, HandleID, ClrInstanceID) : 0 +#define FireEtXplatPrvDestroyGCHandle(HandleID, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvDestroyGCHandle)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvDestroyGCHandle(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvDestroyGCHandle, HandleID, ClrInstanceID) : 0 -#define FireEtwPrvGCMarkCards_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkCards_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkCards_V1, HeapNum, ClrInstanceID) : 0 +#define FireEtXplatPrvGCMarkCards_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkCards_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkCards_V1, HeapNum, ClrInstanceID) : 0 -#define FireEtwPrvGCMarkFinalizeQueueRoots_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkFinalizeQueueRoots_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkFinalizeQueueRoots_V1, HeapNum, ClrInstanceID) : 0 +#define FireEtXplatPrvGCMarkFinalizeQueueRoots_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkFinalizeQueueRoots_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkFinalizeQueueRoots_V1, HeapNum, ClrInstanceID) : 0 -#define FireEtwPrvGCMarkHandles_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkHandles_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkHandles_V1, HeapNum, ClrInstanceID) : 0 +#define FireEtXplatPrvGCMarkHandles_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkHandles_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkHandles_V1, HeapNum, ClrInstanceID) : 0 -#define FireEtwPrvGCMarkStackRoots_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkStackRoots_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkStackRoots_V1, HeapNum, ClrInstanceID) : 0 +#define FireEtXplatPrvGCMarkStackRoots_V1(HeapNum, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkStackRoots_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvGCMarkStackRoots_V1, HeapNum, ClrInstanceID) : 0 -#define FireEtwPrvSetGCHandle(HandleID, ObjectID, Kind, Generation, AppDomainID, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvSetGCHandle)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvSetGCHandle(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvSetGCHandle, HandleID, ObjectID, Kind, Generation, AppDomainID, ClrInstanceID) : 0 +#define FireEtXplatPrvSetGCHandle(HandleID, ObjectID, Kind, Generation, AppDomainID, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvSetGCHandle)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvSetGCHandle(Microsoft_Windows_Redhawk_GC_PrivateHandle, &PrvSetGCHandle, HandleID, ObjectID, Kind, Generation, AppDomainID, ClrInstanceID) : 0 RH_ETW_INLINE uint32_t Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_BGCAllocWait(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor, uint32_t Reason, uint16_t ClrInstanceID) @@ -266,21 +260,21 @@ Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_GCSettings(REGHANDLE Re } RH_ETW_INLINE uint32_t -Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PinPlugAtGCTime(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor, void* PlugStart, void* PlugEnd, void* GapBeforeSize, uint16_t ClrInstanceID) +Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PinPlugAtGCTime(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor, const void* PlugStart, const void* PlugEnd, const void* GapBeforeSize, uint16_t ClrInstanceID) { EVENT_DATA_DESCRIPTOR EventData[4]; - EventDataDescCreate(&EventData[0], &PlugStart, sizeof(void*)); - EventDataDescCreate(&EventData[1], &PlugEnd, sizeof(void*)); - EventDataDescCreate(&EventData[2], &GapBeforeSize, sizeof(void*)); + EventDataDescCreate(&EventData[0], &PlugStart, sizeof(const void*)); + EventDataDescCreate(&EventData[1], &PlugEnd, sizeof(const void*)); + EventDataDescCreate(&EventData[2], &GapBeforeSize, sizeof(const void*)); EventDataDescCreate(&EventData[3], &ClrInstanceID, sizeof(uint16_t)); return PalEventWrite(RegHandle, Descriptor, 4, EventData); } RH_ETW_INLINE uint32_t -Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvDestroyGCHandle(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor, void* HandleID, uint16_t ClrInstanceID) +Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvDestroyGCHandle(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor, const void* HandleID, uint16_t ClrInstanceID) { EVENT_DATA_DESCRIPTOR EventData[2]; - EventDataDescCreate(&EventData[0], &HandleID, sizeof(void*)); + EventDataDescCreate(&EventData[0], &HandleID, sizeof(const void*)); EventDataDescCreate(&EventData[1], &ClrInstanceID, sizeof(uint16_t)); return PalEventWrite(RegHandle, Descriptor, 2, EventData); } @@ -295,11 +289,11 @@ Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvGCMark_V1(REGHANDLE } RH_ETW_INLINE uint32_t -Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvSetGCHandle(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor, void* HandleID, void* ObjectID, uint32_t Kind, uint32_t Generation, uint64_t AppDomainID, uint16_t ClrInstanceID) +Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_PrvSetGCHandle(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor, const void* HandleID, const void* ObjectID, uint32_t Kind, uint32_t Generation, uint64_t AppDomainID, uint16_t ClrInstanceID) { EVENT_DATA_DESCRIPTOR EventData[6]; - EventDataDescCreate(&EventData[0], &HandleID, sizeof(void*)); - EventDataDescCreate(&EventData[1], &ObjectID, sizeof(void*)); + EventDataDescCreate(&EventData[0], &HandleID, sizeof(const void*)); + EventDataDescCreate(&EventData[1], &ObjectID, sizeof(const void*)); EventDataDescCreate(&EventData[2], &Kind, sizeof(uint32_t)); EventDataDescCreate(&EventData[3], &Generation, sizeof(uint32_t)); EventDataDescCreate(&EventData[4], &AppDomainID, sizeof(uint64_t)); @@ -354,9 +348,6 @@ extern "C" __declspec(selectany) RH_ETW_CONTEXT MICROSOFT_WINDOWS_NATIVEAOT_GC_P #define RH_ETW_REGISTER_Microsoft_Windows_Redhawk_GC_Public() do { PalEventRegister(&MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER, RhEtwControlCallback, &MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context, &Microsoft_Windows_Redhawk_GC_PublicHandle); } while (false) #define RH_ETW_UNREGISTER_Microsoft_Windows_Redhawk_GC_Public() do { PalEventUnregister(Microsoft_Windows_Redhawk_GC_PublicHandle); } while (false) -// BulkType event is currently implemented in EventTrace.cpp -// #define FireEtwBulkType(Count, ClrInstanceID, Values_Len_, Values) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PublicHandle, &BulkType)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_BulkType(Microsoft_Windows_Redhawk_GC_PublicHandle, &BulkType, Count, ClrInstanceID, Values_Len_, Values) : 0 - #define FireEtXplatDestroyGCHandle(HandleID, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PublicHandle, &DestroyGCHandle)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_DestroyGCHandle(Microsoft_Windows_Redhawk_GC_PublicHandle, &DestroyGCHandle, HandleID, ClrInstanceID) : 0 #define FireEtXplatExceptionThrown_V1(ExceptionType, ExceptionMessage, ExceptionEIP, ExceptionHRESULT, ExceptionFlags, ClrInstanceID) (MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context.IsEnabled && PalEventEnabled(Microsoft_Windows_Redhawk_GC_PublicHandle, &ExceptionThrown_V1)) ? Template_MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Exception(Microsoft_Windows_Redhawk_GC_PublicHandle, &ExceptionThrown_V1, ExceptionType, ExceptionMessage, ExceptionEIP, ExceptionHRESULT, ExceptionFlags, ClrInstanceID) : 0 @@ -833,36 +824,6 @@ TemplateEventDescriptor(REGHANDLE RegHandle, const EVENT_DESCRIPTOR * Descriptor #define ETW_EVENT_ENABLED(Context, EventDescriptor) false -#define FireEtwBGC1stConEnd(ClrInstanceID) -#define FireEtwBGC1stNonConEnd(ClrInstanceID) -#define FireEtwBGC2ndConBegin(ClrInstanceID) -#define FireEtwBGC2ndConEnd(ClrInstanceID) -#define FireEtwBGC2ndNonConBegin(ClrInstanceID) -#define FireEtwBGC2ndNonConEnd(ClrInstanceID) -#define FireEtwBGCAllocWaitBegin(Reason, ClrInstanceID) -#define FireEtwBGCAllocWaitEnd(Reason, ClrInstanceID) -#define FireEtwBGCBegin(ClrInstanceID) -#define FireEtwBGCDrainMark(Objects, ClrInstanceID) -#define FireEtwBGCOverflow(Min, Max, Objects, IsLarge, ClrInstanceID) -#define FireEtwBGCPlanEnd(ClrInstanceID) -#define FireEtwBGCRevisit(Pages, Objects, IsLarge, ClrInstanceID) -#define FireEtwBGCSweepEnd(ClrInstanceID) -#define FireEtwGCFullNotify_V1(GenNumber, IsAlloc, ClrInstanceID) -#define FireEtwGCGlobalHeapHistory_V1(FinalYoungestDesired, NumHeaps, CondemnedGeneration, Gen0ReductionCount, Reason, GlobalMechanisms, ClrInstanceID) -#define FireEtwGCJoin_V1(Heap, JoinTime, JoinType, ClrInstanceID) -#define FireEtwGCOptimized_V1(DesiredAllocation, NewAllocation, GenerationNumber, ClrInstanceID) -#define FireEtwGCPerHeapHistory() -#define FireEtwGCSettings(SegmentSize, LargeObjectSegmentSize, ServerGC) -#define FireEtwPinPlugAtGCTime(PlugStart, PlugEnd, GapBeforeSize, ClrInstanceID) -#define FireEtwPrvDestroyGCHandle(HandleID, ClrInstanceID) -#define FireEtwPrvGCMarkCards_V1(HeapNum, ClrInstanceID) -#define FireEtwPrvGCMarkFinalizeQueueRoots_V1(HeapNum, ClrInstanceID) -#define FireEtwPrvGCMarkHandles_V1(HeapNum, ClrInstanceID) -#define FireEtwPrvGCMarkStackRoots_V1(HeapNum, ClrInstanceID) -#define FireEtwPrvSetGCHandle(HandleID, ObjectID, Kind, Generation, AppDomainID, ClrInstanceID) - -// BulkType event is currently implemented in EventTrace.cpp -// #define FireEtwBulkType(Count, ClrInstanceID, Values_Len_, Values) #define FireEtXplatDestroyGCHandle(HandleID, ClrInstanceID) #define FireEtXplatExceptionThrown_V1(ExceptionType, ExceptionMessage, ExceptionEIP, ExceptionHRESULT, ExceptionFlags, ClrInstanceID) #define FireEtXplatGCAllocationTick_V1(AllocationAmount, AllocationKind, ClrInstanceID) diff --git a/src/coreclr/nativeaot/Runtime/EventPipeInterface.h b/src/coreclr/nativeaot/Runtime/EventPipeInterface.h index 406b180..6e39f53 100644 --- a/src/coreclr/nativeaot/Runtime/EventPipeInterface.h +++ b/src/coreclr/nativeaot/Runtime/EventPipeInterface.h @@ -6,7 +6,6 @@ // Initialize EventPipe void EventPipeAdapter_Initialize(); -bool EventPipeAdapter_Enabled(); // Initialize DS bool DiagnosticServerAdapter_Initialize(); @@ -18,4 +17,5 @@ void EventPipeAdapter_FinishInitialize(); void EventPipeAdapter_Shutdown(); bool DiagnosticServerAdapter_Shutdown(); +void EventTracing_Initialize(); #endif //EVENTPIPE_INTERFACE_H \ No newline at end of file diff --git a/src/coreclr/nativeaot/Runtime/PalRedhawk.h b/src/coreclr/nativeaot/Runtime/PalRedhawk.h index c50da49..88785b4 100644 --- a/src/coreclr/nativeaot/Runtime/PalRedhawk.h +++ b/src/coreclr/nativeaot/Runtime/PalRedhawk.h @@ -17,6 +17,8 @@ #include #include +#include "CommonTypes.h" +#include "CommonMacros.h" #include "gcenv.structs.h" // CRITICAL_SECTION #include "IntrinsicConstants.h" #include "PalRedhawkCommon.h" @@ -91,13 +93,6 @@ typedef union _LARGE_INTEGER { int64_t QuadPart; } LARGE_INTEGER, *PLARGE_INTEGER; -typedef struct _GUID { - uint32_t Data1; - uint16_t Data2; - uint16_t Data3; - uint8_t Data4[8]; -} GUID; - #define DECLARE_HANDLE(_name) typedef HANDLE _name struct FILETIME diff --git a/src/coreclr/nativeaot/Runtime/clretwallmain.h b/src/coreclr/nativeaot/Runtime/clretwallmain.h index 99c60a9..6a293eb 100644 --- a/src/coreclr/nativeaot/Runtime/clretwallmain.h +++ b/src/coreclr/nativeaot/Runtime/clretwallmain.h @@ -1,34 +1,25 @@ // Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. -// Work In Progress to add native events to EventPipe // shipping criteria: no EVENTPIPE-NATIVEAOT-TODO left in the codebase -// @TODO: Audit native events in NativeAOT Runtime +// @TODO: Use genEventing.py to generate this file. Update script to handle +// nativeaot runtime and allow generating separate declaration and +// implementation files +// FireEtw* functions handle both EventPipe and ETW. The naming matches the +// generated output of genEventing.py used in shared code and other runtimes. #ifndef CLR_ETW_ALL_MAIN_H #define CLR_ETW_ALL_MAIN_H -#include "clreventpipewriteevents.h" -#include "EtwEvents.h" - -inline BOOL EventEnabledDestroyGCHandle(void) {return EventPipeEventEnabledDestroyGCHandle();} - -inline ULONG FireEtwDestroyGCHandle( +BOOL EventEnabledDestroyGCHandle(void); +ULONG FireEtwDestroyGCHandle( void* HandleID, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventDestroyGCHandle(HandleID,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatDestroyGCHandle(HandleID,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledExceptionThrown_V1(void) {return EventPipeEventEnabledExceptionThrown_V1();} - -inline ULONG FireEtwExceptionThrown_V1( +); + +BOOL EventEnabledExceptionThrown_V1(void); +ULONG FireEtwExceptionThrown_V1( const WCHAR* ExceptionType, const WCHAR* ExceptionMessage, void* ExceptionEIP, @@ -37,18 +28,10 @@ inline ULONG FireEtwExceptionThrown_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventExceptionThrown_V1(ExceptionType,ExceptionMessage,ExceptionEIP,ExceptionHRESULT,ExceptionFlags,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatExceptionThrown_V1(ExceptionType,ExceptionMessage,ExceptionEIP,ExceptionHRESULT,ExceptionFlags,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkEdge(void) {return EventPipeEventEnabledGCBulkEdge();} - -inline ULONG FireEtwGCBulkEdge( +); + +BOOL EventEnabledGCBulkEdge(void); +ULONG FireEtwGCBulkEdge( const unsigned int Index, const unsigned int Count, const unsigned short ClrInstanceID, @@ -56,18 +39,10 @@ inline ULONG FireEtwGCBulkEdge( void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkMovedObjectRanges(void) {return EventPipeEventEnabledGCBulkMovedObjectRanges();} - -inline ULONG FireEtwGCBulkMovedObjectRanges( +); + +BOOL EventEnabledGCBulkMovedObjectRanges(void); +ULONG FireEtwGCBulkMovedObjectRanges( const unsigned int Index, const unsigned int Count, const unsigned short ClrInstanceID, @@ -75,18 +50,10 @@ inline ULONG FireEtwGCBulkMovedObjectRanges( void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkMovedObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkMovedObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkNode(void) {return EventPipeEventEnabledGCBulkNode();} - -inline ULONG FireEtwGCBulkNode( +); + +BOOL EventEnabledGCBulkNode(void); +ULONG FireEtwGCBulkNode( const unsigned int Index, const unsigned int Count, const unsigned short ClrInstanceID, @@ -94,54 +61,30 @@ inline ULONG FireEtwGCBulkNode( void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkNode(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkNode(Index,Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkRCW(void) {return EventPipeEventEnabledGCBulkRCW();} - -inline ULONG FireEtwGCBulkRCW( +); + +BOOL EventEnabledGCBulkRCW(void); +ULONG FireEtwGCBulkRCW( const unsigned int Count, const unsigned short ClrInstanceID, int Values_ElementSize, void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkRCW(Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkRCW(Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkRootCCW(void) {return EventPipeEventEnabledGCBulkRootCCW();} - -inline ULONG FireEtwGCBulkRootCCW( +); + +BOOL EventEnabledGCBulkRootCCW(void); +ULONG FireEtwGCBulkRootCCW( const unsigned int Count, const unsigned short ClrInstanceID, int Values_ElementSize, void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkRootCCW(Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkRootCCW(Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkRootConditionalWeakTableElementEdge(void) {return EventPipeEventEnabledGCBulkRootConditionalWeakTableElementEdge();} - -inline ULONG FireEtwGCBulkRootConditionalWeakTableElementEdge( +); + +BOOL EventEnabledGCBulkRootConditionalWeakTableElementEdge(void); +ULONG FireEtwGCBulkRootConditionalWeakTableElementEdge( const unsigned int Index, const unsigned int Count, const unsigned short ClrInstanceID, @@ -149,18 +92,10 @@ inline ULONG FireEtwGCBulkRootConditionalWeakTableElementEdge( void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkRootConditionalWeakTableElementEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkRootConditionalWeakTableElementEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkRootEdge(void) {return EventPipeEventEnabledGCBulkRootEdge();} - -inline ULONG FireEtwGCBulkRootEdge( +); + +BOOL EventEnabledGCBulkRootEdge(void); +ULONG FireEtwGCBulkRootEdge( const unsigned int Index, const unsigned int Count, const unsigned short ClrInstanceID, @@ -168,18 +103,10 @@ inline ULONG FireEtwGCBulkRootEdge( void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkRootEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkRootEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} - -inline BOOL EventEnabledGCBulkSurvivingObjectRanges(void) {return EventPipeEventEnabledGCBulkSurvivingObjectRanges();} - -inline ULONG FireEtwGCBulkSurvivingObjectRanges( +); + +BOOL EventEnabledGCBulkSurvivingObjectRanges(void); +ULONG FireEtwGCBulkSurvivingObjectRanges( const unsigned int Index, const unsigned int Count, const unsigned short ClrInstanceID, @@ -187,84 +114,44 @@ inline ULONG FireEtwGCBulkSurvivingObjectRanges( void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkSurvivingObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCBulkSurvivingObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values); -#endif - return status; -} +); -inline BOOL EventEnabledGCCreateConcurrentThread_V1(void) {return EventPipeEventEnabledGCCreateConcurrentThread_V1();} - -inline ULONG FireEtwGCCreateConcurrentThread_V1( +BOOL EventEnabledGCCreateConcurrentThread_V1(void); +ULONG FireEtwGCCreateConcurrentThread_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCCreateConcurrentThread_V1(ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCCreateConcurrentThread_V1(ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCCreateSegment_V1(void) {return EventPipeEventEnabledGCCreateSegment_V1();} - -inline ULONG FireEtwGCCreateSegment_V1( +); + +BOOL EventEnabledGCCreateSegment_V1(void); +ULONG FireEtwGCCreateSegment_V1( const unsigned __int64 Address, const unsigned __int64 Size, const unsigned int Type, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCCreateSegment_V1(Address,Size,Type,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCCreateSegment_V1(Address,Size,Type,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCEnd_V1(void) {return EventPipeEventEnabledGCEnd_V1();} - -inline ULONG FireEtwGCEnd_V1( +); + +BOOL EventEnabledGCEnd_V1(void); +ULONG FireEtwGCEnd_V1( const unsigned int Count, const unsigned int Depth, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCEnd_V1(Count,Depth,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCEnd_V1(Count,Depth,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCFreeSegment_V1(void) {return EventPipeEventEnabledGCFreeSegment_V1();} - -inline ULONG FireEtwGCFreeSegment_V1( +); + +BOOL EventEnabledGCFreeSegment_V1(void); +ULONG FireEtwGCFreeSegment_V1( const unsigned __int64 Address, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCFreeSegment_V1(Address,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCFreeSegment_V1(Address,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCGenerationRange(void) {return EventPipeEventEnabledGCGenerationRange();} - -inline ULONG FireEtwGCGenerationRange( +); + +BOOL EventEnabledGCGenerationRange(void); +ULONG FireEtwGCGenerationRange( const unsigned char Generation, void* RangeStart, const unsigned __int64 RangeUsedLength, @@ -272,18 +159,10 @@ inline ULONG FireEtwGCGenerationRange( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCGenerationRange(Generation,RangeStart,RangeUsedLength,RangeReservedLength,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCGenerationRange(Generation,RangeStart,RangeUsedLength,RangeReservedLength,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCHeapStats_V1(void) {return EventPipeEventEnabledGCHeapStats_V1();} - -inline ULONG FireEtwGCHeapStats_V1( +); + +BOOL EventEnabledGCHeapStats_V1(void); +ULONG FireEtwGCHeapStats_V1( const unsigned __int64 GenerationSize0, const unsigned __int64 TotalPromotedSize0, const unsigned __int64 GenerationSize1, @@ -300,18 +179,10 @@ inline ULONG FireEtwGCHeapStats_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCHeapStats_V1(GenerationSize0,TotalPromotedSize0,GenerationSize1,TotalPromotedSize1,GenerationSize2,TotalPromotedSize2,GenerationSize3,TotalPromotedSize3,FinalizationPromotedSize,FinalizationPromotedCount,PinnedObjectCount,SinkBlockCount,GCHandleCount,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCHeapStats_V1(GenerationSize0,TotalPromotedSize0,GenerationSize1,TotalPromotedSize1,GenerationSize2,TotalPromotedSize2,GenerationSize3,TotalPromotedSize3,FinalizationPromotedSize,FinalizationPromotedCount,PinnedObjectCount,SinkBlockCount,GCHandleCount,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCJoin_V2(void) {return EventPipeEventEnabledGCJoin_V2();} - -inline ULONG FireEtwGCJoin_V2( +); + +BOOL EventEnabledGCJoin_V2(void); +ULONG FireEtwGCJoin_V2( const unsigned int Heap, const unsigned int JoinTime, const unsigned int JoinType, @@ -319,100 +190,52 @@ inline ULONG FireEtwGCJoin_V2( const unsigned int JoinID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCJoin_V2(Heap,JoinTime,JoinType,ClrInstanceID,JoinID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCJoin_V2(Heap,JoinTime,JoinType,ClrInstanceID,JoinID); -#endif - return status; -} - -inline BOOL EventEnabledGCMarkFinalizeQueueRoots(void) {return EventPipeEventEnabledGCMarkFinalizeQueueRoots();} - -inline ULONG FireEtwGCMarkFinalizeQueueRoots( +); + +BOOL EventEnabledGCMarkFinalizeQueueRoots(void); +ULONG FireEtwGCMarkFinalizeQueueRoots( const unsigned int HeapNum, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCMarkFinalizeQueueRoots(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCMarkFinalizeQueueRoots(HeapNum,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCMarkHandles(void) {return EventPipeEventEnabledGCMarkHandles();} - -inline ULONG FireEtwGCMarkHandles( +); + +BOOL EventEnabledGCMarkHandles(void); +ULONG FireEtwGCMarkHandles( const unsigned int HeapNum, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCMarkHandles(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCMarkHandles(HeapNum,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCMarkOlderGenerationRoots(void) {return EventPipeEventEnabledGCMarkOlderGenerationRoots();} - -inline ULONG FireEtwGCMarkOlderGenerationRoots( +); + +BOOL EventEnabledGCMarkOlderGenerationRoots(void); +ULONG FireEtwGCMarkOlderGenerationRoots( const unsigned int HeapNum, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCMarkOlderGenerationRoots(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCMarkOlderGenerationRoots(HeapNum,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCMarkStackRoots(void) {return EventPipeEventEnabledGCMarkStackRoots();} - -inline ULONG FireEtwGCMarkStackRoots( +); + +BOOL EventEnabledGCMarkStackRoots(void); +ULONG FireEtwGCMarkStackRoots( const unsigned int HeapNum, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCMarkStackRoots(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCMarkStackRoots(HeapNum,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCMarkWithType(void) {return EventPipeEventEnabledGCMarkWithType();} - -inline ULONG FireEtwGCMarkWithType( +); + +BOOL EventEnabledGCMarkWithType(void); +ULONG FireEtwGCMarkWithType( const unsigned int HeapNum, const unsigned short ClrInstanceID, const unsigned int Type, const unsigned __int64 Bytes, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCMarkWithType(HeapNum,ClrInstanceID,Type,Bytes,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCMarkWithType(HeapNum,ClrInstanceID,Type,Bytes); -#endif - return status; -} - -inline BOOL EventEnabledGCPerHeapHistory_V3(void) {return EventPipeEventEnabledGCPerHeapHistory_V3();} +); -inline ULONG FireEtwGCPerHeapHistory_V3( +BOOL EventEnabledGCPerHeapHistory_V3(void); +ULONG FireEtwGCPerHeapHistory_V3( const unsigned short ClrInstanceID, void* FreeListAllocated, void* FreeListRejected, @@ -432,49 +255,25 @@ inline ULONG FireEtwGCPerHeapHistory_V3( void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCPerHeapHistory_V3(ClrInstanceID,FreeListAllocated,FreeListRejected,EndOfSegAllocated,CondemnedAllocated,PinnedAllocated,PinnedAllocatedAdvance,RunningFreeListEfficiency,CondemnReasons0,CondemnReasons1,CompactMechanisms,ExpandMechanisms,HeapIndex,ExtraGen0Commit,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCPerHeapHistory_V3(ClrInstanceID,FreeListAllocated,FreeListRejected,EndOfSegAllocated,CondemnedAllocated,PinnedAllocated,PinnedAllocatedAdvance,RunningFreeListEfficiency,CondemnReasons0,CondemnReasons1,CompactMechanisms,ExpandMechanisms,HeapIndex,ExtraGen0Commit,Count,Values_ElementSize, Values); -#endif - return status; -} +); -inline BOOL EventEnabledGCTerminateConcurrentThread_V1(void) {return EventPipeEventEnabledGCTerminateConcurrentThread_V1();} - -inline ULONG FireEtwGCTerminateConcurrentThread_V1( +BOOL EventEnabledGCTerminateConcurrentThread_V1(void); +ULONG FireEtwGCTerminateConcurrentThread_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCTerminateConcurrentThread_V1(ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCTerminateConcurrentThread_V1(ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCTriggered(void) {return EventPipeEventEnabledGCTriggered();} - -inline ULONG FireEtwGCTriggered( +); + +BOOL EventEnabledGCTriggered(void); +ULONG FireEtwGCTriggered( const unsigned int Reason, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCTriggered(Reason,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCTriggered(Reason,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledModuleLoad_V2(void) {return EventPipeEventEnabledModuleLoad_V2();} - -inline ULONG FireEtwModuleLoad_V2( +); + +BOOL EventEnabledModuleLoad_V2(void); +ULONG FireEtwModuleLoad_V2( const unsigned __int64 ModuleID, const unsigned __int64 AssemblyID, const unsigned int ModuleFlags, @@ -490,18 +289,10 @@ inline ULONG FireEtwModuleLoad_V2( const WCHAR* NativePdbBuildPath, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventModuleLoad_V2(ModuleID,AssemblyID,ModuleFlags,Reserved1,ModuleILPath,ModuleNativePath,ClrInstanceID,ManagedPdbSignature,ManagedPdbAge,ManagedPdbBuildPath,NativePdbSignature,NativePdbAge,NativePdbBuildPath,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatModuleLoad_V2(ModuleID,AssemblyID,ModuleFlags,Reserved1,ModuleILPath,ModuleNativePath,ClrInstanceID,ManagedPdbSignature,ManagedPdbAge,ManagedPdbBuildPath,NativePdbSignature,NativePdbAge,NativePdbBuildPath); -#endif - return status; -} - -inline BOOL EventEnabledSetGCHandle(void) {return EventPipeEventEnabledSetGCHandle();} - -inline ULONG FireEtwSetGCHandle( +); + +BOOL EventEnabledSetGCHandle(void); +ULONG FireEtwSetGCHandle( void* HandleID, void* ObjectID, const unsigned int Kind, @@ -510,18 +301,10 @@ inline ULONG FireEtwSetGCHandle( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventSetGCHandle(HandleID,ObjectID,Kind,Generation,AppDomainID,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatSetGCHandle(HandleID,ObjectID,Kind,Generation,AppDomainID,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCStart_V2(void) {return EventPipeEventEnabledGCStart_V2();} - -inline ULONG FireEtwGCStart_V2( +); + +BOOL EventEnabledGCStart_V2(void); +ULONG FireEtwGCStart_V2( const unsigned int Count, const unsigned int Depth, const unsigned int Reason, @@ -530,133 +313,73 @@ inline ULONG FireEtwGCStart_V2( const unsigned __int64 ClientSequenceNumber, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCStart_V2(Count,Depth,Reason,Type,ClrInstanceID,ClientSequenceNumber,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCStart_V2(Count,Depth,Reason,Type,ClrInstanceID,ClientSequenceNumber); -#endif - return status; -} +); -inline BOOL EventEnabledGCRestartEEEnd_V1(void) {return EventPipeEventEnabledGCRestartEEEnd_V1();} - -inline ULONG FireEtwGCRestartEEEnd_V1( +BOOL EventEnabledGCRestartEEEnd_V1(void); +ULONG FireEtwGCRestartEEEnd_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCRestartEEEnd_V1(ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCRestartEEEnd_V1(ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCRestartEEBegin_V1(void) {return EventPipeEventEnabledGCRestartEEBegin_V1();} +); -inline ULONG FireEtwGCRestartEEBegin_V1( +BOOL EventEnabledGCRestartEEBegin_V1(void); +ULONG FireEtwGCRestartEEBegin_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCRestartEEBegin_V1(ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCRestartEEBegin_V1(ClrInstanceID); -#endif - return status; -} +); -inline BOOL EventEnabledGCSuspendEEEnd_V1(void) {return EventPipeEventEnabledGCSuspendEEEnd_V1();} - -inline ULONG FireEtwGCSuspendEEEnd_V1( +BOOL EventEnabledGCSuspendEEEnd_V1(void); +ULONG FireEtwGCSuspendEEEnd_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCSuspendEEEnd_V1(ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXPlatGCSuspendEEEnd_V1(ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledGCSuspendEEBegin_V1(void) {return EventPipeEventEnabledGCSuspendEEBegin_V1();} - -inline ULONG FireEtwGCSuspendEEBegin_V1( +); + +BOOL EventEnabledGCSuspendEEBegin_V1(void); +ULONG FireEtwGCSuspendEEBegin_V1( const unsigned int Reason, const unsigned int Count, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCSuspendEEBegin_V1(Reason,Count,ClrInstanceID,ActivityId,RelatedActivityId); -#ifndef TARGET_UNIX - status &= FireEtXplatGCSuspendEEBegin_V1(Reason,Count,ClrInstanceID); -#endif - return status; -} - -inline BOOL EventEnabledDecreaseMemoryPressure(void) {return EventPipeEventEnabledDecreaseMemoryPressure();} - -inline ULONG FireEtwDecreaseMemoryPressure( +); + +BOOL EventEnabledDecreaseMemoryPressure(void); +ULONG FireEtwDecreaseMemoryPressure( const unsigned __int64 BytesFreed, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventDecreaseMemoryPressure(BytesFreed,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledFinalizeObject(void) {return EventPipeEventEnabledFinalizeObject();} - -inline ULONG FireEtwFinalizeObject( +BOOL EventEnabledFinalizeObject(void); +ULONG FireEtwFinalizeObject( const void* TypeID, const void* ObjectID, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventFinalizeObject(TypeID,ObjectID,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCFinalizersBegin_V1(void) {return EventPipeEventEnabledGCFinalizersBegin_V1();} +); -inline ULONG FireEtwGCFinalizersBegin_V1( +BOOL EventEnabledGCFinalizersBegin_V1(void); +ULONG FireEtwGCFinalizersBegin_V1( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCFinalizersBegin_V1(ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCFinalizersEnd_V1(void) {return EventPipeEventEnabledGCFinalizersEnd_V1();} +); -inline ULONG FireEtwGCFinalizersEnd_V1( +BOOL EventEnabledGCFinalizersEnd_V1(void); +ULONG FireEtwGCFinalizersEnd_V1( const unsigned int Count, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCFinalizersEnd_V1(Count,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledContentionStart_V2(void) {return EventPipeEventEnabledContentionStart_V2();} - -inline ULONG FireEtwContentionStart_V2( +BOOL EventEnabledContentionStart_V2(void); +ULONG FireEtwContentionStart_V2( const unsigned char ContentionFlags, const unsigned short ClrInstanceID, const void* LockID, @@ -664,81 +387,53 @@ inline ULONG FireEtwContentionStart_V2( const unsigned __int64 LockOwnerThreadID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventContentionStart_V2(ContentionFlags,ClrInstanceID,LockID,AssociatedObjectID,LockOwnerThreadID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledContentionStop_V1(void) {return EventPipeEventEnabledContentionStop_V1();} +); -inline ULONG FireEtwContentionStop_V1( +BOOL EventEnabledContentionStop_V1(void); +ULONG FireEtwContentionStop_V1( const unsigned char ContentionFlags, const unsigned short ClrInstanceID, const double DurationNs, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventContentionStop_V1(ContentionFlags,ClrInstanceID,DurationNs,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledContentionLockCreated(void) {return EventPipeEventEnabledContentionLockCreated();} +); -inline ULONG FireEtwContentionLockCreated( +BOOL EventEnabledContentionLockCreated(void); +ULONG FireEtwContentionLockCreated( const void* LockID, const void* AssociatedObjectID, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventContentionLockCreated(LockID,AssociatedObjectID,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledThreadPoolWorkerThreadStart(void) {return EventPipeEventEnabledThreadPoolWorkerThreadStart();} - -inline uint32_t FireEtwThreadPoolWorkerThreadStart( +BOOL EventEnabledThreadPoolWorkerThreadStart(void); +uint32_t FireEtwThreadPoolWorkerThreadStart( const unsigned int ActiveWorkerThreadCount, const unsigned int RetiredWorkerThreadCount, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadStart(ActiveWorkerThreadCount,RetiredWorkerThreadCount,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline uint32_t FireEtwThreadPoolWorkerThreadStop( +uint32_t FireEtwThreadPoolWorkerThreadStop( const unsigned int ActiveWorkerThreadCount, const unsigned int RetiredWorkerThreadCount, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadStop(ActiveWorkerThreadCount,RetiredWorkerThreadCount,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline uint32_t FireEtwThreadPoolWorkerThreadWait( +uint32_t FireEtwThreadPoolWorkerThreadWait( const unsigned int ActiveWorkerThreadCount, const unsigned int RetiredWorkerThreadCount, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadWait(ActiveWorkerThreadCount,RetiredWorkerThreadCount,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledThreadPoolMinMaxThreads(void) {return EventPipeEventEnabledThreadPoolMinMaxThreads();} +); -inline uint32_t FireEtwThreadPoolMinMaxThreads( +BOOL EventEnabledThreadPoolMinMaxThreads(void); +uint32_t FireEtwThreadPoolMinMaxThreads( const unsigned short MinWorkerThreads, const unsigned short MaxWorkerThreads, const unsigned short MinIOCompletionThreads, @@ -746,43 +441,28 @@ inline uint32_t FireEtwThreadPoolMinMaxThreads( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolMinMaxThreads(MinWorkerThreads,MaxWorkerThreads,MinIOCompletionThreads,MaxIOCompletionThreads,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledThreadPoolWorkerThreadAdjustmentSample(void) {return EventPipeEventEnabledThreadPoolWorkerThreadAdjustmentSample();} - -inline uint32_t FireEtwThreadPoolWorkerThreadAdjustmentSample( +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentSample(void); +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentSample( const double Throughput, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadAdjustmentSample(Throughput,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledThreadPoolWorkerThreadAdjustmentAdjustment(void) {return EventPipeEventEnabledThreadPoolWorkerThreadAdjustmentAdjustment();} +); -inline uint32_t FireEtwThreadPoolWorkerThreadAdjustmentAdjustment( +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentAdjustment(void); +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentAdjustment( const double AverageThroughput, const unsigned int NewWorkerThreadCount, const unsigned int Reason, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadAdjustmentAdjustment(AverageThroughput,NewWorkerThreadCount,Reason,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledThreadPoolWorkerThreadAdjustmentStats(void) {return EventPipeEventEnabledThreadPoolWorkerThreadAdjustmentStats();} - -inline uint32_t FireEtwThreadPoolWorkerThreadAdjustmentStats( +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentStats(void); +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentStats( const double Duration, const double Throughput, const double ThreadWave, @@ -796,71 +476,46 @@ inline uint32_t FireEtwThreadPoolWorkerThreadAdjustmentStats( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadAdjustmentStats(Duration,Throughput,ThreadWave,ThroughputWave,ThroughputErrorEstimate,AverageThroughputErrorEstimate,ThroughputRatio,Confidence,NewControlSetting,NewThreadWaveMagnitude,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledThreadPoolIOEnqueue(void) {return EventPipeEventEnabledThreadPoolIOEnqueue();} +); -inline uint32_t FireEtwThreadPoolIOEnqueue( +BOOL EventEnabledThreadPoolIOEnqueue(void); +uint32_t FireEtwThreadPoolIOEnqueue( const void* NativeOverlapped, const void* Overlapped, const BOOL MultiDequeues, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolIOEnqueue(NativeOverlapped,Overlapped,MultiDequeues,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledThreadPoolIODequeue(void) {return EventPipeEventEnabledThreadPoolIODequeue();} +); -inline uint32_t FireEtwThreadPoolIODequeue( +BOOL EventEnabledThreadPoolIODequeue(void); +uint32_t FireEtwThreadPoolIODequeue( const void* NativeOverlapped, const void* Overlapped, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolIODequeue(NativeOverlapped,Overlapped,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledThreadPoolWorkingThreadCount(void) {return EventPipeEventEnabledThreadPoolWorkingThreadCount();} - -inline uint32_t FireEtwThreadPoolWorkingThreadCount( +BOOL EventEnabledThreadPoolWorkingThreadCount(void); +uint32_t FireEtwThreadPoolWorkingThreadCount( const unsigned int Count, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolWorkingThreadCount(Count,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledThreadPoolIOPack(void) {return EventPipeEventEnabledThreadPoolIOPack();} +); -inline uint32_t FireEtwThreadPoolIOPack( +BOOL EventEnabledThreadPoolIOPack(void); +uint32_t FireEtwThreadPoolIOPack( const void* NativeOverlapped, const void* Overlapped, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - uint32_t status = EventPipeWriteEventThreadPoolIOPack(NativeOverlapped,Overlapped,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCAllocationTick_V4(void) {return EventPipeEventEnabledGCAllocationTick_V4();} +); -inline ULONG FireEtwGCAllocationTick_V4( +BOOL EventEnabledGCAllocationTick_V4(void); +ULONG FireEtwGCAllocationTick_V4( const unsigned int AllocationAmount, const unsigned int AllocationKind, const unsigned short ClrInstanceID, @@ -872,15 +527,10 @@ inline ULONG FireEtwGCAllocationTick_V4( const unsigned __int64 ObjectSize, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCAllocationTick_V4(AllocationAmount,AllocationKind,ClrInstanceID,AllocationAmount64,TypeID,TypeName,HeapIndex,Address,ObjectSize,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledGCHeapStats_V2(void) {return EventPipeEventEnabledGCHeapStats_V2();} - -inline ULONG FireEtwGCHeapStats_V2( +BOOL EventEnabledGCHeapStats_V2(void); +ULONG FireEtwGCHeapStats_V2( const unsigned __int64 GenerationSize0, const unsigned __int64 TotalPromotedSize0, const unsigned __int64 GenerationSize1, @@ -899,15 +549,10 @@ inline ULONG FireEtwGCHeapStats_V2( const unsigned __int64 TotalPromotedSize4, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCHeapStats_V2(GenerationSize0,TotalPromotedSize0,GenerationSize1,TotalPromotedSize1,GenerationSize2,TotalPromotedSize2,GenerationSize3,TotalPromotedSize3,FinalizationPromotedSize,FinalizationPromotedCount,PinnedObjectCount,SinkBlockCount,GCHandleCount,ClrInstanceID,GenerationSize4,TotalPromotedSize4,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCSampledObjectAllocationHigh(void) {return EventPipeEventEnabledGCSampledObjectAllocationHigh();} +); -inline ULONG FireEtwGCSampledObjectAllocationHigh( +BOOL EventEnabledGCSampledObjectAllocationHigh(void); +ULONG FireEtwGCSampledObjectAllocationHigh( const void* Address, const void* TypeID, const unsigned int ObjectCountForTypeSample, @@ -915,15 +560,10 @@ inline ULONG FireEtwGCSampledObjectAllocationHigh( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCSampledObjectAllocationHigh(Address,TypeID,ObjectCountForTypeSample,TotalSizeForTypeSample,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCSampledObjectAllocationLow(void) {return EventPipeEventEnabledGCSampledObjectAllocationLow();} +); -inline ULONG FireEtwGCSampledObjectAllocationLow( +BOOL EventEnabledGCSampledObjectAllocationLow(void); +ULONG FireEtwGCSampledObjectAllocationLow( const void* Address, const void* TypeID, const unsigned int ObjectCountForTypeSample, @@ -931,15 +571,10 @@ inline ULONG FireEtwGCSampledObjectAllocationLow( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCSampledObjectAllocationLow(Address,TypeID,ObjectCountForTypeSample,TotalSizeForTypeSample,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledPinObjectAtGCTime(void) {return EventPipeEventEnabledPinObjectAtGCTime();} - -inline ULONG FireEtwPinObjectAtGCTime( +BOOL EventEnabledPinObjectAtGCTime(void); +ULONG FireEtwPinObjectAtGCTime( const void* HandleID, const void* ObjectID, const unsigned __int64 ObjectSize, @@ -947,15 +582,10 @@ inline ULONG FireEtwPinObjectAtGCTime( const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventPinObjectAtGCTime(HandleID,ObjectID,ObjectSize,TypeName,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCBulkRootStaticVar(void) {return EventPipeEventEnabledGCBulkRootStaticVar();} +); -inline ULONG FireEtwGCBulkRootStaticVar( +BOOL EventEnabledGCBulkRootStaticVar(void); +ULONG FireEtwGCBulkRootStaticVar( const unsigned int Count, const unsigned __int64 AppDomainID, const unsigned short ClrInstanceID, @@ -963,28 +593,18 @@ inline ULONG FireEtwGCBulkRootStaticVar( const void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCBulkRootStaticVar(Count,AppDomainID,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledIncreaseMemoryPressure(void) {return EventPipeEventEnabledIncreaseMemoryPressure();} - -inline ULONG FireEtwIncreaseMemoryPressure( +BOOL EventEnabledIncreaseMemoryPressure(void); +ULONG FireEtwIncreaseMemoryPressure( const unsigned __int64 BytesAllocated, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventIncreaseMemoryPressure(BytesAllocated,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCGlobalHeapHistory_V4(void) {return EventPipeEventEnabledGCGlobalHeapHistory_V4();} +); -inline ULONG FireEtwGCGlobalHeapHistory_V4( +BOOL EventEnabledGCGlobalHeapHistory_V4(void); +ULONG FireEtwGCGlobalHeapHistory_V4( const unsigned __int64 FinalYoungestDesired, const signed int NumHeaps, const unsigned int CondemnedGeneration, @@ -1001,56 +621,36 @@ inline ULONG FireEtwGCGlobalHeapHistory_V4( const void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCGlobalHeapHistory_V4(FinalYoungestDesired,NumHeaps,CondemnedGeneration,Gen0ReductionCount,Reason,GlobalMechanisms,ClrInstanceID,PauseMode,MemoryPressure,CondemnReasons0,CondemnReasons1,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledGenAwareBegin(void) {return EventPipeEventEnabledGenAwareBegin();} - -inline ULONG FireEtwGenAwareBegin( +BOOL EventEnabledGenAwareBegin(void); +ULONG FireEtwGenAwareBegin( const unsigned int Count, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGenAwareBegin(Count,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGenAwareEnd(void) {return EventPipeEventEnabledGenAwareEnd();} +); -inline ULONG FireEtwGenAwareEnd( +BOOL EventEnabledGenAwareEnd(void); +ULONG FireEtwGenAwareEnd( const unsigned int Count, const unsigned short ClrInstanceID, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGenAwareEnd(Count,ClrInstanceID,ActivityId,RelatedActivityId); - return status; -} - -inline BOOL EventEnabledGCLOHCompact(void) {return EventPipeEventEnabledGCLOHCompact();} +); -inline ULONG FireEtwGCLOHCompact( +BOOL EventEnabledGCLOHCompact(void); +ULONG FireEtwGCLOHCompact( const unsigned short ClrInstanceID, const unsigned short Count, int Values_ElementSize, const void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCLOHCompact(ClrInstanceID,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); - return status; -} +); -inline BOOL EventEnabledGCFitBucketInfo(void) {return EventPipeEventEnabledGCFitBucketInfo();} - -inline ULONG FireEtwGCFitBucketInfo( +BOOL EventEnabledGCFitBucketInfo(void); +ULONG FireEtwGCFitBucketInfo( const unsigned short ClrInstanceID, const unsigned short BucketKind, const unsigned __int64 TotalSize, @@ -1059,9 +659,159 @@ inline ULONG FireEtwGCFitBucketInfo( const void* Values, const GUID * ActivityId = nullptr, const GUID * RelatedActivityId = nullptr -) -{ - ULONG status = EventPipeWriteEventGCFitBucketInfo(ClrInstanceID,BucketKind,TotalSize,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); - return status; -} +); + +#ifdef FEATURE_ETW + +// ================================================================== +// Events currently only fired via ETW (private runtime provider) +// ================================================================== + +ULONG FireEtwGCSettings( + const unsigned __int64 SegmentSize, + const unsigned __int64 LargeObjectSegmentSize, + const BOOL ServerGC, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwPinPlugAtGCTime( + const void* PlugStart, + const void* PlugEnd, + const void* GapBeforeSize, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGCBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGC1stNonConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGC1stConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGC2ndNonConBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGC2ndNonConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGC2ndConBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGC2ndConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGCDrainMark( + const unsigned __int64 Objects, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGCRevisit( + const unsigned __int64 Pages, + const unsigned __int64 Objects, + const unsigned int IsLarge, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGCOverflow( + const unsigned __int64 Min, + const unsigned __int64 Max, + const unsigned __int64 Objects, + const unsigned int IsLarge, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGCAllocWaitBegin( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwBGCAllocWaitEnd( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwGCFullNotify_V1( + const unsigned int GenNumber, + const unsigned int IsAlloc, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwPrvSetGCHandle( + const void* HandleID, + const void* ObjectID, + const unsigned int Kind, + const unsigned int Generation, + const unsigned __int64 AppDomainID, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +ULONG FireEtwPrvDestroyGCHandle( + const void* HandleID, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +); + +#else + +#define FireEtwBGC1stConEnd(ClrInstanceID) +#define FireEtwBGC1stNonConEnd(ClrInstanceID) +#define FireEtwBGC2ndConBegin(ClrInstanceID) +#define FireEtwBGC2ndConEnd(ClrInstanceID) +#define FireEtwBGC2ndNonConBegin(ClrInstanceID) +#define FireEtwBGC2ndNonConEnd(ClrInstanceID) +#define FireEtwBGCAllocWaitBegin(Reason, ClrInstanceID) +#define FireEtwBGCAllocWaitEnd(Reason, ClrInstanceID) +#define FireEtwBGCBegin(ClrInstanceID) +#define FireEtwBGCDrainMark(Objects, ClrInstanceID) +#define FireEtwBGCOverflow(Min, Max, Objects, IsLarge, ClrInstanceID) +#define FireEtwBGCRevisit(Pages, Objects, IsLarge, ClrInstanceID) +#define FireEtwGCFullNotify_V1(GenNumber, IsAlloc, ClrInstanceID) +#define FireEtwGCSettings(SegmentSize, LargeObjectSegmentSize, ServerGC) +#define FireEtwPinPlugAtGCTime(PlugStart, PlugEnd, GapBeforeSize, ClrInstanceID) +#define FireEtwPrvDestroyGCHandle(HandleID, ClrInstanceID) +#define FireEtwPrvSetGCHandle(HandleID, ObjectID, Kind, Generation, AppDomainID, ClrInstanceID) + +#endif // FEATURE_ETW + #endif // __CLR_ETW_ALL_MAIN_H__ \ No newline at end of file diff --git a/src/coreclr/nativeaot/Runtime/disabledeventtrace.cpp b/src/coreclr/nativeaot/Runtime/disabledeventtrace.cpp new file mode 100644 index 0000000..f0944fd --- /dev/null +++ b/src/coreclr/nativeaot/Runtime/disabledeventtrace.cpp @@ -0,0 +1,22 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// +// File: eventtrace.cpp +// Abstract: This module implements Event Tracing support +// +// ============================================================================ + +#include "common.h" + +#include "eventtrace.h" + +void EventTracing_Initialize() { } + +void ETW::GCLog::FireGcStart(ETW_GC_INFO * pGcInfo) { } + +#ifdef FEATURE_ETW +BOOL ETW::GCLog::ShouldTrackMovementForEtw() { return FALSE; } +void ETW::GCLog::BeginMovedReferences(size_t * pProfilingContext) { } +void ETW::GCLog::EndMovedReferences(size_t profilingContext, BOOL fAllowProfApiNotification) { } +void ETW::GCLog::WalkHeap() { } +#endif // FEATURE_ETW diff --git a/src/coreclr/nativeaot/Runtime/eventpipe/CMakeLists.txt b/src/coreclr/nativeaot/Runtime/eventpipe/CMakeLists.txt index b8a8808..a6bedd8 100644 --- a/src/coreclr/nativeaot/Runtime/eventpipe/CMakeLists.txt +++ b/src/coreclr/nativeaot/Runtime/eventpipe/CMakeLists.txt @@ -87,6 +87,7 @@ list(APPEND AOT_EVENTPIPE_SHIM_HEADERS ) list(APPEND GEN_EVENTPIPE_SOURCES + ${AOT_EVENTPIPE_SHIM_DIR}/clretwallmain.cpp ${AOT_EVENTPIPE_SHIM_DIR}/dotnetruntime.cpp ) @@ -98,10 +99,28 @@ list(APPEND AOT_EVENTPIPE_MANAGED_TO_NATIVE_SOURCES ${RUNTIME_DIR}/runtimeeventinternal.cpp ) +if (FEATURE_EVENT_TRACE) + list(APPEND AOT_EVENTTRACE_SOURCES + ${RUNTIME_DIR}/eventtrace.cpp + ${RUNTIME_DIR}/profheapwalkhelper.cpp + ) + + # These are carry-overs from .NET Native and only included for ETW currently + # bulktype : directly emits via ETW with EventWrite + # gcheap : GCHeapDump, GCHeapSurvivalAndMovement - not prioritizing for nativeaot yet + if (FEATURE_ETW) + list(APPEND AOT_EVENTTRACE_SOURCES + ${RUNTIME_DIR}/eventtrace_bulktype.cpp + ${RUNTIME_DIR}/eventtrace_gcheap.cpp + ) + endif() +endif() + list(APPEND EVENTPIPE_SOURCES ${AOT_EVENTPIPE_SHIM_SOURCES} ${AOT_EVENTPIPE_SHIM_HEADERS} ${AOT_EVENTPIPE_MANAGED_TO_NATIVE_SOURCES} + ${AOT_EVENTTRACE_SOURCES} ${SHARED_EVENTPIPE_CONFIG_HEADERS} ${GEN_EVENTPIPE_SOURCES} ${CONTAINER_SOURCES} @@ -111,8 +130,9 @@ list(APPEND EVENTPIPE_SOURCES list(APPEND AOT_EVENTPIPE_DISABLED_SOURCES ${RUNTIME_DIR}/DisabledEventPipeInterface.cpp ${RUNTIME_DIR}/disabledeventpipeinternal.cpp + ${RUNTIME_DIR}/disabledeventtrace.cpp ${RUNTIME_DIR}/disabledruntimeeventinternal.cpp - ${AOT_EVENTPIPE_SHIM_DIR}/disableddotnetruntime.cpp + ${AOT_EVENTPIPE_SHIM_DIR}/disabledclretwallmain.cpp ) add_library(eventpipe-enabled STATIC ${EVENTPIPE_SOURCES}) diff --git a/src/coreclr/nativeaot/Runtime/eventpipe/clretwallmain.cpp b/src/coreclr/nativeaot/Runtime/eventpipe/clretwallmain.cpp new file mode 100644 index 0000000..8f93bd9 --- /dev/null +++ b/src/coreclr/nativeaot/Runtime/eventpipe/clretwallmain.cpp @@ -0,0 +1,1253 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// shipping criteria: no EVENTPIPE-NATIVEAOT-TODO left in the codebase +// @TODO: Use genEventing.py to generate this file. Update script to handle +// nativeaot runtime and allow generating separate declaration and +// implementation files + +#include +#include + +#include "clretwallmain.h" +#include "clreventpipewriteevents.h" +#include "EtwEvents.h" + +BOOL EventEnabledDestroyGCHandle(void) {return EventPipeEventEnabledDestroyGCHandle();} + +ULONG FireEtwDestroyGCHandle( + void* HandleID, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventDestroyGCHandle(HandleID,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatDestroyGCHandle(HandleID,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledExceptionThrown_V1(void) {return EventPipeEventEnabledExceptionThrown_V1();} + +ULONG FireEtwExceptionThrown_V1( + const WCHAR* ExceptionType, + const WCHAR* ExceptionMessage, + void* ExceptionEIP, + const unsigned int ExceptionHRESULT, + const unsigned short ExceptionFlags, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventExceptionThrown_V1(ExceptionType,ExceptionMessage,ExceptionEIP,ExceptionHRESULT,ExceptionFlags,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatExceptionThrown_V1(ExceptionType,ExceptionMessage,ExceptionEIP,ExceptionHRESULT,ExceptionFlags,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCBulkEdge(void) {return EventPipeEventEnabledGCBulkEdge();} + +ULONG FireEtwGCBulkEdge( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCBulkMovedObjectRanges(void) {return EventPipeEventEnabledGCBulkMovedObjectRanges();} + +ULONG FireEtwGCBulkMovedObjectRanges( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkMovedObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkMovedObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCBulkNode(void) {return EventPipeEventEnabledGCBulkNode();} + +ULONG FireEtwGCBulkNode( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkNode(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkNode(Index,Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCBulkRCW(void) {return EventPipeEventEnabledGCBulkRCW();} + +ULONG FireEtwGCBulkRCW( + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkRCW(Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkRCW(Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCBulkRootCCW(void) {return EventPipeEventEnabledGCBulkRootCCW();} + +ULONG FireEtwGCBulkRootCCW( + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkRootCCW(Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkRootCCW(Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCBulkRootConditionalWeakTableElementEdge(void) {return EventPipeEventEnabledGCBulkRootConditionalWeakTableElementEdge();} + +ULONG FireEtwGCBulkRootConditionalWeakTableElementEdge( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkRootConditionalWeakTableElementEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkRootConditionalWeakTableElementEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCBulkRootEdge(void) {return EventPipeEventEnabledGCBulkRootEdge();} + +ULONG FireEtwGCBulkRootEdge( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkRootEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkRootEdge(Index,Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCBulkSurvivingObjectRanges(void) {return EventPipeEventEnabledGCBulkSurvivingObjectRanges();} + +ULONG FireEtwGCBulkSurvivingObjectRanges( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkSurvivingObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCBulkSurvivingObjectRanges(Index,Count,ClrInstanceID,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCCreateConcurrentThread_V1(void) {return EventPipeEventEnabledGCCreateConcurrentThread_V1();} + +ULONG FireEtwGCCreateConcurrentThread_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCCreateConcurrentThread_V1(ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCCreateConcurrentThread_V1(ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCCreateSegment_V1(void) {return EventPipeEventEnabledGCCreateSegment_V1();} + +ULONG FireEtwGCCreateSegment_V1( + const unsigned __int64 Address, + const unsigned __int64 Size, + const unsigned int Type, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCCreateSegment_V1(Address,Size,Type,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCCreateSegment_V1(Address,Size,Type,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCEnd_V1(void) {return EventPipeEventEnabledGCEnd_V1();} + +ULONG FireEtwGCEnd_V1( + const unsigned int Count, + const unsigned int Depth, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCEnd_V1(Count,Depth,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCEnd_V1(Count,Depth,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCFreeSegment_V1(void) {return EventPipeEventEnabledGCFreeSegment_V1();} + +ULONG FireEtwGCFreeSegment_V1( + const unsigned __int64 Address, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCFreeSegment_V1(Address,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCFreeSegment_V1(Address,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCGenerationRange(void) {return EventPipeEventEnabledGCGenerationRange();} + +ULONG FireEtwGCGenerationRange( + const unsigned char Generation, + void* RangeStart, + const unsigned __int64 RangeUsedLength, + const unsigned __int64 RangeReservedLength, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCGenerationRange(Generation,RangeStart,RangeUsedLength,RangeReservedLength,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCGenerationRange(Generation,RangeStart,RangeUsedLength,RangeReservedLength,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCHeapStats_V1(void) {return EventPipeEventEnabledGCHeapStats_V1();} + +ULONG FireEtwGCHeapStats_V1( + const unsigned __int64 GenerationSize0, + const unsigned __int64 TotalPromotedSize0, + const unsigned __int64 GenerationSize1, + const unsigned __int64 TotalPromotedSize1, + const unsigned __int64 GenerationSize2, + const unsigned __int64 TotalPromotedSize2, + const unsigned __int64 GenerationSize3, + const unsigned __int64 TotalPromotedSize3, + const unsigned __int64 FinalizationPromotedSize, + const unsigned __int64 FinalizationPromotedCount, + const unsigned int PinnedObjectCount, + const unsigned int SinkBlockCount, + const unsigned int GCHandleCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCHeapStats_V1(GenerationSize0,TotalPromotedSize0,GenerationSize1,TotalPromotedSize1,GenerationSize2,TotalPromotedSize2,GenerationSize3,TotalPromotedSize3,FinalizationPromotedSize,FinalizationPromotedCount,PinnedObjectCount,SinkBlockCount,GCHandleCount,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCHeapStats_V1(GenerationSize0,TotalPromotedSize0,GenerationSize1,TotalPromotedSize1,GenerationSize2,TotalPromotedSize2,GenerationSize3,TotalPromotedSize3,FinalizationPromotedSize,FinalizationPromotedCount,PinnedObjectCount,SinkBlockCount,GCHandleCount,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCJoin_V2(void) {return EventPipeEventEnabledGCJoin_V2();} + +ULONG FireEtwGCJoin_V2( + const unsigned int Heap, + const unsigned int JoinTime, + const unsigned int JoinType, + const unsigned short ClrInstanceID, + const unsigned int JoinID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCJoin_V2(Heap,JoinTime,JoinType,ClrInstanceID,JoinID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCJoin_V2(Heap,JoinTime,JoinType,ClrInstanceID,JoinID); +#endif + return status; +} + +BOOL EventEnabledGCMarkFinalizeQueueRoots(void) {return EventPipeEventEnabledGCMarkFinalizeQueueRoots();} + +ULONG FireEtwGCMarkFinalizeQueueRoots( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCMarkFinalizeQueueRoots(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCMarkFinalizeQueueRoots(HeapNum,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCMarkHandles(void) {return EventPipeEventEnabledGCMarkHandles();} + +ULONG FireEtwGCMarkHandles( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCMarkHandles(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCMarkHandles(HeapNum,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCMarkOlderGenerationRoots(void) {return EventPipeEventEnabledGCMarkOlderGenerationRoots();} + +ULONG FireEtwGCMarkOlderGenerationRoots( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCMarkOlderGenerationRoots(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCMarkOlderGenerationRoots(HeapNum,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCMarkStackRoots(void) {return EventPipeEventEnabledGCMarkStackRoots();} + +ULONG FireEtwGCMarkStackRoots( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCMarkStackRoots(HeapNum,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCMarkStackRoots(HeapNum,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCMarkWithType(void) {return EventPipeEventEnabledGCMarkWithType();} + +ULONG FireEtwGCMarkWithType( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const unsigned int Type, + const unsigned __int64 Bytes, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCMarkWithType(HeapNum,ClrInstanceID,Type,Bytes,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCMarkWithType(HeapNum,ClrInstanceID,Type,Bytes); +#endif + return status; +} + +BOOL EventEnabledGCPerHeapHistory_V3(void) {return EventPipeEventEnabledGCPerHeapHistory_V3();} + +ULONG FireEtwGCPerHeapHistory_V3( + const unsigned short ClrInstanceID, + void* FreeListAllocated, + void* FreeListRejected, + void* EndOfSegAllocated, + void* CondemnedAllocated, + void* PinnedAllocated, + void* PinnedAllocatedAdvance, + const unsigned int RunningFreeListEfficiency, + const unsigned int CondemnReasons0, + const unsigned int CondemnReasons1, + const unsigned int CompactMechanisms, + const unsigned int ExpandMechanisms, + const unsigned int HeapIndex, + void* ExtraGen0Commit, + const unsigned int Count, + int Values_ElementSize, + void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCPerHeapHistory_V3(ClrInstanceID,FreeListAllocated,FreeListRejected,EndOfSegAllocated,CondemnedAllocated,PinnedAllocated,PinnedAllocatedAdvance,RunningFreeListEfficiency,CondemnReasons0,CondemnReasons1,CompactMechanisms,ExpandMechanisms,HeapIndex,ExtraGen0Commit,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCPerHeapHistory_V3(ClrInstanceID,FreeListAllocated,FreeListRejected,EndOfSegAllocated,CondemnedAllocated,PinnedAllocated,PinnedAllocatedAdvance,RunningFreeListEfficiency,CondemnReasons0,CondemnReasons1,CompactMechanisms,ExpandMechanisms,HeapIndex,ExtraGen0Commit,Count,Values_ElementSize, Values); +#endif + return status; +} + +BOOL EventEnabledGCTerminateConcurrentThread_V1(void) {return EventPipeEventEnabledGCTerminateConcurrentThread_V1();} + +ULONG FireEtwGCTerminateConcurrentThread_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCTerminateConcurrentThread_V1(ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCTerminateConcurrentThread_V1(ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCTriggered(void) {return EventPipeEventEnabledGCTriggered();} + +ULONG FireEtwGCTriggered( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCTriggered(Reason,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCTriggered(Reason,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledModuleLoad_V2(void) {return EventPipeEventEnabledModuleLoad_V2();} + +ULONG FireEtwModuleLoad_V2( + const unsigned __int64 ModuleID, + const unsigned __int64 AssemblyID, + const unsigned int ModuleFlags, + const unsigned int Reserved1, + const WCHAR* ModuleILPath, + const WCHAR* ModuleNativePath, + const unsigned short ClrInstanceID, + const GUID* ManagedPdbSignature, + const unsigned int ManagedPdbAge, + const WCHAR* ManagedPdbBuildPath, + const GUID* NativePdbSignature, + const unsigned int NativePdbAge, + const WCHAR* NativePdbBuildPath, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventModuleLoad_V2(ModuleID,AssemblyID,ModuleFlags,Reserved1,ModuleILPath,ModuleNativePath,ClrInstanceID,ManagedPdbSignature,ManagedPdbAge,ManagedPdbBuildPath,NativePdbSignature,NativePdbAge,NativePdbBuildPath,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatModuleLoad_V2(ModuleID,AssemblyID,ModuleFlags,Reserved1,ModuleILPath,ModuleNativePath,ClrInstanceID,ManagedPdbSignature,ManagedPdbAge,ManagedPdbBuildPath,NativePdbSignature,NativePdbAge,NativePdbBuildPath); +#endif + return status; +} + +BOOL EventEnabledSetGCHandle(void) {return EventPipeEventEnabledSetGCHandle();} + +ULONG FireEtwSetGCHandle( + void* HandleID, + void* ObjectID, + const unsigned int Kind, + const unsigned int Generation, + const unsigned __int64 AppDomainID, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventSetGCHandle(HandleID,ObjectID,Kind,Generation,AppDomainID,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatSetGCHandle(HandleID,ObjectID,Kind,Generation,AppDomainID,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCStart_V2(void) {return EventPipeEventEnabledGCStart_V2();} + +ULONG FireEtwGCStart_V2( + const unsigned int Count, + const unsigned int Depth, + const unsigned int Reason, + const unsigned int Type, + const unsigned short ClrInstanceID, + const unsigned __int64 ClientSequenceNumber, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCStart_V2(Count,Depth,Reason,Type,ClrInstanceID,ClientSequenceNumber,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCStart_V2(Count,Depth,Reason,Type,ClrInstanceID,ClientSequenceNumber); +#endif + return status; +} + + +BOOL EventEnabledGCRestartEEEnd_V1(void) {return EventPipeEventEnabledGCRestartEEEnd_V1();} + +ULONG FireEtwGCRestartEEEnd_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCRestartEEEnd_V1(ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCRestartEEEnd_V1(ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCRestartEEBegin_V1(void) {return EventPipeEventEnabledGCRestartEEBegin_V1();} + +ULONG FireEtwGCRestartEEBegin_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCRestartEEBegin_V1(ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCRestartEEBegin_V1(ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCSuspendEEEnd_V1(void) {return EventPipeEventEnabledGCSuspendEEEnd_V1();} + +ULONG FireEtwGCSuspendEEEnd_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCSuspendEEEnd_V1(ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXPlatGCSuspendEEEnd_V1(ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledGCSuspendEEBegin_V1(void) {return EventPipeEventEnabledGCSuspendEEBegin_V1();} + +ULONG FireEtwGCSuspendEEBegin_V1( + const unsigned int Reason, + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCSuspendEEBegin_V1(Reason,Count,ClrInstanceID,ActivityId,RelatedActivityId); +#ifndef TARGET_UNIX + status &= FireEtXplatGCSuspendEEBegin_V1(Reason,Count,ClrInstanceID); +#endif + return status; +} + +BOOL EventEnabledDecreaseMemoryPressure(void) {return EventPipeEventEnabledDecreaseMemoryPressure();} + +ULONG FireEtwDecreaseMemoryPressure( + const unsigned __int64 BytesFreed, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventDecreaseMemoryPressure(BytesFreed,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledFinalizeObject(void) {return EventPipeEventEnabledFinalizeObject();} + +ULONG FireEtwFinalizeObject( + const void* TypeID, + const void* ObjectID, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventFinalizeObject(TypeID,ObjectID,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCFinalizersBegin_V1(void) {return EventPipeEventEnabledGCFinalizersBegin_V1();} + +ULONG FireEtwGCFinalizersBegin_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCFinalizersBegin_V1(ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCFinalizersEnd_V1(void) {return EventPipeEventEnabledGCFinalizersEnd_V1();} + +ULONG FireEtwGCFinalizersEnd_V1( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCFinalizersEnd_V1(Count,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledContentionStart_V2(void) {return EventPipeEventEnabledContentionStart_V2();} + +ULONG FireEtwContentionStart_V2( + const unsigned char ContentionFlags, + const unsigned short ClrInstanceID, + const void* LockID, + const void* AssociatedObjectID, + const unsigned __int64 LockOwnerThreadID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventContentionStart_V2(ContentionFlags,ClrInstanceID,LockID,AssociatedObjectID,LockOwnerThreadID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledContentionStop_V1(void) {return EventPipeEventEnabledContentionStop_V1();} + +ULONG FireEtwContentionStop_V1( + const unsigned char ContentionFlags, + const unsigned short ClrInstanceID, + const double DurationNs, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventContentionStop_V1(ContentionFlags,ClrInstanceID,DurationNs,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledContentionLockCreated(void) {return EventPipeEventEnabledContentionLockCreated();} + +ULONG FireEtwContentionLockCreated( + const void* LockID, + const void* AssociatedObjectID, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventContentionLockCreated(LockID,AssociatedObjectID,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolWorkerThreadStart(void) {return EventPipeEventEnabledThreadPoolWorkerThreadStart();} + +uint32_t FireEtwThreadPoolWorkerThreadStart( + const unsigned int ActiveWorkerThreadCount, + const unsigned int RetiredWorkerThreadCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadStart(ActiveWorkerThreadCount,RetiredWorkerThreadCount,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +uint32_t FireEtwThreadPoolWorkerThreadStop( + const unsigned int ActiveWorkerThreadCount, + const unsigned int RetiredWorkerThreadCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadStop(ActiveWorkerThreadCount,RetiredWorkerThreadCount,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +uint32_t FireEtwThreadPoolWorkerThreadWait( + const unsigned int ActiveWorkerThreadCount, + const unsigned int RetiredWorkerThreadCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadWait(ActiveWorkerThreadCount,RetiredWorkerThreadCount,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolMinMaxThreads(void) {return EventPipeEventEnabledThreadPoolMinMaxThreads();} + +uint32_t FireEtwThreadPoolMinMaxThreads( + const unsigned short MinWorkerThreads, + const unsigned short MaxWorkerThreads, + const unsigned short MinIOCompletionThreads, + const unsigned short MaxIOCompletionThreads, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolMinMaxThreads(MinWorkerThreads,MaxWorkerThreads,MinIOCompletionThreads,MaxIOCompletionThreads,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentSample(void) {return EventPipeEventEnabledThreadPoolWorkerThreadAdjustmentSample();} + +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentSample( + const double Throughput, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadAdjustmentSample(Throughput,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentAdjustment(void) {return EventPipeEventEnabledThreadPoolWorkerThreadAdjustmentAdjustment();} + +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentAdjustment( + const double AverageThroughput, + const unsigned int NewWorkerThreadCount, + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadAdjustmentAdjustment(AverageThroughput,NewWorkerThreadCount,Reason,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentStats(void) {return EventPipeEventEnabledThreadPoolWorkerThreadAdjustmentStats();} + +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentStats( + const double Duration, + const double Throughput, + const double ThreadWave, + const double ThroughputWave, + const double ThroughputErrorEstimate, + const double AverageThroughputErrorEstimate, + const double ThroughputRatio, + const double Confidence, + const double NewControlSetting, + const unsigned short NewThreadWaveMagnitude, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolWorkerThreadAdjustmentStats(Duration,Throughput,ThreadWave,ThroughputWave,ThroughputErrorEstimate,AverageThroughputErrorEstimate,ThroughputRatio,Confidence,NewControlSetting,NewThreadWaveMagnitude,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolIOEnqueue(void) {return EventPipeEventEnabledThreadPoolIOEnqueue();} + +uint32_t FireEtwThreadPoolIOEnqueue( + const void* NativeOverlapped, + const void* Overlapped, + const BOOL MultiDequeues, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolIOEnqueue(NativeOverlapped,Overlapped,MultiDequeues,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolIODequeue(void) {return EventPipeEventEnabledThreadPoolIODequeue();} + +uint32_t FireEtwThreadPoolIODequeue( + const void* NativeOverlapped, + const void* Overlapped, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolIODequeue(NativeOverlapped,Overlapped,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolWorkingThreadCount(void) {return EventPipeEventEnabledThreadPoolWorkingThreadCount();} + +uint32_t FireEtwThreadPoolWorkingThreadCount( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolWorkingThreadCount(Count,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledThreadPoolIOPack(void) {return EventPipeEventEnabledThreadPoolIOPack();} + +uint32_t FireEtwThreadPoolIOPack( + const void* NativeOverlapped, + const void* Overlapped, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + uint32_t status = EventPipeWriteEventThreadPoolIOPack(NativeOverlapped,Overlapped,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCAllocationTick_V4(void) {return EventPipeEventEnabledGCAllocationTick_V4();} + +ULONG FireEtwGCAllocationTick_V4( + const unsigned int AllocationAmount, + const unsigned int AllocationKind, + const unsigned short ClrInstanceID, + const unsigned __int64 AllocationAmount64, + const void* TypeID, + const WCHAR* TypeName, + const unsigned int HeapIndex, + const void* Address, + const unsigned __int64 ObjectSize, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCAllocationTick_V4(AllocationAmount,AllocationKind,ClrInstanceID,AllocationAmount64,TypeID,TypeName,HeapIndex,Address,ObjectSize,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCHeapStats_V2(void) {return EventPipeEventEnabledGCHeapStats_V2();} + +ULONG FireEtwGCHeapStats_V2( + const unsigned __int64 GenerationSize0, + const unsigned __int64 TotalPromotedSize0, + const unsigned __int64 GenerationSize1, + const unsigned __int64 TotalPromotedSize1, + const unsigned __int64 GenerationSize2, + const unsigned __int64 TotalPromotedSize2, + const unsigned __int64 GenerationSize3, + const unsigned __int64 TotalPromotedSize3, + const unsigned __int64 FinalizationPromotedSize, + const unsigned __int64 FinalizationPromotedCount, + const unsigned int PinnedObjectCount, + const unsigned int SinkBlockCount, + const unsigned int GCHandleCount, + const unsigned short ClrInstanceID, + const unsigned __int64 GenerationSize4, + const unsigned __int64 TotalPromotedSize4, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCHeapStats_V2(GenerationSize0,TotalPromotedSize0,GenerationSize1,TotalPromotedSize1,GenerationSize2,TotalPromotedSize2,GenerationSize3,TotalPromotedSize3,FinalizationPromotedSize,FinalizationPromotedCount,PinnedObjectCount,SinkBlockCount,GCHandleCount,ClrInstanceID,GenerationSize4,TotalPromotedSize4,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCSampledObjectAllocationHigh(void) {return EventPipeEventEnabledGCSampledObjectAllocationHigh();} + +ULONG FireEtwGCSampledObjectAllocationHigh( + const void* Address, + const void* TypeID, + const unsigned int ObjectCountForTypeSample, + const unsigned __int64 TotalSizeForTypeSample, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCSampledObjectAllocationHigh(Address,TypeID,ObjectCountForTypeSample,TotalSizeForTypeSample,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCSampledObjectAllocationLow(void) {return EventPipeEventEnabledGCSampledObjectAllocationLow();} + +ULONG FireEtwGCSampledObjectAllocationLow( + const void* Address, + const void* TypeID, + const unsigned int ObjectCountForTypeSample, + const unsigned __int64 TotalSizeForTypeSample, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCSampledObjectAllocationLow(Address,TypeID,ObjectCountForTypeSample,TotalSizeForTypeSample,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledPinObjectAtGCTime(void) {return EventPipeEventEnabledPinObjectAtGCTime();} + +ULONG FireEtwPinObjectAtGCTime( + const void* HandleID, + const void* ObjectID, + const unsigned __int64 ObjectSize, + const WCHAR* TypeName, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventPinObjectAtGCTime(HandleID,ObjectID,ObjectSize,TypeName,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCBulkRootStaticVar(void) {return EventPipeEventEnabledGCBulkRootStaticVar();} + +ULONG FireEtwGCBulkRootStaticVar( + const unsigned int Count, + const unsigned __int64 AppDomainID, + const unsigned short ClrInstanceID, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCBulkRootStaticVar(Count,AppDomainID,ClrInstanceID,Values_ElementSize, Values,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledIncreaseMemoryPressure(void) {return EventPipeEventEnabledIncreaseMemoryPressure();} + +ULONG FireEtwIncreaseMemoryPressure( + const unsigned __int64 BytesAllocated, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventIncreaseMemoryPressure(BytesAllocated,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCGlobalHeapHistory_V4(void) {return EventPipeEventEnabledGCGlobalHeapHistory_V4();} + +ULONG FireEtwGCGlobalHeapHistory_V4( + const unsigned __int64 FinalYoungestDesired, + const signed int NumHeaps, + const unsigned int CondemnedGeneration, + const unsigned int Gen0ReductionCount, + const unsigned int Reason, + const unsigned int GlobalMechanisms, + const unsigned short ClrInstanceID, + const unsigned int PauseMode, + const unsigned int MemoryPressure, + const unsigned int CondemnReasons0, + const unsigned int CondemnReasons1, + const unsigned int Count, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCGlobalHeapHistory_V4(FinalYoungestDesired,NumHeaps,CondemnedGeneration,Gen0ReductionCount,Reason,GlobalMechanisms,ClrInstanceID,PauseMode,MemoryPressure,CondemnReasons0,CondemnReasons1,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGenAwareBegin(void) {return EventPipeEventEnabledGenAwareBegin();} + +ULONG FireEtwGenAwareBegin( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGenAwareBegin(Count,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGenAwareEnd(void) {return EventPipeEventEnabledGenAwareEnd();} + +ULONG FireEtwGenAwareEnd( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGenAwareEnd(Count,ClrInstanceID,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCLOHCompact(void) {return EventPipeEventEnabledGCLOHCompact();} + +ULONG FireEtwGCLOHCompact( + const unsigned short ClrInstanceID, + const unsigned short Count, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCLOHCompact(ClrInstanceID,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); + return status; +} + +BOOL EventEnabledGCFitBucketInfo(void) {return EventPipeEventEnabledGCFitBucketInfo();} + +ULONG FireEtwGCFitBucketInfo( + const unsigned short ClrInstanceID, + const unsigned short BucketKind, + const unsigned __int64 TotalSize, + const unsigned short Count, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId, + const GUID * RelatedActivityId +) +{ + ULONG status = EventPipeWriteEventGCFitBucketInfo(ClrInstanceID,BucketKind,TotalSize,Count,Values_ElementSize, Values,ActivityId,RelatedActivityId); + return status; +} + +#ifdef FEATURE_ETW + +// ================================================================== +// Events currently only fired via ETW (private runtime provider) +// ================================================================== + +ULONG FireEtwGCSettings( + const unsigned __int64 SegmentSize, + const unsigned __int64 LargeObjectSegmentSize, + const BOOL ServerGC, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatGCSettings(SegmentSize,LargeObjectSegmentSize,ServerGC); +} + +ULONG FireEtwPinPlugAtGCTime( + const void* PlugStart, + const void* PlugEnd, + const void* GapBeforeSize, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatPinPlugAtGCTime(PlugStart,PlugEnd,GapBeforeSize,ClrInstanceID); +} + +ULONG FireEtwBGCBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGCBegin(ClrInstanceID); +} + +ULONG FireEtwBGC1stNonConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGC1stNonConEnd(ClrInstanceID); +} + +ULONG FireEtwBGC1stConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGC1stConEnd(ClrInstanceID); +} + +ULONG FireEtwBGC2ndNonConBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGC2ndNonConBegin(ClrInstanceID); +} + +ULONG FireEtwBGC2ndNonConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGC2ndNonConEnd(ClrInstanceID); +} + +ULONG FireEtwBGC2ndConBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGC2ndConBegin(ClrInstanceID); +} + +ULONG FireEtwBGC2ndConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGC2ndConEnd(ClrInstanceID); +} + +ULONG FireEtwBGCDrainMark( + const unsigned __int64 Objects, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGCDrainMark(Objects,ClrInstanceID); +} + +ULONG FireEtwBGCRevisit( + const unsigned __int64 Pages, + const unsigned __int64 Objects, + const unsigned int IsLarge, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGCRevisit(Pages,Objects,IsLarge,ClrInstanceID); +} + +ULONG FireEtwBGCOverflow( + const unsigned __int64 Min, + const unsigned __int64 Max, + const unsigned __int64 Objects, + const unsigned int IsLarge, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGCOverflow(Min,Max,Objects,IsLarge,ClrInstanceID); +} + +ULONG FireEtwBGCAllocWaitBegin( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGCAllocWaitBegin(Reason,ClrInstanceID); +} + +ULONG FireEtwBGCAllocWaitEnd( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatBGCAllocWaitEnd(Reason,ClrInstanceID); +} + +ULONG FireEtwGCFullNotify_V1( + const unsigned int GenNumber, + const unsigned int IsAlloc, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatGCFullNotify_V1(GenNumber,IsAlloc,ClrInstanceID); +} + +ULONG FireEtwPrvSetGCHandle( + const void* HandleID, + const void* ObjectID, + const unsigned int Kind, + const unsigned int Generation, + const unsigned __int64 AppDomainID, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatPrvSetGCHandle(HandleID,ObjectID,Kind,Generation,AppDomainID,ClrInstanceID); +} + +ULONG FireEtwPrvDestroyGCHandle( + const void* HandleID, + const unsigned short ClrInstanceID, + const GUID* ActivityId, + const GUID* RelatedActivityId +) +{ + return FireEtXplatPrvDestroyGCHandle(HandleID,ClrInstanceID); +} + +#endif // FEATURE_ETW diff --git a/src/coreclr/nativeaot/Runtime/eventpipe/disabledclretwallmain.cpp b/src/coreclr/nativeaot/Runtime/eventpipe/disabledclretwallmain.cpp new file mode 100644 index 0000000..b998536 --- /dev/null +++ b/src/coreclr/nativeaot/Runtime/eventpipe/disabledclretwallmain.cpp @@ -0,0 +1,877 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. + +// shipping criteria: no EVENTPIPE-NATIVEAOT-TODO left in the codebase +// @TODO: Use genEventing.py to generate this file. Update script to handle +// nativeaot runtime and allow generating separate declaration and +// implementation files + +#include +#include + +#ifndef ERROR_SUCCESS +#define ERROR_SUCCESS 0L +#endif + +BOOL EventEnabledDestroyGCHandle(void) { return 0; } +ULONG FireEtwDestroyGCHandle( + void* HandleID, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledExceptionThrown_V1(void) { return 0; } +ULONG FireEtwExceptionThrown_V1( + const WCHAR* ExceptionType, + const WCHAR* ExceptionMessage, + void* ExceptionEIP, + const unsigned int ExceptionHRESULT, + const unsigned short ExceptionFlags, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkEdge(void) { return 0; } +ULONG FireEtwGCBulkEdge( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkMovedObjectRanges(void) { return 0; } +ULONG FireEtwGCBulkMovedObjectRanges( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkNode(void) { return 0; } +ULONG FireEtwGCBulkNode( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkRCW(void) { return 0; } +ULONG FireEtwGCBulkRCW( + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkRootCCW(void) { return 0; } +ULONG FireEtwGCBulkRootCCW( + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkRootConditionalWeakTableElementEdge(void) { return 0; } +ULONG FireEtwGCBulkRootConditionalWeakTableElementEdge( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkRootEdge(void) { return 0; } +ULONG FireEtwGCBulkRootEdge( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkSurvivingObjectRanges(void) { return 0; } +ULONG FireEtwGCBulkSurvivingObjectRanges( + const unsigned int Index, + const unsigned int Count, + const unsigned short ClrInstanceID, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCCreateConcurrentThread_V1(void) { return 0; } +ULONG FireEtwGCCreateConcurrentThread_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCCreateSegment_V1(void) { return 0; } +ULONG FireEtwGCCreateSegment_V1( + const unsigned __int64 Address, + const unsigned __int64 Size, + const unsigned int Type, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCEnd_V1(void) { return 0; } +ULONG FireEtwGCEnd_V1( + const unsigned int Count, + const unsigned int Depth, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCFreeSegment_V1(void) { return 0; } +ULONG FireEtwGCFreeSegment_V1( + const unsigned __int64 Address, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCGenerationRange(void) { return 0; } +ULONG FireEtwGCGenerationRange( + const unsigned char Generation, + void* RangeStart, + const unsigned __int64 RangeUsedLength, + const unsigned __int64 RangeReservedLength, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCHeapStats_V1(void) { return 0; } +ULONG FireEtwGCHeapStats_V1( + const unsigned __int64 GenerationSize0, + const unsigned __int64 TotalPromotedSize0, + const unsigned __int64 GenerationSize1, + const unsigned __int64 TotalPromotedSize1, + const unsigned __int64 GenerationSize2, + const unsigned __int64 TotalPromotedSize2, + const unsigned __int64 GenerationSize3, + const unsigned __int64 TotalPromotedSize3, + const unsigned __int64 FinalizationPromotedSize, + const unsigned __int64 FinalizationPromotedCount, + const unsigned int PinnedObjectCount, + const unsigned int SinkBlockCount, + const unsigned int GCHandleCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCJoin_V2(void) { return 0; } +ULONG FireEtwGCJoin_V2( + const unsigned int Heap, + const unsigned int JoinTime, + const unsigned int JoinType, + const unsigned short ClrInstanceID, + const unsigned int JoinID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCMarkFinalizeQueueRoots(void) { return 0; } +ULONG FireEtwGCMarkFinalizeQueueRoots( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCMarkHandles(void) { return 0; } +ULONG FireEtwGCMarkHandles( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCMarkOlderGenerationRoots(void) { return 0; } +ULONG FireEtwGCMarkOlderGenerationRoots( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCMarkStackRoots(void) { return 0; } +ULONG FireEtwGCMarkStackRoots( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCMarkWithType(void) { return 0; } +ULONG FireEtwGCMarkWithType( + const unsigned int HeapNum, + const unsigned short ClrInstanceID, + const unsigned int Type, + const unsigned __int64 Bytes, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCPerHeapHistory_V3(void) { return 0; } +ULONG FireEtwGCPerHeapHistory_V3( + const unsigned short ClrInstanceID, + void* FreeListAllocated, + void* FreeListRejected, + void* EndOfSegAllocated, + void* CondemnedAllocated, + void* PinnedAllocated, + void* PinnedAllocatedAdvance, + const unsigned int RunningFreeListEfficiency, + const unsigned int CondemnReasons0, + const unsigned int CondemnReasons1, + const unsigned int CompactMechanisms, + const unsigned int ExpandMechanisms, + const unsigned int HeapIndex, + void* ExtraGen0Commit, + const unsigned int Count, + int Values_ElementSize, + void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCTerminateConcurrentThread_V1(void) { return 0; } +ULONG FireEtwGCTerminateConcurrentThread_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCTriggered(void) { return 0; } +ULONG FireEtwGCTriggered( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledModuleLoad_V2(void) { return 0; } +ULONG FireEtwModuleLoad_V2( + const unsigned __int64 ModuleID, + const unsigned __int64 AssemblyID, + const unsigned int ModuleFlags, + const unsigned int Reserved1, + const WCHAR* ModuleILPath, + const WCHAR* ModuleNativePath, + const unsigned short ClrInstanceID, + const GUID* ManagedPdbSignature, + const unsigned int ManagedPdbAge, + const WCHAR* ManagedPdbBuildPath, + const GUID* NativePdbSignature, + const unsigned int NativePdbAge, + const WCHAR* NativePdbBuildPath, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledSetGCHandle(void) { return 0; } +ULONG FireEtwSetGCHandle( + void* HandleID, + void* ObjectID, + const unsigned int Kind, + const unsigned int Generation, + const unsigned __int64 AppDomainID, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCStart_V2(void) { return 0; } +ULONG FireEtwGCStart_V2( + const unsigned int Count, + const unsigned int Depth, + const unsigned int Reason, + const unsigned int Type, + const unsigned short ClrInstanceID, + const unsigned __int64 ClientSequenceNumber, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + + +BOOL EventEnabledGCRestartEEEnd_V1(void) { return 0; } +ULONG FireEtwGCRestartEEEnd_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCRestartEEBegin_V1(void) { return 0; } +ULONG FireEtwGCRestartEEBegin_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCSuspendEEEnd_V1(void) { return 0; } +ULONG FireEtwGCSuspendEEEnd_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCSuspendEEBegin_V1(void) { return 0; } +ULONG FireEtwGCSuspendEEBegin_V1( + const unsigned int Reason, + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledDecreaseMemoryPressure(void) { return 0; } +ULONG FireEtwDecreaseMemoryPressure( + const unsigned __int64 BytesFreed, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledFinalizeObject(void) { return 0; } +ULONG FireEtwFinalizeObject( + const void* TypeID, + const void* ObjectID, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCFinalizersBegin_V1(void) { return 0; } +ULONG FireEtwGCFinalizersBegin_V1( + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCFinalizersEnd_V1(void) { return 0; } +ULONG FireEtwGCFinalizersEnd_V1( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledContentionStart_V2(void) { return 0; } +ULONG FireEtwContentionStart_V2( + const unsigned char ContentionFlags, + const unsigned short ClrInstanceID, + const void* LockID, + const void* AssociatedObjectID, + const unsigned __int64 LockOwnerThreadID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledContentionStop_V1(void) { return 0; } +ULONG FireEtwContentionStop_V1( + const unsigned char ContentionFlags, + const unsigned short ClrInstanceID, + const double DurationNs, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledContentionLockCreated(void) { return 0; } +ULONG FireEtwContentionLockCreated( + const void* LockID, + const void* AssociatedObjectID, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolWorkerThreadStart(void) { return 0; } +uint32_t FireEtwThreadPoolWorkerThreadStart( + const unsigned int ActiveWorkerThreadCount, + const unsigned int RetiredWorkerThreadCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +uint32_t FireEtwThreadPoolWorkerThreadStop( + const unsigned int ActiveWorkerThreadCount, + const unsigned int RetiredWorkerThreadCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +uint32_t FireEtwThreadPoolWorkerThreadWait( + const unsigned int ActiveWorkerThreadCount, + const unsigned int RetiredWorkerThreadCount, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolMinMaxThreads(void) { return 0; } +uint32_t FireEtwThreadPoolMinMaxThreads( + const unsigned short MinWorkerThreads, + const unsigned short MaxWorkerThreads, + const unsigned short MinIOCompletionThreads, + const unsigned short MaxIOCompletionThreads, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentSample(void) { return 0; } +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentSample( + const double Throughput, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentAdjustment(void) { return 0; } +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentAdjustment( + const double AverageThroughput, + const unsigned int NewWorkerThreadCount, + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolWorkerThreadAdjustmentStats(void) { return 0; } +uint32_t FireEtwThreadPoolWorkerThreadAdjustmentStats( + const double Duration, + const double Throughput, + const double ThreadWave, + const double ThroughputWave, + const double ThroughputErrorEstimate, + const double AverageThroughputErrorEstimate, + const double ThroughputRatio, + const double Confidence, + const double NewControlSetting, + const unsigned short NewThreadWaveMagnitude, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolIOEnqueue(void) { return 0; } +uint32_t FireEtwThreadPoolIOEnqueue( + const void* NativeOverlapped, + const void* Overlapped, + const BOOL MultiDequeues, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolIODequeue(void) { return 0; } +uint32_t FireEtwThreadPoolIODequeue( + const void* NativeOverlapped, + const void* Overlapped, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolWorkingThreadCount(void) { return 0; } +uint32_t FireEtwThreadPoolWorkingThreadCount( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledThreadPoolIOPack(void) { return 0; } +uint32_t FireEtwThreadPoolIOPack( + const void* NativeOverlapped, + const void* Overlapped, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCAllocationTick_V4(void) { return 0; } +ULONG FireEtwGCAllocationTick_V4( + const unsigned int AllocationAmount, + const unsigned int AllocationKind, + const unsigned short ClrInstanceID, + const unsigned __int64 AllocationAmount64, + const void* TypeID, + const WCHAR* TypeName, + const unsigned int HeapIndex, + const void* Address, + const unsigned __int64 ObjectSize, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCHeapStats_V2(void) { return 0; } +ULONG FireEtwGCHeapStats_V2( + const unsigned __int64 GenerationSize0, + const unsigned __int64 TotalPromotedSize0, + const unsigned __int64 GenerationSize1, + const unsigned __int64 TotalPromotedSize1, + const unsigned __int64 GenerationSize2, + const unsigned __int64 TotalPromotedSize2, + const unsigned __int64 GenerationSize3, + const unsigned __int64 TotalPromotedSize3, + const unsigned __int64 FinalizationPromotedSize, + const unsigned __int64 FinalizationPromotedCount, + const unsigned int PinnedObjectCount, + const unsigned int SinkBlockCount, + const unsigned int GCHandleCount, + const unsigned short ClrInstanceID, + const unsigned __int64 GenerationSize4, + const unsigned __int64 TotalPromotedSize4, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCSampledObjectAllocationHigh(void) { return 0; } +ULONG FireEtwGCSampledObjectAllocationHigh( + const void* Address, + const void* TypeID, + const unsigned int ObjectCountForTypeSample, + const unsigned __int64 TotalSizeForTypeSample, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCSampledObjectAllocationLow(void) { return 0; } +ULONG FireEtwGCSampledObjectAllocationLow( + const void* Address, + const void* TypeID, + const unsigned int ObjectCountForTypeSample, + const unsigned __int64 TotalSizeForTypeSample, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledPinObjectAtGCTime(void) { return 0; } +ULONG FireEtwPinObjectAtGCTime( + const void* HandleID, + const void* ObjectID, + const unsigned __int64 ObjectSize, + const WCHAR* TypeName, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCBulkRootStaticVar(void) { return 0; } +ULONG FireEtwGCBulkRootStaticVar( + const unsigned int Count, + const unsigned __int64 AppDomainID, + const unsigned short ClrInstanceID, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledIncreaseMemoryPressure(void) { return 0; } +ULONG FireEtwIncreaseMemoryPressure( + const unsigned __int64 BytesAllocated, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCGlobalHeapHistory_V4(void) { return 0; } +ULONG FireEtwGCGlobalHeapHistory_V4( + const unsigned __int64 FinalYoungestDesired, + const signed int NumHeaps, + const unsigned int CondemnedGeneration, + const unsigned int Gen0ReductionCount, + const unsigned int Reason, + const unsigned int GlobalMechanisms, + const unsigned short ClrInstanceID, + const unsigned int PauseMode, + const unsigned int MemoryPressure, + const unsigned int CondemnReasons0, + const unsigned int CondemnReasons1, + const unsigned int Count, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGenAwareBegin(void) { return 0; } +ULONG FireEtwGenAwareBegin( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGenAwareEnd(void) { return 0; } +ULONG FireEtwGenAwareEnd( + const unsigned int Count, + const unsigned short ClrInstanceID, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCLOHCompact(void) { return 0; } +ULONG FireEtwGCLOHCompact( + const unsigned short ClrInstanceID, + const unsigned short Count, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +BOOL EventEnabledGCFitBucketInfo(void) { return 0; } +ULONG FireEtwGCFitBucketInfo( + const unsigned short ClrInstanceID, + const unsigned short BucketKind, + const unsigned __int64 TotalSize, + const unsigned short Count, + int Values_ElementSize, + const void* Values, + const GUID * ActivityId = nullptr, + const GUID * RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +#ifdef FEATURE_ETW + +// ================================================================== +// Events currently only fired via ETW (private runtime provider) +// ================================================================== + +ULONG FireEtwGCSettings( + const unsigned __int64 SegmentSize, + const unsigned __int64 LargeObjectSegmentSize, + const BOOL ServerGC, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwPinPlugAtGCTime( + const void* PlugStart, + const void* PlugEnd, + const void* GapBeforeSize, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGCBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGC1stNonConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGC1stConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGC2ndNonConBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGC2ndNonConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGC2ndConBegin( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGC2ndConEnd( + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGCDrainMark( + const unsigned __int64 Objects, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGCRevisit( + const unsigned __int64 Pages, + const unsigned __int64 Objects, + const unsigned int IsLarge, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGCOverflow( + const unsigned __int64 Min, + const unsigned __int64 Max, + const unsigned __int64 Objects, + const unsigned int IsLarge, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGCAllocWaitBegin( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwBGCAllocWaitEnd( + const unsigned int Reason, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwGCFullNotify_V1( + const unsigned int GenNumber, + const unsigned int IsAlloc, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwPrvSetGCHandle( + const void* HandleID, + const void* ObjectID, + const unsigned int Kind, + const unsigned int Generation, + const unsigned __int64 AppDomainID, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +ULONG FireEtwPrvDestroyGCHandle( + const void* HandleID, + const unsigned short ClrInstanceID, + const GUID* ActivityId = nullptr, + const GUID* RelatedActivityId = nullptr +) +{ return ERROR_SUCCESS; } + +#endif // FEATURE_ETW \ No newline at end of file diff --git a/src/coreclr/nativeaot/Runtime/eventpipe/disableddotnetruntime.cpp b/src/coreclr/nativeaot/Runtime/eventpipe/disableddotnetruntime.cpp deleted file mode 100644 index eb0edc3..0000000 --- a/src/coreclr/nativeaot/Runtime/eventpipe/disableddotnetruntime.cpp +++ /dev/null @@ -1,639 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. - -/****************************************************************** - -DO NOT MODIFY. AUTOGENERATED FILE. -This file is generated using the logic from /src/scripts/genEventPipe.py - -******************************************************************/ - -#include -#include "eventpipeadapter.h" -#include "gcheaputilities.h" - -#ifndef ERROR_WRITE_FAULT -#define ERROR_WRITE_FAULT 29L -#endif - -ULONG EventPipeWriteEventDestroyGCHandle( - const void* HandleID, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId) -{ - return 0; -} - -ULONG EventPipeWriteEventExceptionThrown_V1( - const WCHAR* ExceptionType, - const WCHAR* ExceptionMessage, - const void* ExceptionEIP, - const unsigned int ExceptionHRESULT, - const unsigned short ExceptionFlags, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkEdge( - const unsigned int Index, - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkMovedObjectRanges( - const unsigned int Index, - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkNode( - const unsigned int Index, - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkRCW( - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkRootCCW( - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkRootConditionalWeakTableElementEdge( - const unsigned int Index, - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkRootEdge( - const unsigned int Index, - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCBulkSurvivingObjectRanges( - const unsigned int Index, - const unsigned int Count, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCCreateConcurrentThread_V1( - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCCreateSegment_V1( - const unsigned __int64 Address, - const unsigned __int64 Size, - const unsigned int Type, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCEnd_V1( - const unsigned int Count, - const unsigned int Depth, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCFreeSegment_V1( - const unsigned __int64 Address, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCGenerationRange( - const unsigned char Generation, - const void* RangeStart, - const unsigned __int64 RangeUsedLength, - const unsigned __int64 RangeReservedLength, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCHeapStats_V1( - const unsigned __int64 GenerationSize0, - const unsigned __int64 TotalPromotedSize0, - const unsigned __int64 GenerationSize1, - const unsigned __int64 TotalPromotedSize1, - const unsigned __int64 GenerationSize2, - const unsigned __int64 TotalPromotedSize2, - const unsigned __int64 GenerationSize3, - const unsigned __int64 TotalPromotedSize3, - const unsigned __int64 FinalizationPromotedSize, - const unsigned __int64 FinalizationPromotedCount, - const unsigned int PinnedObjectCount, - const unsigned int SinkBlockCount, - const unsigned int GCHandleCount, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCJoin_V2( - const unsigned int Heap, - const unsigned int JoinTime, - const unsigned int JoinType, - const unsigned short ClrInstanceID, - const unsigned int JoinID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCMarkFinalizeQueueRoots( - const unsigned int HeapNum, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCMarkHandles( - const unsigned int HeapNum, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCMarkOlderGenerationRoots( - const unsigned int HeapNum, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCMarkStackRoots( - const unsigned int HeapNum, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCMarkWithType( - const unsigned int HeapNum, - const unsigned short ClrInstanceID, - const unsigned int Type, - const unsigned __int64 Bytes, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCPerHeapHistory_V3( - const unsigned short ClrInstanceID, - const void* FreeListAllocated, - const void* FreeListRejected, - const void* EndOfSegAllocated, - const void* CondemnedAllocated, - const void* PinnedAllocated, - const void* PinnedAllocatedAdvance, - const unsigned int RunningFreeListEfficiency, - const unsigned int CondemnReasons0, - const unsigned int CondemnReasons1, - const unsigned int CompactMechanisms, - const unsigned int ExpandMechanisms, - const unsigned int HeapIndex, - const void* ExtraGen0Commit, - const unsigned int Count, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCTerminateConcurrentThread_V1( - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCTriggered( - const unsigned int Reason, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventModuleLoad_V2( - const unsigned __int64 ModuleID, - const unsigned __int64 AssemblyID, - const unsigned int ModuleFlags, - const unsigned int Reserved1, - const WCHAR* ModuleILPath, - const WCHAR* ModuleNativePath, - const unsigned short ClrInstanceID, - const GUID* ManagedPdbSignature, - const unsigned int ManagedPdbAge, - const WCHAR* ManagedPdbBuildPath, - const GUID* NativePdbSignature, - const unsigned int NativePdbAge, - const WCHAR* NativePdbBuildPath, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventSetGCHandle( - const void* HandleID, - const void* ObjectID, - const unsigned int Kind, - const unsigned int Generation, - const unsigned __int64 AppDomainID, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCStart_V2( - const unsigned int Count, - const unsigned int Depth, - const unsigned int Reason, - const unsigned int Type, - const unsigned short ClrInstanceID, - const unsigned __int64 ClientSequenceNumber, - const GUID * ActivityId, - const GUID * RelatedActivityId) -{ - return 0; -} - -ULONG EventPipeWriteEventGCSuspendEEBegin_V1( - const unsigned int Reason, - const unsigned int Count, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId) -{ - return 0; -} - -ULONG EventPipeWriteEventGCSuspendEEEnd_V1( - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId) -{ - return 0; -} - -ULONG EventPipeWriteEventGCRestartEEBegin_V1( - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId) -{ - return 0; -} - -ULONG EventPipeWriteEventGCRestartEEEnd_V1( - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId) -{ - return 0; -} - -ULONG EventPipeWriteEventDecreaseMemoryPressure( - const unsigned __int64 BytesFreed, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventFinalizeObject( - const void* TypeID, - const void* ObjectID, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -ULONG EventPipeWriteEventGCFinalizersBegin_V1( - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCFinalizersEnd_V1( - const unsigned int Count, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCAllocationTick_V4( - const unsigned int AllocationAmount, - const unsigned int AllocationKind, - const unsigned short ClrInstanceID, - const unsigned __int64 AllocationAmount64, - const void* TypeID, - const WCHAR* TypeName, - const unsigned int HeapIndex, - const void* Address, - const unsigned __int64 ObjectSize, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCHeapStats_V2( - const unsigned __int64 GenerationSize0, - const unsigned __int64 TotalPromotedSize0, - const unsigned __int64 GenerationSize1, - const unsigned __int64 TotalPromotedSize1, - const unsigned __int64 GenerationSize2, - const unsigned __int64 TotalPromotedSize2, - const unsigned __int64 GenerationSize3, - const unsigned __int64 TotalPromotedSize3, - const unsigned __int64 FinalizationPromotedSize, - const unsigned __int64 FinalizationPromotedCount, - const unsigned int PinnedObjectCount, - const unsigned int SinkBlockCount, - const unsigned int GCHandleCount, - const unsigned short ClrInstanceID, - const unsigned __int64 GenerationSize4, - const unsigned __int64 TotalPromotedSize4, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCSampledObjectAllocationHigh( - const void* Address, - const void* TypeID, - const unsigned int ObjectCountForTypeSample, - const unsigned __int64 TotalSizeForTypeSample, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCSampledObjectAllocationLow( - const void* Address, - const void* TypeID, - const unsigned int ObjectCountForTypeSample, - const unsigned __int64 TotalSizeForTypeSample, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventPinObjectAtGCTime( - const void* HandleID, - const void* ObjectID, - const unsigned __int64 ObjectSize, - const WCHAR* TypeName, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCBulkRootStaticVar( - const unsigned int Count, - const unsigned __int64 AppDomainID, - const unsigned short ClrInstanceID, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventIncreaseMemoryPressure( - const unsigned __int64 BytesAllocated, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCGlobalHeapHistory_V4( - const unsigned __int64 FinalYoungestDesired, - const signed int NumHeaps, - const unsigned int CondemnedGeneration, - const unsigned int Gen0ReductionCount, - const unsigned int Reason, - const unsigned int GlobalMechanisms, - const unsigned short ClrInstanceID, - const unsigned int PauseMode, - const unsigned int MemoryPressure, - const unsigned int CondemnReasons0, - const unsigned int CondemnReasons1, - const unsigned int Count, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGenAwareBegin( - const unsigned int Count, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGenAwareEnd( - const unsigned int Count, - const unsigned short ClrInstanceID, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCLOHCompact( - const unsigned short ClrInstanceID, - const unsigned short Count, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - - -ULONG EventPipeWriteEventGCFitBucketInfo( - const unsigned short ClrInstanceID, - const unsigned short BucketKind, - const unsigned __int64 TotalSize, - const unsigned short Count, - int Values_ElementSize, - const void* Values, - const GUID * ActivityId, - const GUID * RelatedActivityId -) -{ - return 0; -} - -bool DotNETRuntimeProvider_IsEnabled(unsigned char level, unsigned long long keyword) -{ - return false; -} diff --git a/src/coreclr/nativeaot/Runtime/eventpipe/dotnetruntime.cpp b/src/coreclr/nativeaot/Runtime/eventpipe/dotnetruntime.cpp index 1f6c1b4..65310ae 100644 --- a/src/coreclr/nativeaot/Runtime/eventpipe/dotnetruntime.cpp +++ b/src/coreclr/nativeaot/Runtime/eventpipe/dotnetruntime.cpp @@ -9,17 +9,6 @@ #include "eventpipeadapter.h" #include "gcheaputilities.h" -#ifndef _INC_WINDOWS - typedef void* LPVOID; - typedef uint32_t UINT; - typedef void* PVOID; - typedef uint64_t ULONGLONG; - typedef uint32_t ULONG; - typedef int64_t LONGLONG; - typedef uint8_t BYTE; - typedef uint16_t UINT16; -#endif // _INC_WINDOWS - #ifndef ERROR_WRITE_FAULT #define ERROR_WRITE_FAULT 29L #endif diff --git a/src/coreclr/nativeaot/Runtime/eventtrace.cpp b/src/coreclr/nativeaot/Runtime/eventtrace.cpp index 4eb9c4e..275111b 100644 --- a/src/coreclr/nativeaot/Runtime/eventtrace.cpp +++ b/src/coreclr/nativeaot/Runtime/eventtrace.cpp @@ -13,6 +13,8 @@ #include "daccess.h" +#include "eventtrace_etw.h" + #include "thread.h" #include "threadstore.h" #include "threadstore.inl" @@ -50,3 +52,65 @@ void ETW::GCLog::FireGcStart(ETW_GC_INFO* pGcInfo) FireEtwGCStart_V2(pGcInfo->GCStart.Count, pGcInfo->GCStart.Depth, pGcInfo->GCStart.Reason, pGcInfo->GCStart.Type, GetClrInstanceId(), l64ClientSequenceNumberToLog); } } + +void EventTracing_Initialize() +{ +#ifdef FEATURE_ETW + MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled = FALSE; + MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context.IsEnabled = FALSE; + + // Register the Redhawk event provider with the system. + RH_ETW_REGISTER_Microsoft_Windows_Redhawk_GC_Private(); + RH_ETW_REGISTER_Microsoft_Windows_Redhawk_GC_Public(); + + MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.RegistrationHandle = Microsoft_Windows_Redhawk_GC_PrivateHandle; + MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context.RegistrationHandle = Microsoft_Windows_Redhawk_GC_PublicHandle; +#endif // FEATURE_ETW +} + +#ifdef FEATURE_ETW +// +// ----------------------------------------------------------------------------------------------------------- +// +// The automatically generated part of the Redhawk ETW infrastructure (EtwEvents.h) calls the following +// function whenever the system enables or disables tracing for this provider. +// + +uint32_t EtwCallback(uint32_t IsEnabled, RH_ETW_CONTEXT * pContext) +{ + GCHeapUtilities::RecordEventStateChange(!!(pContext->RegistrationHandle == Microsoft_Windows_Redhawk_GC_PublicHandle), + static_cast(pContext->MatchAnyKeyword), + static_cast(pContext->Level)); + + if (IsEnabled && + (pContext->RegistrationHandle == Microsoft_Windows_Redhawk_GC_PrivateHandle) && + GCHeapUtilities::IsGCHeapInitialized()) + { + FireEtwGCSettings(GCHeapUtilities::GetGCHeap()->GetValidSegmentSize(FALSE), + GCHeapUtilities::GetGCHeap()->GetValidSegmentSize(TRUE), + GCHeapUtilities::IsServerHeap()); + GCHeapUtilities::GetGCHeap()->DiagTraceGCSegments(); + } + + // Special check for the runtime provider's ManagedHeapCollectKeyword. Profilers + // flick this to force a full GC. + if (IsEnabled && + (pContext->RegistrationHandle == Microsoft_Windows_Redhawk_GC_PublicHandle) && + GCHeapUtilities::IsGCHeapInitialized() && + ((pContext->MatchAnyKeyword & CLR_MANAGEDHEAPCOLLECT_KEYWORD) != 0)) + { + // Profilers may (optionally) specify extra data in the filter parameter + // to log with the GCStart event. + LONGLONG l64ClientSequenceNumber = 0; + if ((pContext->FilterData != NULL) && + (pContext->FilterData->Type == 1) && + (pContext->FilterData->Size == sizeof(l64ClientSequenceNumber))) + { + l64ClientSequenceNumber = *(LONGLONG *) (pContext->FilterData->Ptr); + } + ETW::GCLog::ForceGC(l64ClientSequenceNumber); + } + + return 0; +} +#endif // FEATURE_ETW \ No newline at end of file diff --git a/src/coreclr/nativeaot/Runtime/eventtrace.h b/src/coreclr/nativeaot/Runtime/eventtrace.h index 65118de..3a2fd81 100644 --- a/src/coreclr/nativeaot/Runtime/eventtrace.h +++ b/src/coreclr/nativeaot/Runtime/eventtrace.h @@ -27,8 +27,10 @@ #ifndef _VMEVENTTRACE_H_ #define _VMEVENTTRACE_H_ +#include #include "eventtracebase.h" -#include "gcinterface.h" +#include +#include #ifdef FEATURE_EVENT_TRACE struct ProfilingScanContext : ScanContext @@ -37,7 +39,14 @@ struct ProfilingScanContext : ScanContext void * pvEtwContext; void *pHeapId; - ProfilingScanContext(BOOL fProfilerPinnedParam); + ProfilingScanContext(BOOL fProfilerPinnedParam) + : ScanContext() + { + pHeapId = NULL; + fProfilerPinned = fProfilerPinnedParam; + pvEtwContext = NULL; + promotion = true; + } }; #endif // defined(FEATURE_EVENT_TRACE) @@ -185,6 +194,7 @@ namespace ETW static void MovedReference(BYTE * pbMemBlockStart, BYTE * pbMemBlockEnd, ptrdiff_t cbRelocDistance, size_t profilingContext, BOOL fCompacting, BOOL fAllowProfApiNotification = TRUE); static void EndMovedReferences(size_t profilingContext, BOOL fAllowProfApiNotification = TRUE); static void WalkStaticsAndCOMForETW(); + static void WalkHeap(); }; }; @@ -210,6 +220,7 @@ inline void ETW::GCLog::RootReference( ProfilingScanContext * profilingScanContext, DWORD dwGCFlags, DWORD rootFlags) { } +inline void ETW::GCLog::WalkHeap() { } #endif #endif //_VMEVENTTRACE_H_ diff --git a/src/coreclr/nativeaot/Runtime/eventtrace_etw.h b/src/coreclr/nativeaot/Runtime/eventtrace_etw.h index 9dd7e2c..72734d3 100644 --- a/src/coreclr/nativeaot/Runtime/eventtrace_etw.h +++ b/src/coreclr/nativeaot/Runtime/eventtrace_etw.h @@ -10,6 +10,8 @@ #ifdef FEATURE_ETW +#include "EtwEvents.h" + // Map the CLR private provider to our version so we can avoid inserting more #ifdef's in the code. #define MICROSOFT_WINDOWS_DOTNETRUNTIME_PRIVATE_PROVIDER_Context MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context #define MICROSOFT_WINDOWS_DOTNETRUNTIME_PROVIDER_Context MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context diff --git a/src/coreclr/nativeaot/Runtime/eventtrace_gcheap.cpp b/src/coreclr/nativeaot/Runtime/eventtrace_gcheap.cpp index f01f7b0..c976636 100644 --- a/src/coreclr/nativeaot/Runtime/eventtrace_gcheap.cpp +++ b/src/coreclr/nativeaot/Runtime/eventtrace_gcheap.cpp @@ -20,7 +20,9 @@ #include "threadstore.h" #include "threadstore.inl" +#include "eventtrace_etw.h" #include "eventtracepriv.h" +#include "profheapwalkhelper.h" /****************************************************************************/ /* Methods that are called from the runtime */ @@ -963,3 +965,131 @@ void ETW::GCLog::EndHeapDump(ProfilerWalkHeapContext* profilerWalkHeapContext) profilerWalkHeapContext->pvEtwContext = NULL; delete pContext; } + +namespace +{ + void ProfScanRootsHelper(Object** ppObject, ScanContext* pSC, uint32_t dwFlags) + { + Object* pObj = *ppObject; + if (dwFlags& GC_CALL_INTERIOR) + { + pObj = GCHeapUtilities::GetGCHeap()->GetContainingObject(pObj, true); + if (pObj == nullptr) + return; + } + ScanRootsHelper(pObj, ppObject, pSC, dwFlags); + } + + void GcScanRootsForETW(promote_func* fn, int condemned, int max_gen, ScanContext* sc) + { + UNREFERENCED_PARAMETER(condemned); + UNREFERENCED_PARAMETER(max_gen); + + FOREACH_THREAD(pThread) + { + if (pThread->IsGCSpecial()) + continue; + + if (GCHeapUtilities::GetGCHeap()->IsThreadUsingAllocationContextHeap(pThread->GetAllocContext(), sc->thread_number)) + continue; + + sc->thread_under_crawl = pThread; + sc->dwEtwRootKind = kEtwGCRootKindStack; + pThread->GcScanRoots(reinterpret_cast(fn), sc); + sc->dwEtwRootKind = kEtwGCRootKindOther; + } + END_FOREACH_THREAD + } + + void ScanHandleForETW(Object** pRef, Object* pSec, uint32_t flags, ScanContext* context, bool isDependent) + { + ProfilingScanContext* pSC = (ProfilingScanContext*)context; + + // Notify ETW of the handle + if (ETW::GCLog::ShouldWalkHeapRootsForEtw()) + { + ETW::GCLog::RootReference( + pRef, + *pRef, // object being rooted + pSec, // pSecondaryNodeForDependentHandle + isDependent, + pSC, + 0, // dwGCFlags, + flags); // ETW handle flags + } + } + + // This is called only if we've determined that either: + // a) The Profiling API wants to do a walk of the heap, and it has pinned the + // profiler in place (so it cannot be detached), and it's thus safe to call into the + // profiler, OR + // b) ETW infrastructure wants to do a walk of the heap either to log roots, + // objects, or both. + // This can also be called to do a single walk for BOTH a) and b) simultaneously. Since + // ETW can ask for roots, but not objects + void GCProfileWalkHeapWorker(BOOL fShouldWalkHeapRootsForEtw, BOOL fShouldWalkHeapObjectsForEtw) + { + ProfilingScanContext SC(FALSE); + unsigned max_generation = GCHeapUtilities::GetGCHeap()->GetMaxGeneration(); + + // **** Scan roots: Only scan roots if profiling API wants them or ETW wants them. + if (fShouldWalkHeapRootsForEtw) + { + GcScanRootsForETW(&ProfScanRootsHelper, max_generation, max_generation, &SC); + SC.dwEtwRootKind = kEtwGCRootKindFinalizer; + GCHeapUtilities::GetGCHeap()->DiagScanFinalizeQueue(&ProfScanRootsHelper, &SC); + + // Handles are kept independent of wks/svr/concurrent builds + SC.dwEtwRootKind = kEtwGCRootKindHandle; + GCHeapUtilities::GetGCHeap()->DiagScanHandles(&ScanHandleForETW, max_generation, &SC); + } + + // **** Scan dependent handles: only if ETW wants roots + if (fShouldWalkHeapRootsForEtw) + { + // GcScanDependentHandlesForProfiler double-checks + // CORProfilerTrackConditionalWeakTableElements() before calling into the profiler + + ProfilingScanContext* pSC = ≻ + + // we'll re-use pHeapId (which was either unused (0) or freed by EndRootReferences2 + // (-1)), so reset it to NULL + _ASSERTE((*((size_t *)(&pSC->pHeapId)) == (size_t)(-1)) || + (*((size_t *)(&pSC->pHeapId)) == (size_t)(0))); + pSC->pHeapId = NULL; + + GCHeapUtilities::GetGCHeap()->DiagScanDependentHandles(&ScanHandleForETW, max_generation, &SC); + } + + ProfilerWalkHeapContext profilerWalkHeapContext(FALSE, SC.pvEtwContext); + + // **** Walk objects on heap: only if ETW wants them. + if (fShouldWalkHeapObjectsForEtw) + { + GCHeapUtilities::GetGCHeap()->DiagWalkHeap(&HeapWalkHelper, &profilerWalkHeapContext, max_generation, true /* walk the large object heap */); + } + + // **** Done! Indicate to ETW helpers that the heap walk is done, so any buffers + // should be flushed into the ETW stream + if (fShouldWalkHeapObjectsForEtw || fShouldWalkHeapRootsForEtw) + { + ETW::GCLog::EndHeapDump(&profilerWalkHeapContext); + } + } +} + +void ETW::GCLog::WalkHeap() +{ + if (ETW::GCLog::ShouldWalkStaticsAndCOMForEtw()) + ETW::GCLog::WalkStaticsAndCOMForETW(); + + BOOL fShouldWalkHeapRootsForEtw = ETW::GCLog::ShouldWalkHeapRootsForEtw(); + BOOL fShouldWalkHeapObjectsForEtw = ETW::GCLog::ShouldWalkHeapObjectsForEtw(); + + // we need to walk the heap if one of GC_PROFILING or FEATURE_EVENT_TRACE + // is defined, since both of them make use of the walk heap worker. + if (fShouldWalkHeapRootsForEtw || fShouldWalkHeapObjectsForEtw) + { + GCProfileWalkHeapWorker(fShouldWalkHeapRootsForEtw, fShouldWalkHeapObjectsForEtw); + } +} \ No newline at end of file diff --git a/src/coreclr/nativeaot/Runtime/gcenv.h b/src/coreclr/nativeaot/Runtime/gcenv.h index 3caed96..ad01f7f 100644 --- a/src/coreclr/nativeaot/Runtime/gcenv.h +++ b/src/coreclr/nativeaot/Runtime/gcenv.h @@ -44,20 +44,9 @@ #include "stressLog.h" #ifdef FEATURE_EVENT_TRACE - #ifndef _INC_WINDOWS - typedef void* LPVOID; - typedef uint32_t UINT; - typedef void* PVOID; - typedef uint64_t ULONGLONG; - typedef uint32_t ULONG; - typedef int64_t LONGLONG; - typedef uint8_t BYTE; - typedef uint16_t UINT16; - #endif // _INC_WINDOWS #include "clretwallmain.h" #include "eventtrace.h" - #include "eventtrace_etw.h" #else // FEATURE_EVENT_TRACE diff --git a/src/coreclr/nativeaot/Runtime/gcrhenv.cpp b/src/coreclr/nativeaot/Runtime/gcrhenv.cpp index 12158aa..5c5e20e 100644 --- a/src/coreclr/nativeaot/Runtime/gcrhenv.cpp +++ b/src/coreclr/nativeaot/Runtime/gcrhenv.cpp @@ -12,7 +12,6 @@ #include "gcenv.h" #include "gcheaputilities.h" #include "gchandleutilities.h" -#include "profheapwalkhelper.h" #include "gcenv.ee.h" @@ -63,53 +62,6 @@ void RhEnableFinalization(); static RhConfig g_sRhConfig; RhConfig * g_pRhConfig = &g_sRhConfig; -#ifdef FEATURE_ETW -// -// ----------------------------------------------------------------------------------------------------------- -// -// The automatically generated part of the Redhawk ETW infrastructure (EtwEvents.h) calls the following -// function whenever the system enables or disables tracing for this provider. -// - -uint32_t EtwCallback(uint32_t IsEnabled, RH_ETW_CONTEXT * pContext) -{ - GCHeapUtilities::RecordEventStateChange(!!(pContext->RegistrationHandle == Microsoft_Windows_Redhawk_GC_PublicHandle), - static_cast(pContext->MatchAnyKeyword), - static_cast(pContext->Level)); - - if (IsEnabled && - (pContext->RegistrationHandle == Microsoft_Windows_Redhawk_GC_PrivateHandle) && - GCHeapUtilities::IsGCHeapInitialized()) - { - FireEtwGCSettings(GCHeapUtilities::GetGCHeap()->GetValidSegmentSize(FALSE), - GCHeapUtilities::GetGCHeap()->GetValidSegmentSize(TRUE), - GCHeapUtilities::IsServerHeap()); - GCHeapUtilities::GetGCHeap()->DiagTraceGCSegments(); - } - - // Special check for the runtime provider's ManagedHeapCollectKeyword. Profilers - // flick this to force a full GC. - if (IsEnabled && - (pContext->RegistrationHandle == Microsoft_Windows_Redhawk_GC_PublicHandle) && - GCHeapUtilities::IsGCHeapInitialized() && - ((pContext->MatchAnyKeyword & CLR_MANAGEDHEAPCOLLECT_KEYWORD) != 0)) - { - // Profilers may (optionally) specify extra data in the filter parameter - // to log with the GCStart event. - LONGLONG l64ClientSequenceNumber = 0; - if ((pContext->FilterData != NULL) && - (pContext->FilterData->Type == 1) && - (pContext->FilterData->Size == sizeof(l64ClientSequenceNumber))) - { - l64ClientSequenceNumber = *(LONGLONG *) (pContext->FilterData->Ptr); - } - ETW::GCLog::ForceGC(l64ClientSequenceNumber); - } - - return 0; -} -#endif // FEATURE_ETW - // // ----------------------------------------------------------------------------------------------------------- // @@ -132,18 +84,6 @@ MethodTable g_FreeObjectEEType; // static bool RedhawkGCInterface::InitializeSubsystems() { -#ifdef FEATURE_ETW - MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.IsEnabled = FALSE; - MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context.IsEnabled = FALSE; - - // Register the Redhawk event provider with the system. - RH_ETW_REGISTER_Microsoft_Windows_Redhawk_GC_Private(); - RH_ETW_REGISTER_Microsoft_Windows_Redhawk_GC_Public(); - - MICROSOFT_WINDOWS_NATIVEAOT_GC_PRIVATE_PROVIDER_Context.RegistrationHandle = Microsoft_Windows_Redhawk_GC_PrivateHandle; - MICROSOFT_WINDOWS_NATIVEAOT_GC_PUBLIC_PROVIDER_Context.RegistrationHandle = Microsoft_Windows_Redhawk_GC_PublicHandle; -#endif // FEATURE_ETW - // Initialize the special MethodTable used to mark free list entries in the GC heap. g_FreeObjectEEType.InitializeAsGcFreeType(); g_pFreeObjectEEType = &g_FreeObjectEEType; @@ -789,144 +729,6 @@ Thread* GCToEEInterface::GetThread() #ifndef DACCESS_COMPILE -#ifdef FEATURE_EVENT_TRACE -void ProfScanRootsHelper(Object** ppObject, ScanContext* pSC, uint32_t dwFlags) -{ - Object* pObj = *ppObject; - if (dwFlags& GC_CALL_INTERIOR) - { - pObj = GCHeapUtilities::GetGCHeap()->GetContainingObject(pObj, true); - if (pObj == nullptr) - return; - } - ScanRootsHelper(pObj, ppObject, pSC, dwFlags); -} - -void GcScanRootsForETW(promote_func* fn, int condemned, int max_gen, ScanContext* sc) -{ - UNREFERENCED_PARAMETER(condemned); - UNREFERENCED_PARAMETER(max_gen); - - FOREACH_THREAD(pThread) - { - if (pThread->IsGCSpecial()) - continue; - - if (GCHeapUtilities::GetGCHeap()->IsThreadUsingAllocationContextHeap(pThread->GetAllocContext(), sc->thread_number)) - continue; - - sc->thread_under_crawl = pThread; - sc->dwEtwRootKind = kEtwGCRootKindStack; - pThread->GcScanRoots(reinterpret_cast(fn), sc); - sc->dwEtwRootKind = kEtwGCRootKindOther; - } - END_FOREACH_THREAD -} - -void ScanHandleForETW(Object** pRef, Object* pSec, uint32_t flags, ScanContext* context, bool isDependent) -{ - ProfilingScanContext* pSC = (ProfilingScanContext*)context; - - // Notify ETW of the handle - if (ETW::GCLog::ShouldWalkHeapRootsForEtw()) - { - ETW::GCLog::RootReference( - pRef, - *pRef, // object being rooted - pSec, // pSecondaryNodeForDependentHandle - isDependent, - pSC, - 0, // dwGCFlags, - flags); // ETW handle flags - } -} - -// This is called only if we've determined that either: -// a) The Profiling API wants to do a walk of the heap, and it has pinned the -// profiler in place (so it cannot be detached), and it's thus safe to call into the -// profiler, OR -// b) ETW infrastructure wants to do a walk of the heap either to log roots, -// objects, or both. -// This can also be called to do a single walk for BOTH a) and b) simultaneously. Since -// ETW can ask for roots, but not objects -void GCProfileWalkHeapWorker(BOOL fShouldWalkHeapRootsForEtw, BOOL fShouldWalkHeapObjectsForEtw) -{ - ProfilingScanContext SC(FALSE); - unsigned max_generation = GCHeapUtilities::GetGCHeap()->GetMaxGeneration(); - - // **** Scan roots: Only scan roots if profiling API wants them or ETW wants them. - if (fShouldWalkHeapRootsForEtw) - { - GcScanRootsForETW(&ProfScanRootsHelper, max_generation, max_generation, &SC); - SC.dwEtwRootKind = kEtwGCRootKindFinalizer; - GCHeapUtilities::GetGCHeap()->DiagScanFinalizeQueue(&ProfScanRootsHelper, &SC); - - // Handles are kept independent of wks/svr/concurrent builds - SC.dwEtwRootKind = kEtwGCRootKindHandle; - GCHeapUtilities::GetGCHeap()->DiagScanHandles(&ScanHandleForETW, max_generation, &SC); - } - - // **** Scan dependent handles: only if ETW wants roots - if (fShouldWalkHeapRootsForEtw) - { - // GcScanDependentHandlesForProfiler double-checks - // CORProfilerTrackConditionalWeakTableElements() before calling into the profiler - - ProfilingScanContext* pSC = ≻ - - // we'll re-use pHeapId (which was either unused (0) or freed by EndRootReferences2 - // (-1)), so reset it to NULL - _ASSERTE((*((size_t *)(&pSC->pHeapId)) == (size_t)(-1)) || - (*((size_t *)(&pSC->pHeapId)) == (size_t)(0))); - pSC->pHeapId = NULL; - - GCHeapUtilities::GetGCHeap()->DiagScanDependentHandles(&ScanHandleForETW, max_generation, &SC); - } - - ProfilerWalkHeapContext profilerWalkHeapContext(FALSE, SC.pvEtwContext); - - // **** Walk objects on heap: only if ETW wants them. - if (fShouldWalkHeapObjectsForEtw) - { - GCHeapUtilities::GetGCHeap()->DiagWalkHeap(&HeapWalkHelper, &profilerWalkHeapContext, max_generation, true /* walk the large object heap */); - } - - #ifdef FEATURE_EVENT_TRACE - // **** Done! Indicate to ETW helpers that the heap walk is done, so any buffers - // should be flushed into the ETW stream - if (fShouldWalkHeapObjectsForEtw || fShouldWalkHeapRootsForEtw) - { - ETW::GCLog::EndHeapDump(&profilerWalkHeapContext); - } -#endif // FEATURE_EVENT_TRACE -} -#endif // defined(FEATURE_EVENT_TRACE) - -void GCProfileWalkHeap() -{ - -#ifdef FEATURE_EVENT_TRACE - if (ETW::GCLog::ShouldWalkStaticsAndCOMForEtw()) - ETW::GCLog::WalkStaticsAndCOMForETW(); - - BOOL fShouldWalkHeapRootsForEtw = ETW::GCLog::ShouldWalkHeapRootsForEtw(); - BOOL fShouldWalkHeapObjectsForEtw = ETW::GCLog::ShouldWalkHeapObjectsForEtw(); -#else // !FEATURE_EVENT_TRACE - BOOL fShouldWalkHeapRootsForEtw = FALSE; - BOOL fShouldWalkHeapObjectsForEtw = FALSE; -#endif // FEATURE_EVENT_TRACE - -#ifdef FEATURE_EVENT_TRACE - // we need to walk the heap if one of GC_PROFILING or FEATURE_EVENT_TRACE - // is defined, since both of them make use of the walk heap worker. - if (fShouldWalkHeapRootsForEtw || fShouldWalkHeapObjectsForEtw) - { - GCProfileWalkHeapWorker(fShouldWalkHeapRootsForEtw, fShouldWalkHeapObjectsForEtw); - } -#endif // defined(FEATURE_EVENT_TRACE) -} - - void GCToEEInterface::DiagGCStart(int gen, bool isInduced) { UNREFERENCED_PARAMETER(gen); @@ -950,7 +752,7 @@ void GCToEEInterface::DiagGCEnd(size_t index, int gen, int reason, bool fConcurr if (!fConcurrent) { - GCProfileWalkHeap(); + ETW::GCLog::WalkHeap(); } } @@ -1448,14 +1250,3 @@ bool __SwitchToThread(uint32_t dwSleepMSec, uint32_t /*dwSwitchCount*/) void LogSpewAlways(const char * /*fmt*/, ...) { } - -#if defined(FEATURE_EVENT_TRACE) && !defined(DACCESS_COMPILE) -ProfilingScanContext::ProfilingScanContext(BOOL fProfilerPinnedParam) - : ScanContext() -{ - pHeapId = NULL; - fProfilerPinned = fProfilerPinnedParam; - pvEtwContext = NULL; - promotion = true; -} -#endif // defined(FEATURE_EVENT_TRACE) && !defined(DACCESS_COMPILE) diff --git a/src/coreclr/nativeaot/Runtime/inc/CommonTypes.h b/src/coreclr/nativeaot/Runtime/inc/CommonTypes.h index 6e1be74..0ad3a13 100644 --- a/src/coreclr/nativeaot/Runtime/inc/CommonTypes.h +++ b/src/coreclr/nativeaot/Runtime/inc/CommonTypes.h @@ -38,4 +38,22 @@ typedef uint32_t UInt32_BOOL; // windows 4-byte BOOL, 0 -> false, #define UInt32_FALSE 0 #define UInt32_TRUE 1 +#if defined(FEATURE_EVENT_TRACE) && !defined(_INC_WINDOWS) +typedef int BOOL; +typedef void* LPVOID; +typedef uint32_t UINT; +typedef void* PVOID; +typedef uint64_t ULONGLONG; +typedef uint32_t ULONG; +typedef int64_t LONGLONG; +typedef uint8_t BYTE; +typedef uint16_t UINT16; +typedef struct _GUID { + uint32_t Data1; + uint16_t Data2; + uint16_t Data3; + uint8_t Data4[8]; +} GUID; +#endif // FEATURE_EVENT_TRACE && !_INC_WINDOWS + #endif // __COMMON_TYPES_H__ diff --git a/src/coreclr/nativeaot/Runtime/startup.cpp b/src/coreclr/nativeaot/Runtime/startup.cpp index 5874015..d388030 100644 --- a/src/coreclr/nativeaot/Runtime/startup.cpp +++ b/src/coreclr/nativeaot/Runtime/startup.cpp @@ -107,6 +107,9 @@ static bool InitDLL(HANDLE hPalInstance) DiagnosticServerAdapter_Initialize(); DiagnosticServerAdapter_PauseForDiagnosticsMonitor(); #endif +#ifdef FEATURE_EVENT_TRACE + EventTracing_Initialize(); +#endif // // Initialize support for registering GC and HandleTable callouts. -- 2.7.4