Skip to content

Add typed schema for AllocationSampled (EventID 303, .NET 10+) in ClrTraceEventParser - #2388

Merged
Brian Robbins (brianrob) merged 4 commits into
mainfrom
copilot/add-typed-schema-for-event-303
Mar 20, 2026
Merged

Brian Robbins (brianrob) merged 4 commits into
mainfrom
copilot/add-typed-schema-for-event-303

Conversation

Copilot AI commented Mar 19, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #2385.

AllocationSampled (EventID 303), added in .NET 10 via dotnet/runtime#104955, had no entry in ClrTraceEventParser. Because CLR runtime events carry no embedded manifest in EventPipe .nettrace files, the Dynamic parser cannot synthesise a schema — all PayloadByName/PayloadValue calls silently return null or a sentinel exception string, and source.Clr.All never fires for this event.

Schema definition (from ClrEtwAll.man)

Task AllocationSampling (value=40, GUID {CC82530E-A21C-4EB0-A68A-FA4F7E66498F}), EventID 303, opcode 0 (Info), keyword AllocationSamplingKeyword = 0x80000000000.

Field Type
AllocationKind win:UInt32 (0=SOH, 1=LOH, 2=POH)
ClrInstanceID win:UInt16
TypeID win:Pointer
TypeName win:UnicodeString
Address win:Pointer
ObjectSize win:UInt64
SampledByteOffset win:UInt64

Changes

  • ClrTraceEventParser.Keywords — added AllocationSampling = 0x80000000000
  • ClrTraceEventParser — added public event Action AllocationSampling (EventID 303, Task 40, Opcode 0). The property is named AllocationSampling rather than AllocationSampled because opcode=0 (Info) collapses EventName to just the task name, which must match the internal template/event validator
  • AllocationSampledTraceData — new sealed class with all 7 typed payload accessors, PayloadNames, PayloadValue, ToXml, Validate, and GetKeywords. Pointer-relative offsets use the HostOffset(10, 1) convention (10 = 6 fixed bytes + 4-byte minimum for TypeID pointer; HostOffset adds the remaining 4 bytes on 64-bit traces)
  • EnumerateTemplates — array size 147→148, new entry wired in
  • ClrTraceEventParser.cs.base — mirrored all changes

After this change:

source.Clr.AllocationSampled += data =>
{
    // All fields now decode correctly
    Console.WriteLine(data.TypeName);           // e.g. "System.String"
    Console.WriteLine(data.ObjectSize);         // e.g. 104
    Console.WriteLine(data.AllocationKind);     // GCAllocationKind.Small
    Console.WriteLine(data.PayloadValue(0));    // GCAllocationKind.Small (no exception sentinel)
};

Test

Added AllocationSampledEventRoutesAndDecodesPayload in EventPipeParsing.cs: builds a minimal in-memory V6 nettrace containing one AllocationSampled event with a known binary payload and asserts the event dispatches through source.Clr.AllocationSampling, all 7 typed accessors decode correctly, and PayloadByName/PayloadValue round-trip cleanly.

Original prompt

This section details on the original issue you should resolve

AllocationSampled (EventID 303, .NET 10+) has no typed schema in ClrTraceEventParser
## Problem

AllocationSampled (EventID 303) was added to the CLR in .NET 10 via dotnet/runtime#104955. ClrTraceEventParser.cs.base has no entry for it — EventID 303 is entirely absent from the parser, which currently covers events up to approximately EventID 190.

Because CLR runtime events do not embed ETW manifest blocks in EventPipe .nettrace files (unlike EventSource events), the Dynamic parser cannot synthesise a schema at runtime. All field accessors fail — and critically, PayloadValue fails silently: it neither throws nor returns null but returns an opaque sentinel string, making it impossible to distinguish a missing schema from a valid value:

source.Dynamic.All += data =>
{
    if (data.ProviderName != "Microsoft-Windows-DotNETRuntime") return;
    if ((int)data.ID != 303) return;

    // All of these yield nothing useful:
    Console.WriteLine(data.PayloadNames?.Length);     // 0  ← empty array, no fields
    Console.WriteLine(data.PayloadByName("TypeName")); // null
    Console.WriteLine(data.PayloadByName("ObjectSize")); // null
    Console.WriteLine(data.PayloadValue(0));           // "<<>>"
};

source.Clr.All never fires for EventID 303 — the event is not routed through ClrTraceEventParser at all.

The event carries the following payload fields (from ClrEtwAll.man):

