Переглянути джерело

UserspaceEmulator: Inline some very hot functions

This improves the browser's load time on welcome.html by ~2%.
Andreas Kling 4 роки тому
батько
коміт
da413a464a

+ 0 - 8
DevTools/UserspaceEmulator/Emulator.cpp

@@ -199,14 +199,6 @@ int Emulator::exec()
     return m_exit_status;
 }
 
-bool Emulator::is_in_malloc_or_free() const
-{
-    return (m_cpu.base_eip() >= m_malloc_symbol_start && m_cpu.base_eip() < m_malloc_symbol_end)
-        || (m_cpu.base_eip() >= m_free_symbol_start && m_cpu.base_eip() < m_free_symbol_end)
-        || (m_cpu.base_eip() >= m_realloc_symbol_start && m_cpu.base_eip() < m_realloc_symbol_end)
-        || (m_cpu.base_eip() >= m_malloc_size_symbol_start && m_cpu.base_eip() < m_malloc_size_symbol_end);
-}
-
 Vector<FlatPtr> Emulator::raw_backtrace()
 {
     Vector<FlatPtr, 128> backtrace;

+ 8 - 0
DevTools/UserspaceEmulator/Emulator.h

@@ -185,4 +185,12 @@ private:
     FlatPtr m_signal_trampoline { 0 };
 };
 
+ALWAYS_INLINE bool Emulator::is_in_malloc_or_free() const
+{
+    return (m_cpu.base_eip() >= m_malloc_symbol_start && m_cpu.base_eip() < m_malloc_symbol_end)
+        || (m_cpu.base_eip() >= m_free_symbol_start && m_cpu.base_eip() < m_free_symbol_end)
+        || (m_cpu.base_eip() >= m_realloc_symbol_start && m_cpu.base_eip() < m_realloc_symbol_end)
+        || (m_cpu.base_eip() >= m_malloc_size_symbol_start && m_cpu.base_eip() < m_malloc_size_symbol_end);
+}
+
 }

+ 0 - 16
DevTools/UserspaceEmulator/MallocTracer.cpp

@@ -162,22 +162,6 @@ void MallocTracer::target_did_realloc(Badge<SoftCPU>, FlatPtr address, size_t si
     existing_mallocation->malloc_backtrace = m_emulator.raw_backtrace();
 }
 
-Mallocation* MallocTracer::find_mallocation(const Region& region, FlatPtr address)
-{
-    if (!region.is_mmap())
-        return nullptr;
-    if (!static_cast<const MmapRegion&>(region).is_malloc_block())
-        return nullptr;
-    auto* malloc_data = static_cast<MmapRegion&>(const_cast<Region&>(region)).malloc_metadata();
-    if (!malloc_data)
-        return nullptr;
-    auto& mallocation = malloc_data->mallocation_for_address(address);
-    if (!mallocation.used)
-        return nullptr;
-    ASSERT(mallocation.contains(address));
-    return &mallocation;
-}
-
 Mallocation* MallocTracer::find_mallocation(FlatPtr address)
 {
     auto* region = m_emulator.mmu().find_region({ 0x23, address });

+ 17 - 0
DevTools/UserspaceEmulator/MallocTracer.h

@@ -26,6 +26,7 @@
 
 #pragma once
 
+#include "MmapRegion.h"
 #include "SoftMMU.h"
 #include <AK/Badge.h>
 #include <AK/HashMap.h>
@@ -92,4 +93,20 @@ private:
     bool m_auditing_enabled { true };
 };
 
+ALWAYS_INLINE Mallocation* MallocTracer::find_mallocation(const Region& region, FlatPtr address)
+{
+    if (!region.is_mmap())
+        return nullptr;
+    if (!static_cast<const MmapRegion&>(region).is_malloc_block())
+        return nullptr;
+    auto* malloc_data = static_cast<MmapRegion&>(const_cast<Region&>(region)).malloc_metadata();
+    if (!malloc_data)
+        return nullptr;
+    auto& mallocation = malloc_data->mallocation_for_address(address);
+    if (!mallocation.used)
+        return nullptr;
+    ASSERT(mallocation.contains(address));
+    return &mallocation;
+}
+
 }

+ 0 - 9
DevTools/UserspaceEmulator/SoftMMU.cpp

@@ -39,15 +39,6 @@ SoftMMU::SoftMMU(Emulator& emulator)
 {
 }
 
-Region* SoftMMU::find_region(X86::LogicalAddress address)
-{
-    if (address.selector() == 0x28)
-        return m_tls_region.ptr();
-
-    size_t page_index = (address.offset() & ~(PAGE_SIZE - 1)) / PAGE_SIZE;
-    return m_page_to_region_map[page_index];
-}
-
 void SoftMMU::add_region(NonnullOwnPtr<Region> region)
 {
     ASSERT(!find_region({ 0x20, region->base() }));

+ 8 - 1
DevTools/UserspaceEmulator/SoftMMU.h

@@ -53,7 +53,14 @@ public:
     void write32(X86::LogicalAddress, ValueWithShadow<u32>);
     void write64(X86::LogicalAddress, ValueWithShadow<u64>);
 
-    Region* find_region(X86::LogicalAddress);
+    ALWAYS_INLINE Region* find_region(X86::LogicalAddress address)
+    {
+        if (address.selector() == 0x28)
+            return m_tls_region.ptr();
+
+        size_t page_index = (address.offset() & ~(PAGE_SIZE - 1)) / PAGE_SIZE;
+        return m_page_to_region_map[page_index];
+    }
 
     void add_region(NonnullOwnPtr<Region>);
     void remove_region(Region&);