| File: Contracts\GC\GCHeapWKS.cs | Web Access |
| Project: src\runtime\src\native\managed\cdac\Microsoft.Diagnostics.DataContractReader.Contracts\Microsoft.Diagnostics.DataContractReader.Contracts.csproj (Microsoft.Diagnostics.DataContractReader.Contracts) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. namespace Microsoft.Diagnostics.DataContractReader.Contracts.GCHelpers; internal sealed class GCHeapWKS : IGCHeap { public GCHeapWKS(Target target) { if (target.TryReadGlobalPointer(Constants.Globals.GCHeapMarkArray, out TargetPointer? markArrayPtr)) MarkArray = target.ReadPointer(markArrayPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapNextSweepObj, out TargetPointer? nextSweepObjPtr)) NextSweepObj = target.ReadPointer(nextSweepObjPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapBackgroundMinSavedAddr, out TargetPointer? bgMinPtr)) BackgroundMinSavedAddr = target.ReadPointer(bgMinPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapBackgroundMaxSavedAddr, out TargetPointer? bgMaxPtr)) BackgroundMaxSavedAddr = target.ReadPointer(bgMaxPtr.Value); AllocAllocated = target.ReadPointer(target.ReadGlobalPointer(Constants.Globals.GCHeapAllocAllocated)); EphemeralHeapSegment = target.ReadPointer(target.ReadGlobalPointer(Constants.Globals.GCHeapEphemeralHeapSegment)); CardTable = target.ReadPointer(target.ReadGlobalPointer(Constants.Globals.GCHeapCardTable)); FinalizeQueue = target.ReadPointer(target.ReadGlobalPointer(Constants.Globals.GCHeapFinalizeQueue)); GenerationTable = target.ReadGlobalPointer(Constants.Globals.GCHeapGenerationTable); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapSavedSweepEphemeralSeg, out TargetPointer? savedSweepEphemeralSegPtr)) SavedSweepEphemeralSeg = target.ReadPointer(savedSweepEphemeralSegPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapSavedSweepEphemeralStart, out TargetPointer? savedSweepEphemeralStartPtr)) SavedSweepEphemeralStart = target.ReadPointer(savedSweepEphemeralStartPtr.Value); OomData = target.ProcessedData.GetOrAdd<Data.OomHistory>(target.ReadGlobalPointer(Constants.Globals.GCHeapOomData)); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapInternalRootArray, out TargetPointer? internalRootArrayPtr)) InternalRootArray = target.ReadPointer(internalRootArrayPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapInternalRootArrayIndex, out TargetPointer? internalRootArrayIndexPtr)) InternalRootArrayIndex = target.ReadNUInt(internalRootArrayIndexPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapHeapAnalyzeSuccess, out TargetPointer? heapAnalyzeSuccessPtr)) HeapAnalyzeSuccess = target.Read<int>(heapAnalyzeSuccessPtr.Value) != 0; InterestingData = target.ReadGlobalPointer(Constants.Globals.GCHeapInterestingData); CompactReasons = target.ReadGlobalPointer(Constants.Globals.GCHeapCompactReasons); ExpandMechanisms = target.ReadGlobalPointer(Constants.Globals.GCHeapExpandMechanisms); InterestingMechanismBits = target.ReadGlobalPointer(Constants.Globals.GCHeapInterestingMechanismBits); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapFreeableSohSegment, out TargetPointer? freeableSohSegPtr)) FreeableSohSegment = target.ReadPointer(freeableSohSegPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapFreeableUohSegment, out TargetPointer? freeableUohSegPtr)) FreeableUohSegment = target.ReadPointer(freeableUohSegPtr.Value); if (target.TryReadGlobalPointer(Constants.Globals.GCHeapFreeRegions, out TargetPointer? freeRegionsPtr)) FreeRegions = freeRegionsPtr.Value; } public TargetPointer? MarkArray { get; } public TargetPointer? NextSweepObj { get; } public TargetPointer? BackgroundMinSavedAddr { get; } public TargetPointer? BackgroundMaxSavedAddr { get; } public TargetPointer AllocAllocated { get; } public TargetPointer EphemeralHeapSegment { get; } public TargetPointer CardTable { get; } public TargetPointer FinalizeQueue { get; } public TargetPointer GenerationTable { get; } public TargetPointer? SavedSweepEphemeralSeg { get; } public TargetPointer? SavedSweepEphemeralStart { get; } public Data.OomHistory OomData { get; } public TargetPointer? InternalRootArray { get; } public TargetNUInt? InternalRootArrayIndex { get; } public bool? HeapAnalyzeSuccess { get; } public TargetPointer InterestingData { get; } public TargetPointer CompactReasons { get; } public TargetPointer ExpandMechanisms { get; } public TargetPointer InterestingMechanismBits { get; } public TargetPointer? FreeableSohSegment { get; } public TargetPointer? FreeableUohSegment { get; } public TargetPointer? FreeRegions { get; } }