UnityGame/Library/PackageCache/com.unity.collections/Unity.Collections.PerformanceTests/UnsafeStreamPerformanceTests.cs
2024-10-27 10:53:47 +03:00

73 lines
2.0 KiB
C#

using NUnit.Framework;
using System;
using Unity.Burst;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using Unity.PerformanceTesting;
namespace Unity.Collections.PerformanceTests
{
internal class UnsafeStreamPerformanceTests
{
[BurstCompile]
private class Pointers
{
[BurstCompile(CompileSynchronously = true)]
public static void StreamWrite(ref UnsafeStream stream, int numElements)
{
var writer = stream.AsWriter();
for (int i = 0; i < numElements; ++i)
{
writer.Write(i);
}
}
public delegate void StreamWriteDelegate(ref UnsafeStream stream, int numElements);
}
[Test, Performance]
[Category("Performance")]
public void UnsafeStream_Performance_Write()
{
const int numElements = 16 << 10;
var stream = new UnsafeStream(1, Allocator.Persistent);
var writer = stream.AsWriter();
Measure.Method(() =>
{
for (int i = 0; i < numElements; ++i)
{
writer.Write(i);
}
})
.WarmupCount(100)
.MeasurementCount(1000)
.Run();
stream.Dispose();
}
[Test, Performance]
[Category("Performance")]
public void UnsafeStream_Performance_Write_Burst()
{
const int numElements = 16 << 10;
var stream = new UnsafeStream(1, Allocator.Persistent);
var funcPtr = BurstCompiler.CompileFunctionPointer<Pointers.StreamWriteDelegate>(Pointers.StreamWrite);
Measure.Method(() => { funcPtr.Invoke(ref stream, numElements); })
.WarmupCount(100)
.MeasurementCount(1000)
.Run();
stream.Dispose();
}
}
}