refactor activity monitor

This commit is contained in:
Matt Parker
2025-12-05 18:36:16 +10:00
parent a1dfd41d5e
commit cffe141c6e
2 changed files with 7 additions and 12 deletions

View File

@@ -6,8 +6,7 @@ namespace SharpIDE.Godot.Features.ActivityListener;
public class ActivityMonitor public class ActivityMonitor
{ {
public EventWrapper<Activity, Task> ActivityStarted { get; } = new(_ => Task.CompletedTask); public EventWrapper<Activity, Task> ActivityChanged { get; } = new(_ => Task.CompletedTask);
public EventWrapper<Activity, Task> ActivityStopped { get; } = new(_ => Task.CompletedTask);
public ActivityMonitor() public ActivityMonitor()
{ {
@@ -15,8 +14,8 @@ public class ActivityMonitor
{ {
ShouldListenTo = source => source == SharpIdeOtel.Source, ShouldListenTo = source => source == SharpIdeOtel.Source,
Sample = (ref ActivityCreationOptions<ActivityContext> _) => ActivitySamplingResult.PropagationData, Sample = (ref ActivityCreationOptions<ActivityContext> _) => ActivitySamplingResult.PropagationData,
ActivityStarted = activity => ActivityStarted.InvokeParallelFireAndForget(activity), ActivityStarted = activity => ActivityChanged.InvokeParallelFireAndForget(activity),
ActivityStopped = activity => ActivityStopped.InvokeParallelFireAndForget(activity), ActivityStopped = activity => ActivityChanged.InvokeParallelFireAndForget(activity),
}; };
ActivitySource.AddActivityListener(listener); ActivitySource.AddActivityListener(listener);

View File

@@ -23,21 +23,17 @@ public partial class RunningTasksDisplay : HBoxContainer
_solutionLoadingLabel = GetNode<Label>("%SolutionLoadingLabel"); _solutionLoadingLabel = GetNode<Label>("%SolutionLoadingLabel");
_solutionDiagnosticsLabel = GetNode<Label>("%SolutionDiagnosticsLabel"); _solutionDiagnosticsLabel = GetNode<Label>("%SolutionDiagnosticsLabel");
Visible = false; Visible = false;
_activityMonitor.ActivityStarted.Subscribe(OnActivityStarted); _activityMonitor.ActivityChanged.Subscribe(OnActivityChanged);
_activityMonitor.ActivityStopped.Subscribe(OnActivityStopped);
} }
public override void _ExitTree() public override void _ExitTree()
{ {
_activityMonitor.ActivityStarted.Unsubscribe(OnActivityStarted); _activityMonitor.ActivityChanged.Unsubscribe(OnActivityChanged);
_activityMonitor.ActivityStopped.Unsubscribe(OnActivityStopped);
} }
private async Task OnActivityStarted(Activity activity) => await OnActivityChanged(activity, true); private async Task OnActivityChanged(Activity activity)
private async Task OnActivityStopped(Activity activity) => await OnActivityChanged(activity, false);
private async Task OnActivityChanged(Activity activity, bool isOccurring)
{ {
var isOccurring = !activity.IsStopped;
if (activity.DisplayName == $"{nameof(RoslynAnalysis)}.{nameof(RoslynAnalysis.UpdateSolutionDiagnostics)}") if (activity.DisplayName == $"{nameof(RoslynAnalysis)}.{nameof(RoslynAnalysis.UpdateSolutionDiagnostics)}")
{ {
_isSolutionDiagnosticsBeingRetrieved = isOccurring; _isSolutionDiagnosticsBeingRetrieved = isOccurring;