chore: sync fork with microsoft/perfview main - #3
Conversation
…g at the hr instead of causing an NRE which masks the exception. (microsoft#2177)
…sibility (microsoft#2239) * Initial plan for issue * Add AutomationProperties.Name to Process selection DataGrid for accessibility Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Update name casing. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
…ontrast (microsoft#2235) * Initial plan for issue * Add focus indicators for hyperlinks in dark theme Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Fix high contrast dark mode styling for menu, dropdown and filter Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Revert failed high contrast changes and fix light theme menu colors Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Revert theme changes and fix menu bar high contrast support Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Update the background for the filter text in the main window. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
Show all scans even when the filter driver events aren't present. This is especially useful when looking at traces generated by New-MpPerformanceRecording.
…icrosoft#2230) * Initial plan for issue * Implement IDisposable for WebBrowserWindow to fix WebView2 crash Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Add disposal safety checks for async WebView2 initialization Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Simplify disposal pattern as requested - remove IDisposable interface Co-authored-by: marklio <529657+marklio@users.noreply.github.com> * Use CanGoBack and CanGoForward properties instead of duplicating disposal checks Co-authored-by: cincuranet <4540597+cincuranet@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: marklio <529657+marklio@users.noreply.github.com> Co-authored-by: cincuranet <4540597+cincuranet@users.noreply.github.com>
With this, PerfView will be able to create native AOT gcdumps. It activates the same codepaths we had for Project N, so it will also properly decode type names. The changes to DotNetHeapDumpGraphReader match dotnet/diagnostics#5506.
…te (microsoft#2237) * Initial plan for issue * Fix NVDA theme selection accessibility by adding IsCheckable="True" to theme MenuItems Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Add IsCheckable="True" to Authentication menu items for accessibility Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com>
…om EventPipeEventSource (microsoft#2232) * Initial plan for issue * Add EventPipe support to PredefinedDynamicTraceEventParser Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Update UniversalEventsTraceEventParser to inherit from PredefinedDynamicTraceEventParser Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Update cpu and cswitch events to use registered dynamic events Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> * Fix parser implementation. * Handle the case when events don't match any known template in PredefinedDynamicTraceEventParser. Ensure we don't spend lots of time decoding metadata over and over. * Fix implementation to work with instances of TraceLog. Metadata is pulled from the serialized dynamic event information. --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
…oft#2247) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com>
…icrosoft#2257) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
…no selected nodes (microsoft#2254) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: mconnew <8648390+mconnew@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
…ntifier isn't specified (microsoft#2249) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
…stead of memfd:doublemapper (microsoft#2269) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
Without this the menu and filter are white on white in dark mode.
Add missing info about LabelList ID 0 being the empty list
- Update manifest to opt into PMV2 scaling (eliminates blurring on high DPI) - Tweak dark mode scroll bars to be more visible - Update to C# 11 - Update most packages to latest (updating Azure packages cause runtime failures) - Add Packages.props to the solution folder for simplicity - Hook various XAML files to pick up the theme - Set the WebView2 control preferred color scheme to match - Remove outdated Internet Explorer related <meta> tag - Change html sources to indicate that they support light and dark themes - Generate html with theme specific code I generally used two root entries `:root[data-theme="light"]` as it enables doing things like letting you flip the theme with a button (say to print). I didn't put that in this PR as I'm not super clear on the value. For future reference, here is how you would do that: ```html <style> @media print { .no-print { display: none !important; } </style> <button type="button" class="no-print" onclick="toggleTheme()">🌗 Toggle Theme</button> <script> // Simple theme toggle script: switches the data-theme attribute on <html> function toggleTheme() { const root = document.documentElement; const newTheme = root.getAttribute('data-theme') === 'light' ? 'dark' : 'light'; root.setAttribute('data-theme', newTheme); } </script> ``` I gave up on updating the Azure packages as they cause PerfView to fail at runtime. Would require a bit more time.
… command line argument for PerfView and HeapDump (microsoft#2278) Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
Theming isn't easy for the system message box and requires using undocumented APIs. To get theming, including a simple themed message box that roughly follows the existing layout. Move the project to the standard SDK which enables using source generators. The existing SDK was a hack for building before WPF and WinForms were officially released on .NET Core. Push the C# version to 12 for collections expressions, default parameters for lambdas, etc. Add CsWin32 for PInvoke source generation. Add PInvokes for getting the modern shell icons for the new dialog. System.Drawing has the new Icons in .NET, but we're still targetting 4.6.2. (Note that some PInvokes have to still be manually defined because we're targetting AnyCPU. Some headers in Windows are defined with nonstandard packing, which makes the SDK generate metadata that is platform specific. For safety they don't generate any of these and they must be manually evaluated. The manual ones I added come from System.Drawing. If we targetted specific architectures this wouldn't be necessary.) If we're able to move to .NET Core in the future we can get more explicit, coherent theming support through WPF or MAUI.
… all threads (microsoft#2284) Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: brianrob <6210322+brianrob@users.noreply.github.com> Co-authored-by: Brian Robbins <brianrob@microsoft.com>
… perf text file parser (microsoft#2286) * Handle some parsing edge cases and add support for disk IO events * Fix issues with previous change * Add support for wakeup events * Add support for old event format as well * Add perfview event processing for process_exec * Fix style issue * Add test for sched:exec_process * Add support for IRQ events --------- Co-authored-by: Tom Ootjers <tomoot@ntdev.microsoft.com> Co-authored-by: Dillon Caryl <dicaryl@microsoft.com> Co-authored-by: dillon-caryl <dcaryl@hotmail.com>
… preserving ExtendedData (microsoft#2285)
Bounds-check length-prefix bytes before reading variable-length array elements in dynamic event payloads so malformed events cannot cause out-of-bounds reads. Refines the variable-element minimum size used by the parser. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Route WriteAllManifests through the shared PathUtilities.SanitizeFileName helper so malicious provider names cannot escape the manifest output directory or overwrite arbitrary files. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Validate the stack-bytes size field when parsing EventPipe V3 event headers so a malformed StackBytesSize cannot cause out-of-bounds reads while walking event payloads. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Validate payload size against the event's data length before reading GCDynamic event fields so malformed payloads cannot cause out-of-bounds reads. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Limit the PDB filename read in the CodeView debug entry to the size declared by IMAGE_DEBUG_DIRECTORY.SizeOfData so an unterminated name cannot scan adjacent memory. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Cap PE resource name reads at the size declared by the resource data directory so malformed names cannot read past the resource section. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
TdhEventParser previously dereferenced every offset in a TRACE_EVENT_INFO or EVENT_MAP_INFO buffer without validating it against the buffer size. Thread the buffer length through TdhEventParser and ParseMap and bounds-check every offset and array extent at the point it is read. Cap nested struct recursion at 32. Optional descriptive strings degrade gracefully on a bad offset (ProviderName falls back to UnknownProvider, names to string.Empty, maps are skipped) rather than dropping the whole event; a structurally invalid header still rejects the event. The legacy unchecked TdhEventParser constructor and ParseMap overload are removed. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Bump ReleaseVersion in src/Directory.Build.props from 3.2.3 to 3.2.4 in preparation for the v3.2.4 release. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Summary These changes shipped in the **PerfView and TraceEvent 3.2.4** release. This PR brings them into `main` so that all future releases also contain them. ## Hardening fixes **Malformed-input bounds checking** - Fix BPerf WildCopy so short copies do not write past the requested output range - Validate BPerf event record bounds - Validate dynamic event array bounds - Bounds-check StackBytesSize in EventPipe V3 event headers - Bounds-check GCDynamic event payloads - Bounds-check TDH metadata offsets in RegisteredTraceEventParser - Bound CodeView PDB filename read by IMAGE_DEBUG_DIRECTORY SizeOfData - Bound PE resource name reads by the resource data directory size **Path-containment hardening** - Fix source-server path traversal and command injection - Validate PDB extraction target paths against the symbol directory - Sanitize R2R perf map symbol paths - Constrain DiagSession resource extraction paths - Validate PdbScope XML module paths - Sanitize provider names when writing dynamic manifests ## Release mechanics - Bump ReleaseVersion to 3.2.4
On musl distros (e.g. Alpine) libc and the dynamic loader are combined into a single module named like ld-musl-x86_64.so.1, where threads start. Treat it as a valid top frame so musl stacks aren't marked BROKEN, mirroring the existing glibc libc handling. Add an in-memory nettrace unit test. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
## Why Traces captured with one-collect on musl-based Linux distros (e.g. Alpine) show a large fraction of stacks marked BROKEN when opened in PerfView or TraceEvent. On a real Alpine trace, about 18% of samples were broken. The root cause is that thread base frames on musl live in the combined libc + dynamic loader module, named like `ld-musl-x86_64.so.1`, which `ReasonableTopFrame` did not recognize as a legitimate thread-start module. We already special-case glibc's `libc` for the same reason; musl was simply missing. ## What - `TraceEventStacks.cs`: In `ReasonableTopFrame`, treat any module whose name starts with `ld-musl-` (case-insensitive, so it covers `x86_64`, `aarch64`, etc.) as a valid top frame, mirroring the existing glibc `libc` handling. When matched, a stack rooted there is no longer wrapped in a BROKEN frame. - Added `Universal/MuslBrokenStackTests.cs`: a unit test that synthesizes a tiny in-memory V6 nettrace (no large trace binary added to the repo) containing a musl loader module, an ordinary library, and two cpu samples: one rooted in the musl module and one rooted in the ordinary library. It asserts the musl-rooted stack is not BROKEN while the ordinary-library-rooted stack still is, parameterized over both `ld-musl-x86_64.so.1` and `ld-musl-aarch64.so.1`. ## Validation - A throwaway TraceEvent-based console app run against the real Alpine trace confirmed broken stacks dropped from 18.4% to 3.7% (eliminating ~6,100 musl-rooted frames). The scratch app was not committed. - Confirmed the new test fails without the fix (musl stack marked BROKEN) and passes with it. - Full TraceEvent suite is green: 2272 passing on net8.0 and 2289 on net462, no regressions. ## Notes for reviewers The negative-case assertion (ordinary library still BROKEN) is intentional to guard against the match being too broad. The test writer emits a non-zero `syncTimeQPC` so iterating relative timestamps does not trip a Debug.Assert in `QPCTimeToRelMSec`; this is a test-harness detail only.
…soft#2439) When collecting with /InMemoryCircularBuffer and /CircularMB:N where N is larger than ~256, PerfView collection succeeds but the subsequent KernelTraceControl merge fails (e.g. CreateMergedTraceFile returns 0x80280012), and the requested memory grows quadratically. The buffering-mode branch of GetProperties overwrote properties->BufferSize with m_CircularBufferMB. BufferSize is a per-buffer size in KB, so a megabyte value was being written into a kilobyte field. This made each ETW buffer far larger than the OS maximum buffer size, which the relogger later chokes on during merge, and it contradicted the MinimumBuffers computation on the line above (which divides by the 64 KB quantum). It also corrupted the Attach round-trip that reconstructs buffer settings when stopping the session. Remove the erroneous assignment so BufferSize stays at the per-buffer quantum (m_BufferQuantumKB) set earlier, matching the file-based and real-time paths. MinimumBuffers alone now sizes the in-memory pool, so (MinimumBuffers * BufferSize) == m_CircularBufferMB megabytes as intended. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PerfView 3.2.4 can throw `ArgumentOutOfRangeException` when GC Stats or Heap Analyzer replays `GC/CommittedUsage` events from ETLX. During conversion, `FixupData()` classifies the raw dynamic event and the ETLX persists the synthetic event ID, but the original dynamic payload envelope remains unchanged. On replay, the typed template therefore still needs to parse that envelope. This change refreshes the payload layout in `EventPayload` only when processing a `TraceLog`. Raw ETW and EventPipe dispatch continue using the payload prepared by `FixupData()`, avoiding redundant parsing. Fixed-offset `CommittedUsage` fields also return safe defaults for truncated payloads. Regression coverage includes valid ETLX replay without `FixupData()`, reused replay templates with distinct payloads, and malformed payload access through properties, `PayloadValues`, and `ToXml`. Fixes microsoft#2438
* Enable W4 and warnings as errors for C++ projects Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5b148be3-5dce-425e-b025-94eb7b8de1d5 * Remove stale sampling debug code Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 5b148be3-5dce-425e-b025-94eb7b8de1d5 --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…ft#2434) * Support embedded portable PDBs for managed symbol resolution Managed assemblies built with <DebugType>embedded</DebugType> carry their portable PDB inside the PE image rather than in a standalone .pdb file. Previously SymbolReader could not read these, so source/line lookup failed for such modules. Add the ability to open an embedded portable PDB: - SymbolReader.OpenEmbeddedPortablePdb reads the EmbeddedPortablePdb debug-directory entry from a module and returns a PortableSymbolModule. Results are cached under a key suffixed so they cannot collide with standalone-PDB cache entries. - SymbolReader.OpenSymbolFileForModuleFile is a module-oriented entry point that prefers a standalone PDB and falls back to an embedded portable PDB. - PortableSymbolModule gains a constructor that takes a MetadataReaderProvider (which owns its own backing memory). - TraceLog.OpenPdbForModuleFile falls back to the module's embedded portable PDB when the on-disk module matches the trace and no standalone PDB exists. Tests: add an EmbeddedPdbTestApp fixture (built with embedded PDBs) and cover the happy path, caching, not-embedded/missing-file cases, the module-oriented entry point (embedded and standalone), and the end-to-end TraceLog fallback path. All run cross-platform on net462 and net8.0. * Build embedded-PDB test fixture unoptimized for stable source lines In Release the C# compiler optimizes EmbeddedTarget.Add, shifting its first sequence point from the 'int sum = a + b;' line to the 'return' line, so the source-line assertions failed in the Release CI leg. Pin Optimize=false on the fixture so its emitted sequence points are stable regardless of the build configuration. * Remove test-only OpenSymbolFileForModuleFile wrapper Per PR review: this wrapper was called only from tests, and TraceLog.OpenPdbForModuleFile already provides the standalone-then-embedded fallback for the trace path. Removed it and its three dedicated tests, keeping OpenEmbeddedPortablePdb (the building block TraceLog uses).
…t#2444) FastSerializationObjectParser.ReadBlockHeader read an attacker-controlled 32-bit type-name length from fully untrusted nettrace/EventPipe input and only validated the upper bound (typeLen > maxLen). A negative length passed that check and flowed into 'stackalloc byte[typeLen]', where the count is converted to an enormous unsigned size, reliably crashing the process with an uncatchable StackOverflowException (a denial of service on malformed input). This was found by the TraceEvent nettrace fuzzer, which reproduces it with a 693-byte input. Reject negative type-name lengths alongside oversized ones, and add a regression test that asserts a FormatException (not a crash) for a negative object type length. Copilot-Session: 7c1dc14b-deed-412d-bdca-a44a5ac9bf9a Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…rosoft#2445) * Fix AccessViolation on malformed MethodILToNativeMap entry count TraceLog.AddILMapping trusted CountOfMapEntries, a 16-bit count read from fully untrusted MethodILToNativeMap (EventID 190) event payload, when reading the ILOffset/NativeOffset entries. Because NativeOffset(i) is indexed relative to CountOfMapEntries, a corrupt or fuzzed EventPipe/ETW stream that claims more entries than the payload actually contains caused the reads to index past the end of the event buffer and access protected memory, crashing the process with an (uncatchable) AccessViolationException. Found by the TraceEvent nettrace fuzzer. Reject events whose payload is too small for the claimed entry count (a valid event has EventDataLength >= CountOfMapEntries * 8 + 21), record the skip in the conversion log, and add a regression test that drives the full TraceLog conversion path with such a malformed event. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7c1dc14b-deed-412d-bdca-a44a5ac9bf9a * Simplify IL map payload validation Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: b49ece18-cc2c-4ca2-8aff-82c7906a5518 --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…itch lines (microsoft#2446) ReadProcessNameUntilNextField loops until it finds the expected next field name (e.g. prev_pid/next_pid/pid). On malformed or truncated perf script input where that field name never appears, the loop never terminated, hanging the parser. OneFuzz fuzzing of the Linux perf script parser found 146 such hang inputs. Break out of the loop when the end of the stream is reached. Adds a regression test that parses a truncated sched_switch line and asserts parsing terminates. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7c1dc14b-deed-412d-bdca-a44a5ac9bf9a
* Support TraceLogging formatting hints Trace Data Helper lets you add display hints to fields in events. For example, there are hints to indicate that an integer value should hex formatted on display or that the value is a HRESULT. The commonly used [C++ TraceLogging library][0] supports these hints via its [TraceLogging Wrapper macros][1]. Add support for pretty printing the following _TDH_OUT_TYPE values: * TDH_OUTTYPE_HEXINT8 - hex, width of the underlying type * TDH_OUTTYPE_HEXINT16 - hex, width of the underlying type * TDH_OUTTYPE_HEXINT32 - hex, width of the underlying type * TDH_OUTTYPE_HEXINT64 - hex, width of the underlying type * TDH_OUTTYPE_PID - decimal number without digit seperators * TDH_OUTTYPE_TID - decimal number without digit seperators * TDH_OUTTYPE_PORT - decimal number without digit seperators, converted from network byte order * TDH_OUTTYPE_IPV4 - dotted quad * TDH_OUTTYPE_IPV6 - colon-seperated, elision of runs of zeros * TDH_OUTTYPE_SOCKETADDRESS - "address:port" for AF_INET and AF_INET6 * TDH_OUTTYPE_ERRORCODE - hex, no padding * TDH_OUTTYPE_WIN32ERROR - hex, no padding * TDH_OUTTYPE_NTSTATUS - hex, always 8 digits wide * TDH_OUTTYPE_HRESULT - hex, always 8 digits wide * TDH_OUTTYPE_CODE_POINTER - lowercase hex, minimum of 8 digits wide Fixes microsoft#2436. Given TraceLogging code like this: ``` TraceLoggingWrite( g_hMyProvider, "MyEvent", TraceLoggingUInt32(value1ToLog), TraceLoggingHexUInt32(value2ToLog)); ``` In PerfView today, this would be rendered as ``` value1ToLog="1" value2ToLog="32,769" ``` Now, it is rendered as ``` value1ToLog="1" value2ToLog="0x00008001" ``` For things like flags these format hints can make it easier to read values at a glance. There are also common values that are represented in hex, like PCI IDs. When PerfView already had support for formatting a value, its existing formating style was followed. Otherwise, I matched WPA's formatting. Changes made: * Changed TraceEvent's representation of the output type from a ushort to the new TdhOutputType enum. * Add TdhFormtter.cs that knows how to format a value with a given formatting hint. A formatting hint was chosen so that the PayloadFetch object didn't need to remember both its TdhInputType and its TdhOutputType. * Reved the FastSerializable format to include the new formatting hint. * Introduced a new FormatUtils helper for shared formatting code between TraceEvent.cs and DynamicTraceEventParser.cs * Unit tests for the new formatting logic added. * Updated the baseline files to capture the changes in formatting. [0]: https://learn.microsoft.com/windows/win32/tracelogging/trace-logging-portal [1]: https://learn.microsoft.com/windows/win32/tracelogging/tracelogging-wrapper-macros
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Improve keyboard focus indicator contrast Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Isolate focus visual WPF tests Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 11232b9e-2a12-482f-88c4-6b9023450660 --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 11232b9e-2a12-482f-88c4-6b9023450660
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: bf7bd1f4-f0fd-4d6c-b398-808014b1bbeb
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 41660996-15c9-4feb-904d-eff836f5f59e
Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
* Add Accessible Label To Directory Search Field Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Align Directory Field Accessible Name Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> * Preserve directory automation name Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 41660996-15c9-4feb-904d-eff836f5f59e --------- Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 41660996-15c9-4feb-904d-eff836f5f59e
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Want reviews to match your repository better? Bugbot Learning can learn team-specific rules from PR activity. A team admin can enable Learning in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit af22740. Configure here.
| **\bin\**\SymbolsAuthTests.dll | ||
| **\bin\**\TraceEventTests.dll | ||
| **\bin\**\PerfViewTests.dll | ||
| **\bin\**\TraceParserGen.Tests.dll |
There was a problem hiding this comment.
New tests skipped in CI
Medium Severity
The new FastSerialization.Tests project builds as FastSerializationTests.dll, but the pipeline test assembly list only adds TraceParserGen.Tests.dll. Those new serialization tests never run in CI, so regressions in FastSerialization can ship undetected.
Additional Locations (1)
Reviewed by Cursor Bugbot for commit af22740. Configure here.


Syncs this fork's
mainwithmicrosoft/perfviewmain(151 commits).This fork carries no commits of its own —
git rev-list --count upstream/main..origin/mainreturns 0 — so this is a content-level fast-forward. A true fast-forward push was not possible
(the org ruleset requires changes go through a pull request, and it has no bypass actors), so
this PR is the mechanism. It should be merged with "Create a merge commit"; squash would
collapse 151 upstream commits into one and rebase would rewrite their SHAs.
Why now
Unblocks getsentry/sentry-dotnet#5469 — a profiling memory leak whose fix has to land in
TraceEvent. sentry-dotnet's submodule pin (
e343a0cf) is ~219 commits behind, and thesubmodule URL points at this fork, so the new head has to exist here before it can be pinned.
Verification already done against this content
Built and tested from sentry-dotnet with the submodule pointed at upstream head:
Sentry.Profilingbuilds clean (0 errors). The FastSerialization breaking changes(Breaking Changes for FastSerialization microsoft/perfview#2121) don't touch anything the SDK consumes.
rundown, first event, stack sampling and shutdown all pass. This was the main risk, given
Increment Versions and Disable Nettrace V6 Support microsoft/perfview#2178 disables NetTrace V6 and Change NetTrace format version support, eliminate pinning, and improve UnsupportedVersionException microsoft/perfview#2180 changes version handling.
Sentry.Profiling.Testsbeyond one stale committed test fixture on thesentry-dotnet side, which that repo's bump PR handles.