Skip to content

Commit 2248a7a

Browse files
authored
Experimental new tracing (#286)
1 parent 8f1096b commit 2248a7a

File tree

2 files changed

+44
-0
lines changed

2 files changed

+44
-0
lines changed
+42
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
using System.Collections.Concurrent;
2+
using Microsoft.Build.Framework;
3+
using Microsoft.Build.Logging;
4+
5+
namespace Buildalyzer;
6+
7+
[DebuggerDisplay("Count = {Count}")]
8+
[DebuggerTypeProxy(typeof(Diagnostics.CollectionDebugView<BuildEventArgs>))]
9+
internal sealed class BuildEventArgsCollector : IReadOnlyCollection<BuildEventArgs>, IDisposable
10+
{
11+
public BuildEventArgsCollector(EventArgsDispatcher server)
12+
{
13+
Server = server;
14+
Server.AnyEventRaised += EventRaised;
15+
}
16+
17+
/// <inheritdoc />
18+
public int Count => Bag.Count;
19+
20+
/// <inheritdoc />
21+
public IEnumerator<BuildEventArgs> GetEnumerator() => Bag.GetEnumerator();
22+
23+
/// <inheritdoc />
24+
IEnumerator IEnumerable.GetEnumerator() => GetEnumerator();
25+
26+
private void EventRaised(object? sender, BuildEventArgs e) => Bag.Add(e);
27+
28+
private readonly EventArgsDispatcher Server;
29+
30+
private readonly ConcurrentBag<BuildEventArgs> Bag = [];
31+
32+
public void Dispose()
33+
{
34+
if (!Disposed)
35+
{
36+
Server.AnyEventRaised -= EventRaised;
37+
Disposed = true;
38+
}
39+
}
40+
41+
private bool Disposed;
42+
}

src/Buildalyzer/ProjectAnalyzer.cs

+2
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ void OnPipeLoggerOnAnyEventRaised(object o, BuildEventArgs buildEventArgs)
159159
}
160160

161161
pipeLogger.AnyEventRaised += OnPipeLoggerOnAnyEventRaised;
162+
162163
using var eventProcessor = new EventProcessor(Manager, this, BuildLoggers, pipeLogger, results != null);
163164

164165
// Run MSBuild
@@ -169,6 +170,7 @@ void OnPipeLoggerOnAnyEventRaised(object o, BuildEventArgs buildEventArgs)
169170
targetsToBuild,
170171
pipeLogger.GetClientHandle(),
171172
out string arguments);
173+
172174
using (ProcessRunner processRunner = new ProcessRunner(
173175
fileName,
174176
arguments,

0 commit comments

Comments
 (0)