# Field Type
0 AllocationKind win:UInt32 (0=SOH, 1=LOH, 2=POH)
1 ClrInstanceID win:UInt16
2 TypeID win:Pointer
3 TypeName win:UnicodeString
4 Address win:Pointer
5 ObjectSize win:UInt64
6 SampledByteOffset win:UInt64

Expected behaviour

ClrTraceEventParser should expose a typed event handler (e.g. Clr.AllocationSampled) backed by an AllocationSampledTraceData class, analogous to GCAllocationTickTraceData (EventID 10). PayloadNames should return ["AllocationKind", "ClrInstanceID", "TypeID", "TypeName", "Address", "ObjectSize", "SampledByteOffset"] and all PayloadByName/PayloadValue calls should return correctly typed values.


Actual behaviour

PayloadNames returns an empty string[] (length 0, not null). PayloadByName(...) returns null. PayloadValue(0) returns the sentinel string <<>> — TraceEvent catches the internal IndexOutOfRangeException and surfaces it as a string rather than rethrowing. The only way to extract any data is raw byte parsing via TraceEvent.EventData() using the binary layout reverse-engineered from the dotnet/runtime reference consumer.


Workaround

Parse the raw payload from data.EventData() using the known binary layout. Pointer size is read from data.PointerSize.

AllocationKind(4) + ClrInstanceID(2) + TypeID(ptr) + TypeName(UTF-16LE+\0\0)
    + Address(ptr) + ObjectSize(8) + SampledByteOffset(8)

Full implementation: TryParseAllocationSampled in the repro project.


Environment

Microsoft.Diagnostics.Tracing.TraceEvent 3.1.30 (latest)
.NET runtime 10.0+ — event is never emitted on .NET 9 or earlier
Provider Microsoft-Windows-DotNETRuntime
Keyword AllocationSamplingKeyword = 0x80000000000

Repro

Self-contained .NET 10 console project: https://github.com/baal2000/AllocationSampledRepro

git clone https://github.com/baal2000/AllocationSampledRepro
cd AllocationSampledRepro
dotnet run

The project instruments itself via DiagnosticsClient with AllocationSamplingKeyword, allocates 200 000 objects to guarantee sampled events, then parses the resulting trace twice — once via the native TraceEvent API (broken), once via EventData() raw bytes (workaround).

Actual console output

CI-verified on GitHub-hosted ubuntu-latest, .NET 10.0.5, TraceEvent 3.1.30 — job log:

══ Native TraceEvent API (broken) ═════════════════════════════════════
  PayloadNames:                
  PayloadByName("TypeName"):   
  PayloadByName("ObjectSize"): 
  PayloadValue(0):             <<>>
  source.Clr.All hits for EventID 303:  0  (0 = not routed through ClrTraceEventParser)
  source.Dynamic.All hits for EventID 303: 88

══ Raw EventData() workaround (works) ══════════════════════════════════
  [1] TypeName=InvokeFunc_RefArgs  ObjectSize=64 bytes
  [2] TypeName=System.Reflectio...

> **Custom agent used: Issue Triager** > Investigates, reproduces, and fixes issues in PerfView and TraceEvent. - Fixes microsoft/perfview#2385 --- ✨ Let Copilot coding agent [set things up for you](https://github.com/microsoft/perfview/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

…TraceEventParser

Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com>
Copilot AI changed the title [WIP] Add typed schema for AllocationSampled EventID 303 Add typed schema for AllocationSampled (EventID 303, .NET 10+) in ClrTraceEventParser Mar 19, 2026

@brianrob Brian Robbins (brianrob) left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot, please address these comments.


// Also subscribe to Dynamic.All to confirm the event does fire (it might
// still appear in the Dynamic stream as a fallback, that is acceptable)
source.Dynamic.All += data =>

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove the dynamic test and dynamicHandlerHits.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 7569f1a — removed the Dynamic.All subscription and dynamicHandlerHits variable.

GCSampledObjectAllocationLow = 0x2000000,
PerfTrack = 0x20000000,
Stack = 0x40000000,
AllocationSampling = 0x80000000000,

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Undo the changes in this file.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 7569f1a — reverted ClrTraceEventParser.cs.base to its pre-PR state.

WaitHandle = 0x40000000000,

///
/// Events for randomized allocation sampling (AllocationSampled, EventID 303). Requires .NET 10+.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// Events for randomized allocation sampling (AllocationSampled, EventID 303). Requires .NET 10+.
/// Events for randomized allocation sampling.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 7569f1a.

}

