0
0
Fork 0

[Ryujinx.Tests.Memory] Address dotnet-format issues (#5390)

* dotnet format style --severity info

Some changes were manually reverted.

* dotnet format analyzers --serverity info

Some changes have been minimally adapted.

* Restore a few unused methods and variables

* Silence dotnet format IDE0060 warnings

* Address dotnet format CA1822 warnings

* Address most dotnet format whitespace warnings

* Apply dotnet format whitespace formatting

A few of them have been manually reverted and the corresponding warning was silenced

* Add comments to disabled warnings

* Simplify properties and array initialization, Use const when possible, Remove trailing commas

* Silence IDE0060 in .editorconfig

* Revert "Simplify properties and array initialization, Use const when possible, Remove trailing commas"

This reverts commit 9462e4136c0a2100dc28b20cf9542e06790aa67e.

* dotnet format whitespace after rebase

* Final dotnet format pass and fix naming rule violations

* Apply suggestions from code review

Co-authored-by: Ac_K <Acoustik666@gmail.com>

* Remove unused constant

---------

Co-authored-by: Ac_K <Acoustik666@gmail.com>
This commit is contained in:
TSRBerry 2023-06-25 18:37:53 +02:00 committed by GitHub
parent bc53d00463
commit 2b2ce68f07
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 37 additions and 36 deletions

View file

@ -9,8 +9,6 @@ namespace Ryujinx.Tests.Memory
{
public class MultiRegionTrackingTests
{
private const int RndCnt = 3;
private const ulong MemorySize = 0x8000;
private const int PageSize = 4096;
@ -39,7 +37,7 @@ namespace Ryujinx.Tests.Memory
(IMultiRegionHandle)_tracking.BeginGranularTracking(address, size, null, granularity, 0);
}
private void RandomOrder(Random random, List<int> indices, Action<int> action)
private static void RandomOrder(Random random, List<int> indices, Action<int> action)
{
List<int> choices = indices.ToList();
@ -51,7 +49,7 @@ namespace Ryujinx.Tests.Memory
}
}
private int ExpectQueryInOrder(IMultiRegionHandle handle, ulong startAddress, ulong size, Func<ulong, bool> addressPredicate)
private static int ExpectQueryInOrder(IMultiRegionHandle handle, ulong startAddress, ulong size, Func<ulong, bool> addressPredicate)
{
int regionCount = 0;
ulong lastAddress = startAddress;
@ -67,7 +65,7 @@ namespace Ryujinx.Tests.Memory
return regionCount;
}
private int ExpectQueryInOrder(IMultiRegionHandle handle, ulong startAddress, ulong size, Func<ulong, bool> addressPredicate, int sequenceNumber)
private static int ExpectQueryInOrder(IMultiRegionHandle handle, ulong startAddress, ulong size, Func<ulong, bool> addressPredicate, int sequenceNumber)
{
int regionCount = 0;
ulong lastAddress = startAddress;
@ -83,9 +81,9 @@ namespace Ryujinx.Tests.Memory
return regionCount;
}
private void PreparePages(IMultiRegionHandle handle, int pageCount, ulong address = 0)
private static void PreparePages(IMultiRegionHandle handle, int pageCount, ulong address = 0)
{
Random random = new Random();
Random random = new();
// Make sure the list has minimum granularity (smart region changes granularity based on requested ranges)
RandomOrder(random, Enumerable.Range(0, pageCount).ToList(), (i) =>
@ -105,7 +103,7 @@ namespace Ryujinx.Tests.Memory
const int pageCount = 32;
IMultiRegionHandle handle = GetGranular(smart, 0, PageSize * pageCount, PageSize);
Random random = new Random();
Random random = new();
PreparePages(handle, pageCount);
@ -149,7 +147,7 @@ namespace Ryujinx.Tests.Memory
PreparePages(handle, pageCount);
Random random = new Random();
Random random = new();
IEnumerable<int> halfRange = Enumerable.Range(0, pageCount / 2);
List<int> odd = halfRange.Select(x => x * 2 + 1).ToList();
@ -240,7 +238,8 @@ namespace Ryujinx.Tests.Memory
ulong expectedAddress = 0;
// Expect each region to trigger in its entirety, in address ascending order.
handle.QueryModified((address, size) => {
handle.QueryModified((address, size) =>
{
int region = regionSizes[regionInd++];
Assert.AreEqual(address, expectedAddress);
@ -437,4 +436,4 @@ namespace Ryujinx.Tests.Memory
Assert.AreEqual(pagesModified, new bool[] { true, false, false });
}
}
}
}

View file

@ -7,14 +7,14 @@ namespace Ryujinx.Tests.Memory
{
public class Tests
{
private static readonly ulong MemorySize = MemoryBlock.GetPageSize() * 8;
private static readonly ulong _memorySize = MemoryBlock.GetPageSize() * 8;
private MemoryBlock _memoryBlock;
[SetUp]
public void Setup()
{
_memoryBlock = new MemoryBlock(MemorySize);
_memoryBlock = new MemoryBlock(_memorySize);
}
[TearDown]
@ -47,8 +47,8 @@ namespace Ryujinx.Tests.Memory
ulong pageSize = MemoryBlock.GetPageSize();
ulong blockSize = MemoryBlock.GetPageSize() * 16;
using MemoryBlock backing = new MemoryBlock(blockSize, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new MemoryBlock(blockSize, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);
using MemoryBlock backing = new(blockSize, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new(blockSize, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);
toAlias.MapView(backing, pageSize, 0, pageSize * 4);
toAlias.UnmapView(backing, pageSize * 3, pageSize);
@ -66,10 +66,10 @@ namespace Ryujinx.Tests.Memory
int pageBits = (int)ulong.Log2(pageSize);
ulong blockSize = MemoryBlock.GetPageSize() * 128;
using MemoryBlock backing = new MemoryBlock(blockSize, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new MemoryBlock(blockSize, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);
using MemoryBlock backing = new(blockSize, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new(blockSize, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);
Random rng = new Random(123);
Random rng = new(123);
for (int i = 0; i < 20000; i++)
{
@ -101,8 +101,8 @@ namespace Ryujinx.Tests.Memory
ulong pageSize = MemoryBlock.GetPageSize();
ulong size = 100000 * pageSize; // The mappings limit on Linux is usually around 65K, so let's make sure we are above that.
using MemoryBlock backing = new MemoryBlock(pageSize, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new MemoryBlock(size, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);
using MemoryBlock backing = new(pageSize, MemoryAllocationFlags.Mirrorable);
using MemoryBlock toAlias = new(size, MemoryAllocationFlags.Reserve | MemoryAllocationFlags.ViewCompatible);
for (ulong offset = 0; offset < size; offset += pageSize)
{
@ -115,4 +115,4 @@ namespace Ryujinx.Tests.Memory
}
}
}
}
}

View file

@ -102,15 +102,17 @@ namespace Ryujinx.Tests.Memory
allHandle.Reprotect();
(ulong address, ulong size)? readTrackingTriggeredAll = null;
Action registerReadAction = () =>
void RegisterReadAction()
{
readTrackingTriggeredAll = null;
allHandle.RegisterAction((address, size) =>
{
readTrackingTriggeredAll = (address, size);
});
};
registerReadAction();
}
RegisterReadAction();
// Create 16 page sized handles contained within the allHandle.
RegionHandle[] containedHandles = new RegionHandle[16];
@ -149,7 +151,7 @@ namespace Ryujinx.Tests.Memory
}
// Clear flags and reset read action.
registerReadAction();
RegisterReadAction();
allHandle.Reprotect();
containedHandles[i].Reprotect();
}
@ -157,8 +159,8 @@ namespace Ryujinx.Tests.Memory
[Test]
public void PageAlignment(
[Values(1ul, 512ul, 2048ul, 4096ul, 65536ul)] [Random(1ul, 65536ul, RndCnt)] ulong address,
[Values(1ul, 4ul, 1024ul, 4096ul, 65536ul)] [Random(1ul, 65536ul, RndCnt)] ulong size)
[Values(1ul, 512ul, 2048ul, 4096ul, 65536ul)][Random(1ul, 65536ul, RndCnt)] ulong address,
[Values(1ul, 4ul, 1024ul, 4096ul, 65536ul)][Random(1ul, 65536ul, RndCnt)] ulong size)
{
ulong alignedStart = (address / PageSize) * PageSize;
ulong alignedEnd = ((address + size + PageSize - 1) / PageSize) * PageSize;
@ -204,7 +206,7 @@ namespace Ryujinx.Tests.Memory
long finishedTime = 0;
RegionHandle[] handles = new RegionHandle[threadCount * handlesPerThread];
Random globalRand = new Random();
Random globalRand = new();
for (int i = 0; i < handles.Length; i++)
{
@ -212,7 +214,7 @@ namespace Ryujinx.Tests.Memory
handles[i].Reprotect();
}
List<Thread> testThreads = new List<Thread>();
List<Thread> testThreads = new();
// Dirty flag consumer threads
int dirtyFlagReprotects = 0;
@ -224,7 +226,7 @@ namespace Ryujinx.Tests.Memory
int handleBase = randSeed * handlesPerThread;
while (Stopwatch.GetTimestamp() < finishedTime)
{
Random random = new Random(randSeed);
Random random = new(randSeed);
RegionHandle handle = handles[handleBase + random.Next(handlesPerThread)];
if (handle.Dirty)
@ -243,7 +245,7 @@ namespace Ryujinx.Tests.Memory
int randSeed = i;
testThreads.Add(new Thread(() =>
{
Random random = new Random(randSeed);
Random random = new(randSeed);
ulong handleBase = (ulong)(randSeed * handlesPerThread * PageSize);
while (Stopwatch.GetTimestamp() < finishedTime)
{
@ -261,7 +263,7 @@ namespace Ryujinx.Tests.Memory
testThreads.Add(new Thread(() =>
{
int maxAddress = threadCount * handlesPerThread * PageSize;
Random random = new Random(randSeed + 512);
Random random = new(randSeed + 512);
while (Stopwatch.GetTimestamp() < finishedTime)
{
RegionHandle handle = _tracking.BeginTracking((ulong)random.Next(maxAddress), (ulong)random.Next(65536), 0);
@ -303,7 +305,7 @@ namespace Ryujinx.Tests.Memory
int signalThreadsDone = 0;
bool isRegistered = false;
Action registerReadAction = () =>
void RegisterReadAction()
{
registeredCount++;
handle.RegisterAction((address, size) =>
@ -311,7 +313,7 @@ namespace Ryujinx.Tests.Memory
isRegistered = false;
Interlocked.Increment(ref triggeredCount);
});
};
}
const int threadCount = 16;
const int iterationCount = 10000;
@ -322,7 +324,7 @@ namespace Ryujinx.Tests.Memory
int randSeed = i;
signalThreads[i] = new Thread(() =>
{
Random random = new Random(randSeed);
Random random = new(randSeed);
for (int j = 0; j < iterationCount; j++)
{
_tracking.VirtualMemoryEvent((ulong)random.Next(PageSize), 4, false);
@ -346,7 +348,7 @@ namespace Ryujinx.Tests.Memory
if (!isRegistered)
{
isRegistered = true;
registerReadAction();
RegisterReadAction();
}
}