Skip to content

Commit b0add6b

Browse files
committed
feat: native disposable impl
1 parent 135eed3 commit b0add6b

File tree

2 files changed

+48
-2
lines changed

2 files changed

+48
-2
lines changed

Runtime/Triangulator.cs

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ public readonly struct Handle
467467
/// </remarks>
468468
/// <seealso cref="Triangulator{T2}"/>
469469
/// <seealso cref="UnsafeTriangulator{T2}"/>
470-
public class Triangulator : IDisposable
470+
public class Triangulator : INativeDisposable
471471
{
472472
/// <summary>
473473
/// Settings used for triangulation.
@@ -499,6 +499,18 @@ public class Triangulator : IDisposable
499499
/// </summary>
500500
public void Dispose() => impl.Dispose();
501501

502+
/// <summary>
503+
/// Creates and schedules a job that releases all resources (memory and safety handles).
504+
/// </summary>
505+
/// <param name="dependencies">The dependency for the new job.</param>
506+
/// <remarks>
507+
/// Note: Consider using <see cref="UnsafeTriangulator"/>, which provides more customization for data management.
508+
/// </remarks>
509+
/// <returns>
510+
/// The handle of the new job. The job depends upon <paramref name="dependencies"/> and releases all resources (memory and safety handles).
511+
/// </returns>
512+
public JobHandle Dispose(JobHandle dependencies) => impl.Dispose(dependencies);
513+
502514
/// <summary>
503515
/// Perform the job's Execute method immediately on the same thread.
504516
/// </summary>
@@ -556,7 +568,7 @@ public class Triangulator : IDisposable
556568
/// <seealso cref="Triangulator"/>
557569
/// <seealso cref="UnsafeTriangulator{T2}"/>
558570
/// <seealso cref="Extensions"/>
559-
public class Triangulator<T2> : IDisposable where T2 : unmanaged
571+
public class Triangulator<T2> : INativeDisposable where T2 : unmanaged
560572
{
561573
/// <summary>
562574
/// Settings used for triangulation.
@@ -614,6 +626,27 @@ public void Dispose()
614626
constrainedHalfedges.Dispose();
615627
ignoredHalfedgesForPlantingSeeds.Dispose();
616628
}
629+
630+
/// <summary>
631+
/// Creates and schedules a job that releases all resources (memory and safety handles).
632+
/// </summary>
633+
/// <param name="dependencies">The dependency for the new job.</param>
634+
/// <remarks>
635+
/// Note: Consider using <see cref="UnsafeTriangulator"/>, which provides more customization for data management.
636+
/// </remarks>
637+
/// <returns>
638+
/// The handle of the new job. The job depends upon <paramref name="dependencies"/> and releases all resources (memory and safety handles).
639+
/// </returns>
640+
public JobHandle Dispose(JobHandle dependencies)
641+
{
642+
dependencies = outputPositions.Dispose(dependencies);
643+
dependencies = triangles.Dispose(dependencies);
644+
dependencies = status.Dispose(dependencies);
645+
dependencies = halfedges.Dispose(dependencies);
646+
dependencies = constrainedHalfedges.Dispose(dependencies);
647+
dependencies = ignoredHalfedgesForPlantingSeeds.Dispose(dependencies);
648+
return dependencies;
649+
}
617650
}
618651

619652
/// <summary>

Tests/TriangulatorEditorTests.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,5 +125,18 @@ public void DisposeLeaksTest()
125125
var leaks = Unity.Collections.LowLevel.Unsafe.UnsafeUtility.CheckForLeaks();
126126
Assert.That(leaks, Is.Zero);
127127
}
128+
129+
[Test, Description("Checks for memory leaks during Triangulator allocation and disposal (with dependencies).")]
130+
public void DisposeLeaksWithDependenciesTest()
131+
{
132+
// Log and forgive any existing leaks before the test.
133+
// Note: These leaks may not be related to Triangulator and could be caused by other internal systems (e.g., UIElements).
134+
Unity.Collections.LowLevel.Unsafe.UnsafeUtility.CheckForLeaks();
135+
var dependencies = default(JobHandle);
136+
dependencies = new Triangulator(Allocator.Persistent).Dispose(dependencies);
137+
dependencies.Complete();
138+
var leaks = Unity.Collections.LowLevel.Unsafe.UnsafeUtility.CheckForLeaks();
139+
Assert.That(leaks, Is.Zero);
140+
}
128141
}
129142
}

0 commit comments

Comments
 (0)