Skip to content
This repository was archived by the owner on Jan 23, 2023. It is now read-only.

Commit d66a9cd

Browse files
authored
Add more ValueTask perf tests (#28937)
1 parent e3674c0 commit d66a9cd

File tree

4 files changed

+76
-1
lines changed

4 files changed

+76
-1
lines changed

src/System.Threading.Tasks.Extensions/tests/ManualResetValueTaskSource.cs renamed to src/Common/tests/System/Threading/Tasks/Sources/ManualResetValueTaskSource.cs

File renamed without changes.

src/System.Threading.Tasks.Extensions/tests/Performance/Perf.ValueTask.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// See the LICENSE file in the project root for more information.
44

55
using System.Runtime.CompilerServices;
6+
using System.Threading.Tasks.Sources;
7+
using System.Threading.Tasks.Tests;
68
using Microsoft.Xunit.Performance;
79
using Xunit;
810

@@ -44,6 +46,23 @@ public async Task Await_FromCompletedTask()
4446
}
4547
}
4648

49+
[Benchmark(InnerIterationCount = 10_000_000), MeasureGCAllocations]
50+
public async Task Await_FromCompletedValueTaskSource()
51+
{
52+
ValueTask<int> vt = new ValueTask<int>(ManualResetValueTaskSource.Completed<int>(42), 0);
53+
foreach (BenchmarkIteration iteration in Benchmark.Iterations)
54+
{
55+
long iters = Benchmark.InnerIterationCount;
56+
using (iteration.StartMeasurement())
57+
{
58+
for (long i = 0; i < iters; i++)
59+
{
60+
await vt;
61+
}
62+
}
63+
}
64+
}
65+
4766
[Benchmark(InnerIterationCount = 10_000_000), MeasureGCAllocations]
4867
public async Task CreateAndAwait_FromResult()
4968
{
@@ -110,6 +129,40 @@ public async Task CreateAndAwait_FromCompletedTask_ConfigureAwait()
110129
}
111130
}
112131

132+
[Benchmark(InnerIterationCount = 10_000_000), MeasureGCAllocations]
133+
public async Task CreateAndAwait_FromCompletedValueTaskSource()
134+
{
135+
IValueTaskSource<int> vts = ManualResetValueTaskSource.Completed(42);
136+
foreach (BenchmarkIteration iteration in Benchmark.Iterations)
137+
{
138+
long iters = Benchmark.InnerIterationCount;
139+
using (iteration.StartMeasurement())
140+
{
141+
for (long i = 0; i < iters; i++)
142+
{
143+
await new ValueTask<int>(vts, 0);
144+
}
145+
}
146+
}
147+
}
148+
149+
[Benchmark(InnerIterationCount = 10_000_000), MeasureGCAllocations]
150+
public async Task CreateAndAwait_FromCompletedValueTaskSource_ConfigureAwait()
151+
{
152+
IValueTaskSource<int> vts = ManualResetValueTaskSource.Completed(42);
153+
foreach (BenchmarkIteration iteration in Benchmark.Iterations)
154+
{
155+
long iters = Benchmark.InnerIterationCount;
156+
using (iteration.StartMeasurement())
157+
{
158+
for (long i = 0; i < iters; i++)
159+
{
160+
await new ValueTask<int>(vts, 0).ConfigureAwait(false);
161+
}
162+
}
163+
}
164+
}
165+
113166
[Benchmark(InnerIterationCount = 1_000_000), MeasureGCAllocations]
114167
public async Task CreateAndAwait_FromYieldingAsyncMethod()
115168
{
@@ -179,6 +232,23 @@ public void Copy_PassAsArgumentAndReturn_FromTask()
179232
}
180233
}
181234

235+
[Benchmark(InnerIterationCount = 10_000_000), MeasureGCAllocations]
236+
public void Copy_PassAsArgumentAndReturn_FromValueTaskSource()
237+
{
238+
ValueTask<int> vt = new ValueTask<int>(ManualResetValueTaskSource.Completed(42), 0);
239+
foreach (BenchmarkIteration iteration in Benchmark.Iterations)
240+
{
241+
long iters = Benchmark.InnerIterationCount;
242+
using (iteration.StartMeasurement())
243+
{
244+
for (long i = 0; i < iters; i++)
245+
{
246+
vt = ReturnValueTask(vt);
247+
}
248+
}
249+
}
250+
}
251+
182252
[MethodImpl(MethodImplOptions.NoInlining)]
183253
private static ValueTask<int> ReturnValueTask(ValueTask<int> vt) => vt;
184254

src/System.Threading.Tasks.Extensions/tests/Performance/System.Threading.Tasks.Extensions.Performance.Tests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@
1313
<Compile Include="$(CommonTestPath)\System\PerfUtils.cs">
1414
<Link>Common\System\PerfUtils.cs</Link>
1515
</Compile>
16+
<Compile Include="$(CommonTestPath)\System\Threading\Tasks\Sources\ManualResetValueTaskSource.cs">
17+
<Link>Common\System\Threading\Tasks\Sources\ManualResetValueTaskSource.cs</Link>
18+
</Compile>
1619
</ItemGroup>
1720
<ItemGroup>
1821
<ProjectReference Include="$(CommonPath)\..\perf\PerfRunner\PerfRunner.csproj">

src/System.Threading.Tasks.Extensions/tests/System.Threading.Tasks.Extensions.Tests.csproj

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@
1313
<ItemGroup>
1414
<Compile Include="AsyncMethodBuilderAttributeTests.cs" />
1515
<Compile Include="AsyncValueTaskMethodBuilderTests.cs" />
16-
<Compile Include="ManualResetValueTaskSource.cs" />
1716
<Compile Include="ValueTaskTests.cs" />
17+
<Compile Include="$(CommonTestPath)\System\Threading\Tasks\Sources\ManualResetValueTaskSource.cs">
18+
<Link>Common\System\Threading\Tasks\Sources\ManualResetValueTaskSource.cs</Link>
19+
</Compile>
1820
</ItemGroup>
1921
<ItemGroup>
2022
<Service Include="{82A7F48D-3B50-4B1E-B82E-3ADA8210C358}" />

0 commit comments

Comments
 (0)