///
/// Data for the AllocationSampled event (EventID 303, .NET 10+).

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// Data for the AllocationSampled event (EventID 303, .NET 10+).
/// Data for the AllocationSampled event.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 7569f1a.

///
/// Data for the AllocationSampled event (EventID 303, .NET 10+).
/// Emitted by the randomized allocation sampler when
/// is enabled on the Microsoft-Windows-DotNETRuntime provider.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
/// is enabled on the Microsoft-Windows-DotNETRuntime provider.
/// is enabled.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 7569f1a.

…namic handler test

Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com>

Copilot AI commented Mar 20, 2026

Copy link
Copy Markdown
Contributor Author

Copilot, please address these comments.

All comments addressed in 7569f1a: reverted .base, simplified both doc comments, and removed the Dynamic.All handler + dynamicHandlerHits from the test.

///
/// Data for the AllocationSampled event.
/// Emitted by the randomized allocation sampler when
/// is enabled.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot, please move the last two words on this line to the line above.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 7dcdd30 — merged "is enabled." onto the preceding line.

…c comment

Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com>
@brianrob
Brian Robbins (brianrob) marked this pull request as ready for review March 20, 2026 02:34
@brianrob
Brian Robbins (brianrob) requested a review from a team as a code owner March 20, 2026 02:34
@brianrob
Brian Robbins (brianrob) enabled auto-merge (squash) March 20, 2026 02:34
Mitchell (mitchellvette) pushed a commit to mitchellvette/zenvizor that referenced this pull request Jul 1, 2026
Updated
[Microsoft.Diagnostics.Tracing.TraceEvent](https://github.com/Microsoft/perfview)
from 3.1.16 to 3.2.4.

Release notes _Sourced from [Microsoft.Diagnostics.Tracing.TraceEvent's releases](https://github.com/Microsoft/perfview/releases)._ ## 3.2.4 ## Security This release contains security hardening fixes for a number of malformed-input parsing and path-traversal vulnerabilities: - Bounds-checking for malformed event payloads in the BPerf ULZ777 decompressor and event-record parser - Bounds-checking for malformed metadata in the GCDynamic, RegisteredTraceEventParser (TDH), Dynamic, and EventPipe V3 parsers - Bounds-checking for malformed PE CodeView and Resource directory entries - Path containment hardening for PDB extraction (zipped ETL + container PDBs), DiagSession resource extraction, R2R perf map writes, PdbScope module paths, and dynamic manifest writes - Path-traversal and command-execution hardening for Source Server lookups ## What's Changed * Update CsWin32 Package Version by @​brianrob in microsoft/perfview#2425 * Fix incorrect field offsets when parsing ETW events with fixed-count array fields by @​Copilot in microsoft/perfview#2427 * Retarget Native Profiler Builds To VS 2026 V145 Toolset by @​brianrob in microsoft/perfview#2428 * Stabilize XamlMessageBox UI-thread dispatch test by @​brianrob in microsoft/perfview#2430 **Full Changelog**: microsoft/perfview@v3.2.3...v3.2.4 ## 3.2.3 ## What's Changed * Upgrade Microsoft.Windows.CsWin32 to 0.3.209 (GHSA-ghhp-997w-qr28) by @​Copilot in microsoft/perfview#2409 * Enable Spectre mitigations and linker optimizations for EtwClrProfiler by @​danmoseley in microsoft/perfview#2410 * Fix 'unhanded' / 'occured' typos in UnhandledExceptionDialog body text by @​SAY-5 in microsoft/perfview#2413 * Fix GCStats failures on dotnet trace gc-verbose collections (#​2414) by @​cincuranet in microsoft/perfview#2415 * C entrypoint fixes by @​zachcmadsen in microsoft/perfview#2421 ## New Contributors * @​SAY-5 made their first contribution in microsoft/perfview#2413 **Full Changelog**: microsoft/perfview@v3.2.2...v3.2.3 ## 3.2.2 ## What's Changed * Fix PDB Symbol Resolution for Unmerged Windows Traces by @​brianrob in microsoft/perfview#2407 **Full Changelog**: microsoft/perfview@v3.2.1...v3.2.2 ## 3.2.1 ## Native and R2R Symbol Download and Parsing Now Available As of this release, if you capture a trace using [`dotnet-trace collect-linux`](https://learn.microsoft.com/en-us/dotnet/core/diagnostics/dotnet-trace#dotnet-trace-collect-linux) or [`record-trace`](https://github.com/microsoft/one-collect/tree/main/record-trace), **native and R2R symbols can now be downloaded and resolved at analysis time**. All .NET symbols (both native and R2R) are available on the Microsoft Symbol Server. Additionally, many Azure Linux symbol files are available on the Microsoft Symbol Server. For those targeting other distros, PerfView and TraceEvent are capable of pulling those symbol files from local directories by adding a local symbol path pointing to the files. Most of the work for this was completed in PerfView and TraceEvent 3.2.1 with the final required fixes present in this release. ## What's Changed * Optimize nettrace-to-TraceLog Conversion by @​brianrob in microsoft/perfview#2403 * Embed missing System.Text.Json transitive dependencies in PerfView by @​brianrob in microsoft/perfview#2404 **Full Changelog**: microsoft/perfview@v3.2.0...v3.2.1 ## 3.2.0 ## What's Changed * Fix Debug.Assert failures in SpeedScope tests and DynamicTraceEventParser by @​brianrob in microsoft/perfview#2368 * Add TraceParserGen.Tests project and fix code generation bugs by @​Copilot in microsoft/perfview#2308 * Update UsersGuide.htm by @​AftabAnsari10662 in microsoft/perfview#2370 * Strip .il and .ni suffixes from TraceModuleFile.Name by @​leculver in microsoft/perfview#2364 * Handle provider names that start with a numeric digit. by @​brianrob in microsoft/perfview#2369 * Dispose WebView2 controls before Environment.Exit to prevent finalizer crash by @​brianrob in microsoft/perfview#2371 * Refactor GetManifestForRegisteredProvider to use XmlWriter by @​Copilot in microsoft/perfview#2353 * docs: Add investigation guidance for JIT-inlined missing stack frames by @​Copilot in microsoft/perfview#2377 * Fix spurious BROKEN frame at top of Linux thread stacks in CPU Stacks viewer by @​Copilot in microsoft/perfview#2375 * Fix NRE in AddUniversalDynamicSymbol for invalid symbol address ranges by @​brianrob in microsoft/perfview#2376 * Add missing authority parameter to log by @​hoyosjs in microsoft/perfview#2379 * Replace individual code owners with microsoft/perfview-reviewers group by @​brianrob in microsoft/perfview#2381 * Fix Dynamic Symbol Resolution for Mappings Shared Across Multiple Processes in Universal Traces by @​brianrob in microsoft/perfview#2380 * Implement Symbol Demanglers for Linux Binaries by @​brianrob in microsoft/perfview#2383 * Fix NullReferenceException race condition in TraceLog.AllocLookup/FreeLookup by @​Copilot in microsoft/perfview#2387 * Add typed schema for AllocationSampled (EventID 303, .NET 10+) in ClrTraceEventParser by @​Copilot in microsoft/perfview#2388 * Add ElfSymbolModule for Parsing ELF Symbol Tables by @​brianrob in microsoft/perfview#2384 * Update BDN to latest version. by @​cincuranet in microsoft/perfview#2389 * Fixed overflow when working with large dumps by @​remilema in microsoft/perfview#2399 * Fix XamlMessageBox STA Threading Crash from Background Threads by @​brianrob in microsoft/perfview#2400 * Add ELF Symbol Resolution for Linux .nettrace Traces by @​brianrob in microsoft/perfview#2397 * Add Missing WCF Event Templates by @​brianrob in microsoft/perfview#2390 ## New Contributors * @​AftabAnsari10662 made their first contribution in microsoft/perfview#2370 * @​remilema made their first contribution in microsoft/perfview#2399 **Full Changelog**: microsoft/perfview@v3.1.30...v3.2.0 ## 3.1.30 ## What's Changed * doc: fix typos by @​chinwobble in microsoft/perfview#2359 * Fix SourceLink parsing to support both wildcard and exact path mappings by @​ivberg in microsoft/perfview#2355 * add horizontal scrolling to eventviewer by @​logangeorge01 in microsoft/perfview#2361 * Add SHA-384 and SHA-512 hash algorithm support for PDB checksums by @​Copilot in microsoft/perfview#2366 ## New Contributors * @​chinwobble made their first contribution in microsoft/perfview#2359 * @​logangeorge01 made their first contribution in microsoft/perfview#2361 **Full Changelog**: microsoft/perfview@v3.1.29...v3.1.30 ## 3.1.29 ## What's Changed * Warn users when circular buffer overflow causes missing type info in allocation views for selected processes by @​Copilot in microsoft/perfview#2326 * Special-Case BitMask Parsing by @​brianrob in microsoft/perfview#2327 * Refactor PEFile and PEHeader to use ReadOnlySpan exclusively with zero-copy buffer sharing by @​Copilot in microsoft/perfview#2317 * Fix cdbstack parser dropping last sample and missing metrics by @​Copilot in microsoft/perfview#2329 * Fix unhandled ArgumentOutOfRangeException when exporting FlameGraph with unrendered canvas by @​Copilot in microsoft/perfview#2339 * Add guidance for capturing ETW traces in Kubernetes pods by @​Copilot in microsoft/perfview#2344 * Fix merge command line order in kubernetes documentation by @​Copilot in microsoft/perfview#2346 * Fix GetRegisteredOrEnabledProviders() documentation claiming list is small by @​Copilot in microsoft/perfview#2348 * Fix duplicate stringTable elements in instrumentation manifest by @​Copilot in microsoft/perfview#2347 * Fix Histogram.AddMetric losing values after single-bucket to array transition by @​Copilot in microsoft/perfview#2337 * Fix clipboard copy formatting based on selection dimensions in Stack Viewer by @​Copilot in microsoft/perfview#2332 * Fix XML escaping in GetManifestForRegisteredProvider by @​Copilot in microsoft/perfview#2351 * Fix race condition in ProviderNameToGuid causing ERROR_INSUFFICIENT_BUFFER crashes by @​Copilot in microsoft/perfview#2357 **Full Changelog**: microsoft/perfview@v3.1.28...v3.1.29 ## 3.1.28 ## What's Changed * Add support for Boolean8 to NetTrace V6. by @​noahfalk in microsoft/perfview#2318 * Implement A Thread Time View for Universal Traces by @​brianrob in microsoft/perfview#2320 * Remove Incorrect Argument Description by @​brianrob in microsoft/perfview#2323 **Full Changelog**: microsoft/perfview@v3.1.26...v3.1.28 ## 3.1.26 Roll-up through 2025/10/10. * Only dispose non-null handles in `ETWTraceEventSource` [#​2291](microsoft/perfview#2291) * Small cleanup in `NettraceUniversalConverter` [#​2292](microsoft/perfview#2292) * Fix hyperlink focus visibility in dark mode and improve keyboard navigation [#​2295](microsoft/perfview#2295) * Gracefully handle invalid characters in `PATH` [#​2296](microsoft/perfview#2296) * Fix copying First/Last columns with pipe symbols to work in time range input [#​2304](microsoft/perfview#2304) ## 3.1.24 Roll-up through 2025/08/26. * Implement NuGet Central Package Version Management [#​2262] * Fix broken stacks warning for universal traces [#​2268] * Fix jitted code symbols in universal traces to show assembly names instead of memfd:doublemapper [#​2269] * Use themed background brush for menu and filter [#​2272] * Improve rendering and dark mode [#​2274] * Implement configurable symbol server authentication with /SymbolsAuth command line argument for PerfView and HeapDump [#​2278] * Add a themed dialog [#​2276] * Fix regression: "Goto Item in Callers/Callees" now accumulates across all threads [#​2284] * Fix parsing issues and add support for additional events to the Linux perf text file parser [#​2286] * Fix TraceLog live session RelatedActivityID/ContainerID corruption by preserving ExtendedData [#​2285] * NetTrace LabelList metadata overrides and metadata flushing [#​2281] * Fix NullReferenceException in ProviderBrowser.LevelSelected when deselecting level [#​2289] ## 3.1.23 Roll-up through 2025/07/11. - Fixed TraceEvent CaptureState API to support previously unsupported keyword configurations. [#​2222] - Added Exception Stacks view for .nettrace files to enhance exception diagnostics. [#​2223] - Corrected outdated documentation references to "GC Heap Alloc Stacks". [#​2224] - Fixed off-by-one error in P/Invoke buffer handling for Windows volume events. [#​2227] - Fixed broken links in the PerfView user guide. [#​2225] - Improved error handling by throwing when TdhEnumerateProviders fails, enabling better diagnostics. [#​2177] - Added AutomationProperties.Name to the Process Selection DataGrid for improved accessibility. [#​2239] - Fixed focus indicator visibility for hyperlinks in dark mode and high contrast themes. [#​2235] - Addressed NullReferenceException in Anti-Malware view. [#​2233] - Fixed WebView2 crash on close by implementing proper disposal pattern. [#​2230] - Added support for native AOT gcdumps, expanding compatibility with modern .NET workloads. [#​2242] - Fixed NVDA screen reader issue where Theme menu items did not announce selection state. [#​2237] - Extended PredefinedDynamicTraceEventParser to support dynamic events from additional sources. [#​2232] - Implemented MSFZ symbol format support in SymbolReader. [#​2244] - Removed usage of DefaultAzureCredential, simplifying authentication dependencies. [#​2255] - Added option to hide TimeStamp columns in the EventWindow View menu. [#​2247] - Fixed NVDA screen reader reporting incorrect list count for File menu separators. [#​2257] - Fixed unhandled exception when double-clicking in scroll bar area with no content. [#​2254] - Fixed universal symbol conversion for overlapping mappings. [#​2252] - Fixed TraceEvent.props to respect ProcessorArchitecture when RuntimeIdentifier is set. [#​2249] ## 3.1.22 Roll-up through 2025/06/04. - Added GC Heap Analyzer support for .nettrace files to enhance memory analysis workflows. [#​2216] - Introduced PredefinedDynamicTraceEventParser for known TraceLogging events, improving trace event parsing. [#​2220] - Enabled selection of process trees in the process selection dialog for multi-process analysis, allowing deeper inspection across related processes. [#​2195] - Implemented sorting for the Duration column in the process selection dialog using TotalDurationSeconds, improving usability. [#​2194] - Improved NetTrace parameter parsing for better command-line flexibility. [#​2200] - Fixed GetActiveSessionNames to handle ERROR_MORE_DATA, resolving session enumeration issues. [#​2196] - Fixed ObjectDisposedException when opening Net OS Heap Alloc Stacks, improving stability. [#​2212] - Fixed null reference exception in GenFragmentationPercent method, enhancing reliability. [#​2211] - Fixed TreeView auto-expansion when opening trace files. [#​2218] - Fixed StackViewer issue where "Set Time Range" reset "Goto Items by callees". [#​2208] - Fixed markdown table formatting when copying from the stack viewer. [#​2203] - Fixed TraceEvent NuGet package to exclude Windows-specific native DLLs. [#​2215] - Removed PDB generation for .NET Core assemblies using CrossGen, reducing build overhead. [#​2202] - Made symbol server timeout configurable and removed dead code in SymbolReader. [#​2209] - Changed help ribbons to use textblocks, enabling tab navigation. [#​2201] ## 3.1.21 Roll-up through 2025/05/02. - Change NetTrace format version support - Add /OSHeapMaxMB to set a max size for OS heap sessions - Implement Nettrace Support for Traces with Universal Providers - Implement R2R Symbol Lookup for Linux Traces - Fix NetTrace parsing for Start/Stop event names - Fix IndexOutOfRangeException in ProcessGlobalHistory ## 3.1.20 Roll-up through 2025/04/01. - Flamegraph and drill-in menu improvements - Performance improvements around unhandled event dispatch - Add configurable real-time delay in TraceLogEventSource - Don't queue another flush during a real-time ETW session if one is already in-process - Allow configuration of rundown providers for real-time EventPipe sessions - Fix stack handling for NetTrace V4 - Add multi-line view for events viewer - Misc accessibility fixes ## 3.1.19 Roll-up through 2025/01/30. - Added missing time information in the Raw XML View for GCStats. - Updated activity computation logic to support OpenTelemetry events. - Changed timestamp values to use QPC time based on UTC for Relogger. - Fixed issues with report command handling. - Addressed various POH-related issues. - Implemented file-size limitation for rundown using an ETW-based approach. ## 3.1.18 Roll-up through 2024/12/11. - Fixed `perfcollect` install script on Azure Linux 3. - Updated `System.Text.Json` to address dotnet/announcements#329. ## 3.1.17 Roll-up through 2024/11/08. - Numerous accessibility fixes to PerfView. This includes switching out the previous web browser plugin to use WebView2. - Breaking changes to FastSerialization to ensure that only expected types are deserialized. This addresses potential vulnerabilities during deserialization of untrusted input. Details at microsoft/perfview#2121. Commits viewable in [compare view](microsoft/perfview@v3.1.16...v3.2.4).
Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

AllocationSampled (EventID 303, .NET 10+) has no typed schema in ClrTraceEventParser

3 participants