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

View File

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