UserspaceEmulator: Add fast-path for is<MmapRegion>()

Don't use default RTTI for these since they are performance-sensitive.
This commit is contained in:
Andreas Kling 2021-03-09 15:17:15 +01:00
parent 656cd477c2
commit 82aea65bd3
Notes: sideshowbarker 2024-07-18 21:34:32 +09:00
4 changed files with 11 additions and 3 deletions

View file

@ -66,7 +66,7 @@ NonnullOwnPtr<MmapRegion> MmapRegion::create_file_backed(u32 base, u32 size, u32
}
MmapRegion::MmapRegion(u32 base, u32 size, int prot, u8* data, u8* shadow_data)
: Region(base, size)
: Region(base, size, true)
, m_data(data)
, m_shadow_data(shadow_data)
{

View file

@ -82,4 +82,7 @@ private:
String m_name;
};
template<>
inline bool Region::fast_is<MmapRegion>() const { return m_mmap; }
}

View file

@ -29,9 +29,10 @@
namespace UserspaceEmulator {
Region::Region(u32 base, u32 size)
Region::Region(u32 base, u32 size, bool mmap)
: m_emulator(Emulator::the())
, m_range(Range { VirtualAddress { base }, size })
, m_mmap(mmap)
{
}

View file

@ -79,8 +79,11 @@ public:
Emulator& emulator() { return m_emulator; }
const Emulator& emulator() const { return m_emulator; }
template<typename T>
bool fast_is() const = delete;
protected:
Region(u32 base, u32 size);
Region(u32 base, u32 size, bool mmap = false);
void set_range(Range r) { m_range = r; };
private:
@ -88,6 +91,7 @@ private:
Range m_range;
bool m_mmap { false };
bool m_stack { false };
bool m_text { false };
bool m_readable { true };