| File: Contracts\RuntimeInfo_1.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. using System; namespace Microsoft.Diagnostics.DataContractReader.Contracts; internal sealed class RuntimeInfo_1 : IRuntimeInfo { private readonly Target _target; private RuntimeInfoArchitecture? _architecture; private RuntimeInfoOperatingSystem? _operatingSystem; private RuntimeInfoRuntimeFlavor? _runtimeFlavor; private uint? _recommendedReaderVersion; public RuntimeInfo_1(Target target) { _target = target; } public void Flush(FlushScope scope) { _architecture = null; _operatingSystem = null; _runtimeFlavor = null; _recommendedReaderVersion = null; } RuntimeInfoArchitecture IRuntimeInfo.GetTargetArchitecture() => _architecture ??= ReadArchitecture(); RuntimeInfoOperatingSystem IRuntimeInfo.GetTargetOperatingSystem() => _operatingSystem ??= ReadOperatingSystem(); RuntimeInfoRuntimeFlavor IRuntimeInfo.GetRuntimeFlavor() => _runtimeFlavor ??= ReadRuntimeFlavor(); uint IRuntimeInfo.GetCurrentReaderVersion() => 1; uint IRuntimeInfo.GetRecommendedReaderVersion() => _recommendedReaderVersion ??= ReadRecommendedReaderVersion(); private RuntimeInfoArchitecture ReadArchitecture() { if (_target.TryReadGlobalString(Constants.Globals.Architecture, out string? arch)) { if (Enum.TryParse(arch, ignoreCase: true, out RuntimeInfoArchitecture parsedArch)) { return parsedArch; } } return RuntimeInfoArchitecture.Unknown; } private RuntimeInfoOperatingSystem ReadOperatingSystem() { if (_target.TryReadGlobalString(Constants.Globals.OperatingSystem, out string? os)) { if (Enum.TryParse(os, ignoreCase: true, out RuntimeInfoOperatingSystem parsedOS)) { return parsedOS; } } return RuntimeInfoOperatingSystem.Unknown; } private RuntimeInfoRuntimeFlavor ReadRuntimeFlavor() { if (_target.TryReadGlobalString(Constants.Globals.RuntimeFlavor, out string? flavor)) { if (Enum.TryParse(flavor, ignoreCase: true, out RuntimeInfoRuntimeFlavor parsedFlavor)) { return parsedFlavor; } } return RuntimeInfoRuntimeFlavor.Unknown; } private uint ReadRecommendedReaderVersion() { _target.TryReadGlobal(Constants.Globals.RecommendedReaderVersion, out uint? runtimeVersion); return runtimeVersion ?? 0; } }