Skip to content

Commit

Permalink
rework distribution of assemblychanges
Browse files Browse the repository at this point in the history
  • Loading branch information
IXLLEGACYIXL committed Jan 15, 2024
1 parent 594e9a1 commit 3436b3f
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 38 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
using Stride.Core.Extensions;
using Stride.Assets.Presentation.AssetEditors.ScriptEditor;
using Project = Microsoft.CodeAnalysis.Project;
using Accessibility;

namespace Stride.Assets.Presentation.AssetEditors
{
Expand Down Expand Up @@ -63,7 +64,7 @@ public class ProjectWatcher : IDisposable
private Project gameExecutable;

private CancellationTokenSource batchChangesCancellationTokenSource = new CancellationTokenSource();
private Task batchChangesTask;
public IAsyncEnumerable<List<AssemblyChangedEvent>> BatchChange;

private MSBuildWorkspace msbuildWorkspace;

Expand All @@ -84,10 +85,10 @@ public ProjectWatcher(SessionViewModel session, bool trackBinaries = true)
fileChangedLink1 = fileChanged.LinkTo(fileChangedTransform);
fileChangedLink2 = fileChangedTransform.LinkTo(AssemblyChangedBroadcast);

batchChangesTask = BatchChanges();
BatchChange = BatchChanges();
}
public List<AssemblyChangedEvent> Events { get; set; }
private async Task BatchChanges()

private async IAsyncEnumerable<List<AssemblyChangedEvent>> BatchChanges()
{
var buffer = new BufferBlock<AssemblyChangedEvent>();
using (AssemblyChangedBroadcast.LinkTo(buffer))
Expand Down Expand Up @@ -138,19 +139,7 @@ private async Task BatchChanges()
// Merge files that were modified multiple time
assemblyChanges = assemblyChanges.GroupBy(x => x.ChangedFile).Select(x => x.Last()).ToList();

// the assembly changes got allready picked up
if (Events == null)
{
Events = assemblyChanges;
}
// the assembly changes didn't get picked up
else
{
Events.AddRange(assemblyChanges);
}

Events = assemblyChanges;
AssembliesChangedBroadcast.Post(assemblyChanges);
yield return assemblyChanges;
}
}
}
Expand Down Expand Up @@ -178,7 +167,6 @@ public Project CurrentGameLibrary
public void Dispose()
{
batchChangesCancellationTokenSource.Cancel();
batchChangesTask.Wait();

directoryWatcher.Dispose();
fileChangedLink1.Dispose();
Expand Down
33 changes: 13 additions & 20 deletions sources/editor/Stride.GameStudio/ViewModels/DebuggingViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -159,30 +159,23 @@ private void Cleanup()

private async void PullAssemblyChanges([NotNull] ProjectWatcher projectWatcher)
{
var changesBuffer = new BufferBlock<AssemblyChangedEvent>();
using (projectWatcher.AssemblyChangedBroadcast.LinkTo(changesBuffer))
await foreach (var events in projectWatcher.BatchChange)
{
while (!assemblyTrackingCancellation.IsCancellationRequested)
foreach (var assemblyChange in events)
{
while (projectWatcher.Events is null) await Task.Delay(LookUpFrequency);
var events = projectWatcher.Events;
projectWatcher.Events = null;
foreach (var assemblyChange in events)
if (assemblyChange == null || assemblyChange.ChangeType == AssemblyChangeType.Binary)
continue;
modifiedAssemblies[assemblyChange.Assembly] = new ModifiedAssembly
{
if (assemblyChange == null || assemblyChange.ChangeType == AssemblyChangeType.Binary)
continue;
modifiedAssemblies[assemblyChange.Assembly] = new ModifiedAssembly
{
LoadedAssembly = assemblyChange.Assembly,
ChangeType = assemblyChange.ChangeType,
Project = assemblyChange.Project
};
}

var shouldNotify = !assemblyChangesPending;
if (modifiedAssemblies.Count > 0 && shouldNotify)
RunNotifier(true);
LoadedAssembly = assemblyChange.Assembly,
ChangeType = assemblyChange.ChangeType,
Project = assemblyChange.Project
};
}

var shouldNotify = !assemblyChangesPending;
if (modifiedAssemblies.Count > 0 && shouldNotify)
RunNotifier(true);
}
}

Expand Down

0 comments on commit 3436b3f

Please sign in to comment.