1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 04:27:44 +00:00

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
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) MmapRegion::MmapRegion(u32 base, u32 size, int prot, u8* data, u8* shadow_data)
: Region(base, size) : Region(base, size, true)
, m_data(data) , m_data(data)
, m_shadow_data(shadow_data) , m_shadow_data(shadow_data)
{ {

View file

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

View file

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

View file

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