summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Annomatg2019-02-27 23:22:47 +0100
committerGravatar bunnei2019-02-27 17:22:47 -0500
commitef84c70d222eb2b8ea56e67b793cc459b90cdd74 (patch)
tree0a8df14569fbdf75cffa029859000cd0b6e11934 /src
parentMerge pull request #2176 from lioncash/com (diff)
downloadyuzu-ef84c70d222eb2b8ea56e67b793cc459b90cdd74.tar.gz
yuzu-ef84c70d222eb2b8ea56e67b793cc459b90cdd74.tar.xz
yuzu-ef84c70d222eb2b8ea56e67b793cc459b90cdd74.zip
Speed up memory page mapping (#2141)
- Memory::MapPages total samplecount was reduced from 4.6% to 1.06%. - From main menu into the game from 1.03% to 0.35%
Diffstat (limited to 'src')
-rw-r--r--src/core/memory.cpp17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp
index e9166dbd9..f809567b6 100644
--- a/src/core/memory.cpp
+++ b/src/core/memory.cpp
@@ -71,15 +71,20 @@ static void MapPages(PageTable& page_table, VAddr base, u64 size, u8* memory, Pa
71 FlushMode::FlushAndInvalidate); 71 FlushMode::FlushAndInvalidate);
72 72
73 VAddr end = base + size; 73 VAddr end = base + size;
74 while (base != end) { 74 ASSERT_MSG(end <= page_table.pointers.size(), "out of range mapping at {:016X}",
75 ASSERT_MSG(base < page_table.pointers.size(), "out of range mapping at {:016X}", base); 75 base + page_table.pointers.size());
76 76
77 page_table.attributes[base] = type; 77 std::fill(page_table.attributes.begin() + base, page_table.attributes.begin() + end, type);
78 page_table.pointers[base] = memory;
79 78
80 base += 1; 79 if (memory == nullptr) {
81 if (memory != nullptr) 80 std::fill(page_table.pointers.begin() + base, page_table.pointers.begin() + end, memory);
81 } else {
82 while (base != end) {
83 page_table.pointers[base] = memory;
84
85 base += 1;
82 memory += PAGE_SIZE; 86 memory += PAGE_SIZE;
87 }
83 } 88 }
84} 89}
85 90