baseline: OpenMU upstream b5a0961 (fresh source)
This commit is contained in:
100
tests/MUnique.OpenMU.GameLogic.Benchmarks/PartyBenchmarks.cs
Normal file
100
tests/MUnique.OpenMU.GameLogic.Benchmarks/PartyBenchmarks.cs
Normal file
@@ -0,0 +1,100 @@
|
||||
// <copyright file="PartyBenchmarks.cs" company="MUnique">
|
||||
// Licensed under the MIT License. See LICENSE file in the project root for full license information.
|
||||
// </copyright>
|
||||
|
||||
namespace MUnique.OpenMU.GameLogic.Benchmarks;
|
||||
|
||||
using Microsoft.Extensions.Logging.Abstractions;
|
||||
using Moq;
|
||||
using MUnique.OpenMU.AttributeSystem;
|
||||
using MUnique.OpenMU.GameLogic;
|
||||
using MUnique.OpenMU.GameLogic.Attributes;
|
||||
using MUnique.OpenMU.GameLogic.Benchmarks.Helpers;
|
||||
|
||||
/// <summary>
|
||||
/// Benchmarks for <see cref="Party"/> class methods related to XP distribution and item drops.
|
||||
/// </summary>
|
||||
[MemoryDiagnoser]
|
||||
[ThreadingDiagnoser]
|
||||
[InvocationCount(100)]
|
||||
public class PartyBenchmarks
|
||||
{
|
||||
private Party _party = null!;
|
||||
private Player _killer = null!;
|
||||
private IAttackable _killedObject = null!;
|
||||
private List<Player> _players = null!;
|
||||
|
||||
/// <summary>
|
||||
/// Sets up the benchmark by creating a party with 5 players.
|
||||
/// </summary>
|
||||
[GlobalSetup]
|
||||
public async Task Setup()
|
||||
{
|
||||
var partyManager = new PartyManager(5, new NullLogger<Party>());
|
||||
_party = new Party(partyManager, 5, new NullLogger<Party>());
|
||||
|
||||
_players = new List<Player>();
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
var player = await PlayerTestHelper.CreatePlayerAsync();
|
||||
await player.PlayerState.TryAdvanceToAsync(PlayerState.EnteredWorld).ConfigureAwait(false);
|
||||
if (player.Attributes is { } attrs)
|
||||
{
|
||||
attrs[Stats.Level] = (short)(100 + i);
|
||||
}
|
||||
|
||||
_players.Add(player);
|
||||
await _party.AddAsync(player).ConfigureAwait(false);
|
||||
}
|
||||
|
||||
_killer = _players[0];
|
||||
foreach (var player in _players)
|
||||
{
|
||||
_killer.Observers.Add(player);
|
||||
}
|
||||
|
||||
_killedObject = CreateMockAttackable(50);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Benchmarks the <see cref="Party.DistributeExperienceAfterKillAsync"/> method.
|
||||
/// </summary>
|
||||
[Benchmark]
|
||||
public async ValueTask DistributeExperienceAfterKillAsync()
|
||||
{
|
||||
await _party.DistributeExperienceAfterKillAsync(_killedObject, _killer);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Benchmarks the <see cref="Party.DistributeMoneyAfterKillAsync"/> method.
|
||||
/// </summary>
|
||||
[Benchmark]
|
||||
public async ValueTask DistributeMoneyAfterKillAsync()
|
||||
{
|
||||
await _party.DistributeMoneyAfterKillAsync(_killedObject, _killer, 10000);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Benchmarks the <see cref="Party.GetQuestDropItemGroupsAsync"/> method.
|
||||
/// </summary>
|
||||
[Benchmark]
|
||||
public async ValueTask GetQuestDropItemGroupsAsync()
|
||||
{
|
||||
await _party.GetQuestDropItemGroupsAsync(_killer);
|
||||
}
|
||||
|
||||
private static IAttackable CreateMockAttackable(float level)
|
||||
{
|
||||
var attributes = new Mock<IAttributeSystem>();
|
||||
attributes.Setup(a => a[Stats.Level]).Returns(level);
|
||||
|
||||
var result = new Mock<IAttackable>();
|
||||
result.SetupAllProperties();
|
||||
result.SetupGet(a => a.Attributes).Returns(attributes.Object);
|
||||
|
||||
GameMap? nullMap = null;
|
||||
result.SetupGet(a => a.CurrentMap).Returns(nullMap);
|
||||
|
||||
return result.Object;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user