PoolMapperTests.cs 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. using NUnit.Framework;
  2. using Ryujinx.Audio.Renderer;
  3. using Ryujinx.Audio.Renderer.Server.MemoryPool;
  4. using System;
  5. using static Ryujinx.Audio.Renderer.Common.BehaviourParameter;
  6. using CpuAddress = System.UInt64;
  7. using DspAddress = System.UInt64;
  8. namespace Ryujinx.Tests.Audio.Renderer.Server
  9. {
  10. class PoolMapperTests
  11. {
  12. private const uint DummyProcessHandle = 0xCAFEBABE;
  13. [Test]
  14. public void TestInitializeSystemPool()
  15. {
  16. PoolMapper poolMapper = new PoolMapper(DummyProcessHandle, true);
  17. MemoryPoolState memoryPoolDsp = MemoryPoolState.Create(MemoryPoolState.LocationType.Dsp);
  18. MemoryPoolState memoryPoolCpu = MemoryPoolState.Create(MemoryPoolState.LocationType.Cpu);
  19. const CpuAddress CpuAddress = 0x20000;
  20. const DspAddress DspAddress = CpuAddress; // TODO: DSP LLE
  21. const ulong CpuSize = 0x1000;
  22. Assert.IsFalse(poolMapper.InitializeSystemPool(ref memoryPoolCpu, CpuAddress, CpuSize));
  23. Assert.IsTrue(poolMapper.InitializeSystemPool(ref memoryPoolDsp, CpuAddress, CpuSize));
  24. Assert.AreEqual(CpuAddress, memoryPoolDsp.CpuAddress);
  25. Assert.AreEqual(CpuSize, memoryPoolDsp.Size);
  26. Assert.AreEqual(DspAddress, memoryPoolDsp.DspAddress);
  27. }
  28. [Test]
  29. public void TestGetProcessHandle()
  30. {
  31. PoolMapper poolMapper = new PoolMapper(DummyProcessHandle, true);
  32. MemoryPoolState memoryPoolDsp = MemoryPoolState.Create(MemoryPoolState.LocationType.Dsp);
  33. MemoryPoolState memoryPoolCpu = MemoryPoolState.Create(MemoryPoolState.LocationType.Cpu);
  34. Assert.AreEqual(0xFFFF8001, poolMapper.GetProcessHandle(ref memoryPoolCpu));
  35. Assert.AreEqual(DummyProcessHandle, poolMapper.GetProcessHandle(ref memoryPoolDsp));
  36. }
  37. [Test]
  38. public void TestMappings()
  39. {
  40. PoolMapper poolMapper = new PoolMapper(DummyProcessHandle, true);
  41. MemoryPoolState memoryPoolDsp = MemoryPoolState.Create(MemoryPoolState.LocationType.Dsp);
  42. MemoryPoolState memoryPoolCpu = MemoryPoolState.Create(MemoryPoolState.LocationType.Cpu);
  43. const CpuAddress CpuAddress = 0x20000;
  44. const DspAddress DspAddress = CpuAddress; // TODO: DSP LLE
  45. const ulong CpuSize = 0x1000;
  46. memoryPoolDsp.SetCpuAddress(CpuAddress, CpuSize);
  47. memoryPoolCpu.SetCpuAddress(CpuAddress, CpuSize);
  48. Assert.AreEqual(DspAddress, poolMapper.Map(ref memoryPoolCpu));
  49. Assert.AreEqual(DspAddress, poolMapper.Map(ref memoryPoolDsp));
  50. Assert.AreEqual(DspAddress, memoryPoolDsp.DspAddress);
  51. Assert.IsTrue(poolMapper.Unmap(ref memoryPoolCpu));
  52. memoryPoolDsp.IsUsed = true;
  53. Assert.IsFalse(poolMapper.Unmap(ref memoryPoolDsp));
  54. memoryPoolDsp.IsUsed = false;
  55. Assert.IsTrue(poolMapper.Unmap(ref memoryPoolDsp));
  56. }
  57. [Test]
  58. public void TestTryAttachBuffer()
  59. {
  60. const CpuAddress CpuAddress = 0x20000;
  61. const DspAddress DspAddress = CpuAddress; // TODO: DSP LLE
  62. const ulong CpuSize = 0x1000;
  63. const int MemoryPoolStateArraySize = 0x10;
  64. const CpuAddress CpuAddressRegionEnding = CpuAddress * MemoryPoolStateArraySize;
  65. MemoryPoolState[] memoryPoolStateArray = new MemoryPoolState[MemoryPoolStateArraySize];
  66. for (int i = 0; i < memoryPoolStateArray.Length; i++)
  67. {
  68. memoryPoolStateArray[i] = MemoryPoolState.Create(MemoryPoolState.LocationType.Cpu);
  69. memoryPoolStateArray[i].SetCpuAddress(CpuAddress + (ulong)i * CpuSize, CpuSize);
  70. }
  71. ErrorInfo errorInfo;
  72. AddressInfo addressInfo = AddressInfo.Create();
  73. PoolMapper poolMapper = new PoolMapper(DummyProcessHandle, true);
  74. Assert.IsTrue(poolMapper.TryAttachBuffer(out errorInfo, ref addressInfo, 0, 0));
  75. Assert.AreEqual(ResultCode.InvalidAddressInfo, errorInfo.ErrorCode);
  76. Assert.AreEqual(0, errorInfo.ExtraErrorInfo);
  77. Assert.AreEqual(0, addressInfo.ForceMappedDspAddress);
  78. Assert.IsTrue(poolMapper.TryAttachBuffer(out errorInfo, ref addressInfo, CpuAddress, CpuSize));
  79. Assert.AreEqual(ResultCode.InvalidAddressInfo, errorInfo.ErrorCode);
  80. Assert.AreEqual(CpuAddress, errorInfo.ExtraErrorInfo);
  81. Assert.AreEqual(DspAddress, addressInfo.ForceMappedDspAddress);
  82. poolMapper = new PoolMapper(DummyProcessHandle, false);
  83. Assert.IsFalse(poolMapper.TryAttachBuffer(out errorInfo, ref addressInfo, 0, 0));
  84. addressInfo.ForceMappedDspAddress = 0;
  85. Assert.IsFalse(poolMapper.TryAttachBuffer(out errorInfo, ref addressInfo, CpuAddress, CpuSize));
  86. Assert.AreEqual(ResultCode.InvalidAddressInfo, errorInfo.ErrorCode);
  87. Assert.AreEqual(CpuAddress, errorInfo.ExtraErrorInfo);
  88. Assert.AreEqual(0, addressInfo.ForceMappedDspAddress);
  89. poolMapper = new PoolMapper(DummyProcessHandle, memoryPoolStateArray.AsMemory(), false);
  90. Assert.IsFalse(poolMapper.TryAttachBuffer(out errorInfo, ref addressInfo, CpuAddressRegionEnding, CpuSize));
  91. Assert.AreEqual(ResultCode.InvalidAddressInfo, errorInfo.ErrorCode);
  92. Assert.AreEqual(CpuAddressRegionEnding, errorInfo.ExtraErrorInfo);
  93. Assert.AreEqual(0, addressInfo.ForceMappedDspAddress);
  94. Assert.IsFalse(addressInfo.HasMemoryPoolState);
  95. Assert.IsTrue(poolMapper.TryAttachBuffer(out errorInfo, ref addressInfo, CpuAddress, CpuSize));
  96. Assert.AreEqual(ResultCode.Success, errorInfo.ErrorCode);
  97. Assert.AreEqual(0, errorInfo.ExtraErrorInfo);
  98. Assert.AreEqual(0, addressInfo.ForceMappedDspAddress);
  99. Assert.IsTrue(addressInfo.HasMemoryPoolState);
  100. }
  101. }
  102. }