73 lines
2.0 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|