Skip to content

Commit

Permalink
refactor & optimize extension methods for host & query
Browse files Browse the repository at this point in the history
  • Loading branch information
sicusa committed Apr 19, 2024
1 parent 086a9e8 commit ecc3536
Show file tree
Hide file tree
Showing 7 changed files with 777 additions and 401 deletions.
338 changes: 225 additions & 113 deletions Sia/Entities/Extensions/EntityHostExtensions.ForEach.cs

Large diffs are not rendered by default.

50 changes: 28 additions & 22 deletions Sia/Entities/Extensions/EntityHostExtensions.Handle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ private readonly record struct HandleData<TData>(

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner>(
this IEntityHost host, EntityHostRangeHandler handler, TRunner runner, RunnerBarrier barrier)
this IEntityHost host, EntityHostRangeHandler handler, TRunner runner, RunnerBarrier? barrier)
where TRunner : IRunner
{
var count = host.Count;
Expand All @@ -24,20 +24,10 @@ public static unsafe void Handle<TRunner>(
barrier);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner>(
this IEntityHost host, EntityHostRangeHandler handler, TRunner runner)
where TRunner : IRunner
{
var barrier = RunnerBarrier.Get();
host.Handle(handler, runner, barrier);
barrier.WaitAndReturn();
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner, TData>(
this IEntityHost host, in TData userData, EntityHostRangeHandler<TData> handler,
TRunner runner, RunnerBarrier barrier)
TRunner runner, RunnerBarrier? barrier)
where TRunner : IRunner
{
var count = host.Count;
Expand All @@ -50,23 +40,39 @@ public static unsafe void Handle<TRunner, TData>(
barrier);
}

#region CurrentThreadRunner

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner, TData>(
this IEntityHost host, in TData userData, EntityHostRangeHandler<TData> handler, TRunner runner)
where TRunner : IRunner
{
var barrier = RunnerBarrier.Get();
host.Handle(userData, handler, runner, barrier);
barrier.WaitAndReturn();
}
public static unsafe void Handle(
this IEntityHost host, EntityHostRangeHandler handler)
=> host.Handle(handler, CurrentThreadRunner.Instance, barrier: null);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TData>(
this IEntityHost host, in TData data, EntityHostRangeHandler<TData> handler)
=> host.Handle(data, handler, CurrentThreadRunner.Instance, barrier: null);

#endregion // CurrentThreadRunner

#region ParallelRunner

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void HandleOnParallel(
this IEntityHost host, EntityHostRangeHandler handler)
=> host.Handle(handler, ParallelRunner.Default);
{
var barrier = RunnerBarrier.Get();
host.Handle(handler, ParallelRunner.Default, barrier);
barrier.WaitAndReturn();
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void HandleOnParallel<TData>(
this IEntityHost host, in TData data, EntityHostRangeHandler<TData> handler)
=> host.Handle(data, handler, ParallelRunner.Default);
{
var barrier = RunnerBarrier.Get();
host.Handle(data, handler, ParallelRunner.Default, barrier);
barrier.WaitAndReturn();
}

#endregion // ParallelRunner
}
180 changes: 120 additions & 60 deletions Sia/Entities/Extensions/EntityHostExtensions.Record.cs

Large diffs are not rendered by default.

340 changes: 226 additions & 114 deletions Sia/Entities/Extensions/EntityQueryExtensions.ForEach.cs

Large diffs are not rendered by default.

40 changes: 14 additions & 26 deletions Sia/Entities/Extensions/EntityQueryExtensions.Handle.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ private static (IEntityHost Host, int HostIndex, int SlotIndex) FindHost(

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner>(
this IEntityQuery query, EntityHostRangeHandler handler, TRunner runner, RunnerBarrier barrier)
this IEntityQuery query, EntityHostRangeHandler handler, TRunner runner, RunnerBarrier? barrier)
where TRunner : IRunner
{
var count = query.Count;
Expand Down Expand Up @@ -66,20 +66,10 @@ static void Action(in HandleData data, (int, int) range)
runner.Run(count, new HandleData(query, handler), Action, barrier);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner>(
this IEntityQuery query, EntityHostRangeHandler handler, TRunner runner)
where TRunner : IRunner
{
var barrier = RunnerBarrier.Get();
query.Handle(handler, runner, barrier);
barrier.WaitAndReturn();
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner, TData>(
this IEntityQuery query, in TData userData, EntityHostRangeHandler<TData> handler,
TRunner runner, RunnerBarrier barrier)
TRunner runner, RunnerBarrier? barrier)
where TRunner : IRunner
{
var count = query.Count;
Expand Down Expand Up @@ -125,27 +115,17 @@ static void Action(in HandleData<TData> data, (int, int) range)
runner.Run(count, data, Action, barrier);
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TRunner, TData>(
this IEntityQuery query, in TData userData, EntityHostRangeHandler<TData> handler, TRunner runner)
where TRunner : IRunner
{
var barrier = RunnerBarrier.Get();
query.Handle(userData, handler, runner, barrier);
barrier.WaitAndReturn();
}

#region CurrentThreadRunner

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle(
this IEntityQuery query, EntityHostRangeHandler handler)
=> query.Handle(handler, CurrentThreadRunner.Instance);
=> query.Handle(handler, CurrentThreadRunner.Instance, barrier: null);

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void Handle<TData>(
this IEntityQuery query, in TData data, EntityHostRangeHandler<TData> handler)
=> query.Handle(data, handler, CurrentThreadRunner.Instance);
=> query.Handle(data, handler, CurrentThreadRunner.Instance, barrier: null);

#endregion // CurrentThreadRunner

Expand All @@ -154,12 +134,20 @@ public static unsafe void Handle<TData>(
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void HandleOnParallel(
this IEntityQuery query, EntityHostRangeHandler handler)
=> query.Handle(handler, ParallelRunner.Default);
{
var barrier = RunnerBarrier.Get();
query.Handle(handler, ParallelRunner.Default, barrier);
barrier.WaitAndReturn();
}

[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void HandleOnParallel<TData>(
this IEntityQuery query, in TData data, EntityHostRangeHandler<TData> handler)
=> query.Handle(data, handler, ParallelRunner.Default);
{
var barrier = RunnerBarrier.Get();
query.Handle(data, handler, ParallelRunner.Default, barrier);
barrier.WaitAndReturn();
}

#endregion // ParallelRunner
}
Loading

0 comments on commit ecc3536

Please sign in to comment.