diff --git a/src/Ryujinx.Common/Memory/ByteMemoryPool.cs b/src/Ryujinx.Common/Memory/ByteMemoryPool.cs index c7bcb84076..6fd6a98aa7 100644 --- a/src/Ryujinx.Common/Memory/ByteMemoryPool.cs +++ b/src/Ryujinx.Common/Memory/ByteMemoryPool.cs @@ -93,20 +93,6 @@ namespace Ryujinx.Common.Memory return copy; } - /// - /// Copies into a newly rented byte memory buffer. - /// - /// The byte buffer to copy - /// A wrapping the rented memory with copied to it - public static IMemoryOwner RentCopy(ReadOnlySpan buffer) - { - var copy = RentImpl(buffer.Length); - - buffer.CopyTo(copy.Memory.Span); - - return copy; - } - private static ByteMemoryPoolBuffer RentImpl(int length) { if ((uint)length > Array.MaxLength) diff --git a/src/Ryujinx.Common/Memory/BytesReadOnlySequenceSegment.cs b/src/Ryujinx.Common/Memory/BytesReadOnlySequenceSegment.cs deleted file mode 100644 index 9c4cd1ff36..0000000000 --- a/src/Ryujinx.Common/Memory/BytesReadOnlySequenceSegment.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System; -using System.Buffers; - -namespace Ryujinx.Common.Memory -{ - /// - /// A concrete implementation of , - /// with methods to help build a full sequence. - /// - public sealed class BytesReadOnlySequenceSegment : ReadOnlySequenceSegment - { - public BytesReadOnlySequenceSegment(Memory memory) => Memory = memory; - - public BytesReadOnlySequenceSegment Append(Memory memory) - { - var nextSegment = new BytesReadOnlySequenceSegment(memory) - { - RunningIndex = RunningIndex + Memory.Length - }; - - Next = nextSegment; - - return nextSegment; - } - } -} diff --git a/src/Ryujinx.Memory/IVirtualMemoryManager.cs b/src/Ryujinx.Memory/IVirtualMemoryManager.cs index c3bea626dd..96d3e85797 100644 --- a/src/Ryujinx.Memory/IVirtualMemoryManager.cs +++ b/src/Ryujinx.Memory/IVirtualMemoryManager.cs @@ -134,16 +134,6 @@ namespace Ryujinx.Memory /// Throw for unhandled invalid or unmapped memory accesses ReadOnlySequence GetReadOnlySequence(ulong va, int size, bool tracked = false); - /// - /// Gets a read-only sequence of read-only memory blocks from CPU mapped memory. - /// - /// Virtual address of the data - /// Size of the data - /// True if read tracking is triggered on the memory - /// A read-only sequence of read-only memory of the data - /// Throw for unhandled invalid or unmapped memory accesses - ReadOnlySequence GetReadOnlySequence(ulong va, int size, bool tracked = false); - /// /// Gets a read-only span of data from CPU mapped memory. /// diff --git a/src/Ryujinx.Memory/Range/PagedMemoryRangeCoalescingEnumerator.cs b/src/Ryujinx.Memory/Range/PagedMemoryRangeCoalescingEnumerator.cs deleted file mode 100644 index 232bfd8ea8..0000000000 --- a/src/Ryujinx.Memory/Range/PagedMemoryRangeCoalescingEnumerator.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace Ryujinx.Memory.Range -{ - public struct PagedMemoryRangeCoalescingEnumerator - { - private PagedMemoryRangeEnumerator _enumerator; - private MemoryRange? _current; - - public PagedMemoryRangeCoalescingEnumerator(ulong startAddress, int size, int pageSize, Func mapAddress) - { - _enumerator = new PagedMemoryRangeEnumerator(startAddress, size, pageSize, mapAddress); - } - - public readonly MemoryRange Current - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _current!.Value; - } - - /// - /// Returning this through a GetEnumerator() call allows it to be used directly in a foreach loop. - /// - public readonly PagedMemoryRangeCoalescingEnumerator GetEnumerator() => this; - - public bool MoveNext() - { - if (_current is null) - { - if (_enumerator.MoveNext() == false) - { - _current = null; - return false; - } - } - - if (_enumerator.HasCurrent) - { - MemoryRange combinedRange = _enumerator.Current; - - while (_enumerator.MoveNext()) - { - MemoryRange nextRange = _enumerator.Current; - - if (combinedRange.EndAddress == nextRange.Address) - { - combinedRange = new MemoryRange(combinedRange.Address, combinedRange.Size + nextRange.Size); - } - else - { - break; - } - } - - _current = combinedRange; - return true; - } - - _current = null; - return false; - } - } -} diff --git a/src/Ryujinx.Memory/Range/PagedMemoryRangeEnumerator.cs b/src/Ryujinx.Memory/Range/PagedMemoryRangeEnumerator.cs deleted file mode 100644 index 2c1b15df96..0000000000 --- a/src/Ryujinx.Memory/Range/PagedMemoryRangeEnumerator.cs +++ /dev/null @@ -1,78 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace Ryujinx.Memory.Range -{ - public struct PagedMemoryRangeEnumerator - { - private readonly ulong _startAddress; - private readonly int _size; - private readonly int _pageSize; - private readonly ulong _pageMask; - private readonly Func _mapAddress; - private int _offset; - private MemoryRange? _current; - - public PagedMemoryRangeEnumerator(ulong startAddress, int size, int pageSize, Func mapAddress) - { - _startAddress = startAddress; - _size = size; - _pageSize = pageSize; - _pageMask = (ulong)pageSize - 1; - _mapAddress = mapAddress; - _offset = 0; - } - - public readonly MemoryRange Current - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _current!.Value; - } - - internal readonly bool HasCurrent - { - [MethodImpl(MethodImplOptions.AggressiveInlining)] - get => _current.HasValue; - } - - /// - /// Returning this through a GetEnumerator() call allows it to be used directly in a foreach loop. - /// - public readonly PagedMemoryRangeEnumerator GetEnumerator() => this; - - public bool MoveNext() - { - if (_offset == 0 && (_startAddress & _pageMask) != 0) - { - ulong rangeAddress = _mapAddress(_startAddress); - - int rangeSize = Math.Min(_size, _pageSize - (int)(_startAddress & _pageMask)); - - SetCurrent(rangeAddress, rangeSize); - - return true; - } - - if (_offset < _size) - { - ulong rangeAddress = _mapAddress(_startAddress + (ulong)_offset); - - int rangeSize = Math.Min(_size - _offset, _pageSize); - - SetCurrent(rangeAddress, rangeSize); - - return true; - } - - _current = null; - return false; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private void SetCurrent(ulong address, int size) - { - _current = new MemoryRange(address, (ulong)size); - _offset += size; - } - } -} diff --git a/src/Ryujinx.Tests.Memory/RangeTests/PagedMemoryRangeCoalescingEnumeratorTests.cs b/src/Ryujinx.Tests.Memory/RangeTests/PagedMemoryRangeCoalescingEnumeratorTests.cs deleted file mode 100644 index bac9e2bbcf..0000000000 --- a/src/Ryujinx.Tests.Memory/RangeTests/PagedMemoryRangeCoalescingEnumeratorTests.cs +++ /dev/null @@ -1,169 +0,0 @@ -using NUnit.Framework; -using Ryujinx.Memory.Range; -using System.Collections.Generic; - -namespace Ryujinx.Tests.Memory.RangeTests -{ - public class PagedMemoryRangeCoalescingEnumeratorTests - { - [Test] - public void PagedMemoryRangeCoalescingEnumerator_For3AlignedPages_HasCorrectResults() - { - // Arrange - const int StartAddress = 0; - const int Size = 12; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeCoalescingEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(1, results.Count); - - Assert.AreEqual(0, results[0].Address); - Assert.AreEqual(Size, results[0].Size); - } - - [Test] - public void PagedMemoryRangeCoalescingEnumerator_For2PagesWithPartialFirstAndLast_HasCorrectResults() - { - // Arrange - const int StartAddress = 2; - const int Size = 6; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeCoalescingEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(1, results.Count); - - Assert.AreEqual(StartAddress, results[0].Address); - Assert.AreEqual(Size, results[0].Size); - } - - [Test] - public void PagedMemoryRangeCoalescingEnumerator_For4PagesWithPartialFirst_HasCorrectResults() - { - // Arrange - const int StartAddress = 2; - const int Size = 14; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeCoalescingEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(1, results.Count); - - Assert.AreEqual(StartAddress, results[0].Address); - Assert.AreEqual(Size, results[0].Size); - } - - [Test] - public void PagedMemoryRangeCoalescingEnumerator_For4PagesWithPartialLast_HasCorrectResults() - { - // Arrange - const int StartAddress = 0; - const int Size = 14; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeCoalescingEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(1, results.Count); - - Assert.AreEqual(StartAddress, results[0].Address); - Assert.AreEqual(Size, results[0].Size); - } - - [Test] - public void PagedMemoryRangeCoalescingEnumerator_ForPartiallyDiscontiguous4PagesWithPartialLast_HasCorrectResults() - { - // Arrange - const int StartAddress = 0; - const int Size = 14; - const int PageSize = 4; - var memoryMap = new Dictionary() - { - { 0ul, 0ul }, { 4ul, 4ul }, { 8ul, 20ul }, { 12ul, 24ul }, - }; - ulong MemoryMapLookup(ulong a) => memoryMap.TryGetValue(a, out var value) ? value : a; - var enumerator = new PagedMemoryRangeCoalescingEnumerator(StartAddress, Size, PageSize, MemoryMapLookup); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(2, results.Count); - - Assert.AreEqual(0, results[0].Address); - Assert.AreEqual(PageSize * 2, results[0].Size); - - Assert.AreEqual(20, results[1].Address); - Assert.AreEqual(PageSize + (Size % PageSize), results[1].Size); - } - - [Test] - public void PagedMemoryRangeCoalescingEnumerator_ForFullyDiscontiguous4PagesWithPartialLast_HasCorrectResults() - { - // Arrange - const int StartAddress = 0; - const int Size = 14; - const int PageSize = 4; - var memoryMap = new Dictionary() - { - { 0ul, 0ul }, { 4ul, 10ul }, { 8ul, 20ul }, { 12ul, 30ul }, - }; - ulong MemoryMapLookup(ulong a) => memoryMap.TryGetValue(a, out var value) ? value : a; - var enumerator = new PagedMemoryRangeCoalescingEnumerator(StartAddress, Size, PageSize, MemoryMapLookup); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(4, results.Count); - - Assert.AreEqual(0, results[0].Address); - Assert.AreEqual(PageSize, results[0].Size); - - Assert.AreEqual(10, results[1].Address); - Assert.AreEqual(PageSize, results[1].Size); - - Assert.AreEqual(20, results[2].Address); - Assert.AreEqual(PageSize, results[2].Size); - - Assert.AreEqual(30, results[3].Address); - Assert.AreEqual(Size % PageSize, results[3].Size); - } - } -} diff --git a/src/Ryujinx.Tests.Memory/RangeTests/PagedMemoryRangeEnumeratorTests.cs b/src/Ryujinx.Tests.Memory/RangeTests/PagedMemoryRangeEnumeratorTests.cs deleted file mode 100644 index 1da9b02ab9..0000000000 --- a/src/Ryujinx.Tests.Memory/RangeTests/PagedMemoryRangeEnumeratorTests.cs +++ /dev/null @@ -1,135 +0,0 @@ -using NUnit.Framework; -using Ryujinx.Memory.Range; -using System.Collections.Generic; - -namespace Ryujinx.Tests.Memory.RangeTests -{ - public class PagedMemoryRangeEnumeratorTests - { - [Test] - public void PagedMemoryRangeEnumerator_For3AlignedPages_HasCorrectResults() - { - // Arrange - const int StartAddress = 0; - const int Size = 12; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(3, results.Count); - - Assert.AreEqual(0, results[0].Address); - Assert.AreEqual(PageSize, results[0].Size); - - Assert.AreEqual(4, results[1].Address); - Assert.AreEqual(PageSize, results[1].Size); - - Assert.AreEqual(8, results[2].Address); - Assert.AreEqual(PageSize, results[2].Size); - } - - [Test] - public void PagedMemoryRangeEnumerator_For2PagesWithPartialFirstAndLast_HasCorrectResults() - { - // Arrange - const int StartAddress = 2; - const int Size = 6; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(2, results.Count); - - Assert.AreEqual(StartAddress, results[0].Address); - Assert.AreEqual(PageSize - StartAddress, results[0].Size); - Assert.AreEqual(results[1].Address, results[0].EndAddress); - - Assert.AreEqual(4, results[1].Address); - Assert.AreEqual(PageSize, results[1].Size); - } - - [Test] - public void PagedMemoryRangeEnumerator_For4PagesWithPartialFirst_HasCorrectResults() - { - // Arrange - const int StartAddress = 2; - const int Size = 14; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(4, results.Count); - - Assert.AreEqual(StartAddress, results[0].Address); - Assert.AreEqual(PageSize - StartAddress, results[0].Size); - Assert.AreEqual(results[1].Address, results[0].EndAddress); - - Assert.AreEqual(4, results[1].Address); - Assert.AreEqual(PageSize, results[1].Size); - Assert.AreEqual(results[2].Address, results[1].EndAddress); - - Assert.AreEqual(8, results[2].Address); - Assert.AreEqual(PageSize, results[2].Size); - Assert.AreEqual(results[3].Address, results[2].EndAddress); - - Assert.AreEqual(12, results[3].Address); - Assert.AreEqual(PageSize, results[3].Size); - } - - [Test] - public void PagedMemoryRangeEnumerator_For4PagesWithPartialLast_HasCorrectResults() - { - // Arrange - const int StartAddress = 0; - const int Size = 14; - const int PageSize = 4; - var enumerator = new PagedMemoryRangeEnumerator(StartAddress, Size, PageSize, x => x); - - // Act - var results = new List(); - foreach (var memoryRange in enumerator) - { - results.Add(memoryRange); - } - - // Assert - Assert.AreEqual(4, results.Count); - - Assert.AreEqual(0, results[0].Address); - Assert.AreEqual(PageSize, results[0].Size); - Assert.AreEqual(results[1].Address, results[0].EndAddress); - - Assert.AreEqual(4, results[1].Address); - Assert.AreEqual(PageSize, results[1].Size); - Assert.AreEqual(results[2].Address, results[1].EndAddress); - - Assert.AreEqual(8, results[2].Address); - Assert.AreEqual(PageSize, results[2].Size); - Assert.AreEqual(results[3].Address, results[2].EndAddress); - - Assert.AreEqual(12, results[3].Address); - Assert.AreEqual(Size % PageSize, results[3].Size); - } - } -} diff --git a/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs b/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs index 909783dca2..c0127530af 100644 --- a/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs +++ b/src/Ryujinx.Tests/Common/Extensions/SequenceReaderExtensionsTests.cs @@ -1,6 +1,6 @@ using NUnit.Framework; using Ryujinx.Common.Extensions; -using Ryujinx.Common.Memory; +using Ryujinx.Memory; using System; using System.Buffers; using System.Buffers.Binary;