| File: Telemetry\WorkerNodeTelemetryEventArgs.cs | Web Access |
| Project: src\msbuild\src\Framework\Microsoft.Build.Framework.csproj (Microsoft.Build.Framework) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections.Generic; using System.IO; namespace Microsoft.Build.Framework.Telemetry; internal sealed class WorkerNodeTelemetryEventArgs(IWorkerNodeTelemetryData workerNodeTelemetryData) : BuildEventArgs { public WorkerNodeTelemetryEventArgs() : this(new WorkerNodeTelemetryData()) { } public IWorkerNodeTelemetryData WorkerNodeTelemetryData { get; private set; } = workerNodeTelemetryData; internal override void WriteToStream(BinaryWriter writer) { writer.Write7BitEncodedInt(WorkerNodeTelemetryData.TasksExecutionData.Count); foreach (KeyValuePair<TaskOrTargetTelemetryKey, TaskExecutionStats> entry in WorkerNodeTelemetryData.TasksExecutionData) { WriteToStream(writer, entry.Key); writer.Write(entry.Value.CumulativeExecutionTime.Ticks); writer.Write(entry.Value.ExecutionsCount); writer.Write(entry.Value.TotalMemoryBytes); writer.Write(entry.Value.TaskFactoryName ?? string.Empty); writer.Write(entry.Value.TaskHostRuntime ?? string.Empty); } writer.Write7BitEncodedInt(WorkerNodeTelemetryData.TargetsExecutionData.Count); foreach (KeyValuePair<TaskOrTargetTelemetryKey, TargetExecutionStats> entry in WorkerNodeTelemetryData.TargetsExecutionData) { WriteToStream(writer, entry.Key); writer.Write(entry.Value.WasExecuted); writer.Write((int)entry.Value.SkipReason); } } internal override void CreateFromStream(BinaryReader reader, int version) { int count = reader.Read7BitEncodedInt(); Dictionary<TaskOrTargetTelemetryKey, TaskExecutionStats> tasksExecutionData = new(); for (int i = 0; i < count; i++) { var key = ReadFromStream(reader); var cumulativeExecutionTime = TimeSpan.FromTicks(reader.ReadInt64()); var executionsCount = reader.ReadInt32(); var totalMemoryBytes = reader.ReadInt64(); var taskFactoryName = reader.ReadString(); var taskHostRuntime = reader.ReadString(); tasksExecutionData.Add( key, new TaskExecutionStats( cumulativeExecutionTime, executionsCount, totalMemoryBytes, string.IsNullOrEmpty(taskFactoryName) ? null : taskFactoryName, string.IsNullOrEmpty(taskHostRuntime) ? null : taskHostRuntime)); } count = reader.Read7BitEncodedInt(); Dictionary<TaskOrTargetTelemetryKey, TargetExecutionStats> targetsExecutionData = new(); for (int i = 0; i < count; i++) { var key = ReadFromStream(reader); var wasExecuted = reader.ReadBoolean(); var skipReason = (TargetSkipReason)reader.ReadInt32(); targetsExecutionData.Add(key, new TargetExecutionStats(wasExecuted, skipReason)); } WorkerNodeTelemetryData = new WorkerNodeTelemetryData(tasksExecutionData, targetsExecutionData); } private static void WriteToStream(BinaryWriter writer, TaskOrTargetTelemetryKey key) { writer.Write(key.Name); writer.Write(key.IsCustom); writer.Write(key.IsNuget); writer.Write(key.IsMetaProj); } private static TaskOrTargetTelemetryKey ReadFromStream(BinaryReader reader) { return new TaskOrTargetTelemetryKey( reader.ReadString(), reader.ReadBoolean(), reader.ReadBoolean(), reader.ReadBoolean()); } }