From c0223befe145905f5a9ffb82d967930367e3d837 Mon Sep 17 00:00:00 2001 From: Ali Mohammad Pur Date: Tue, 9 Sep 2025 15:22:36 +0200 Subject: [PATCH] LibWasm: Avoid frequent re/deallocations while validating expressions Freeing and reallocating these vectors was ~6% of runtime when validating some web-based game. --- .../LibWasm/AbstractMachine/AbstractMachine.h | 2 +- Libraries/LibWasm/AbstractMachine/Validator.h | 14 ++++++++------ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/Libraries/LibWasm/AbstractMachine/AbstractMachine.h b/Libraries/LibWasm/AbstractMachine/AbstractMachine.h index 24bc924a1a..0fd54a8101 100644 --- a/Libraries/LibWasm/AbstractMachine/AbstractMachine.h +++ b/Libraries/LibWasm/AbstractMachine/AbstractMachine.h @@ -622,7 +622,7 @@ public: private: ModuleInstance const& m_module; - Vector m_locals; + Vector m_locals; Expression const& m_expression; size_t m_arity { 0 }; size_t m_label_index { 0 }; diff --git a/Libraries/LibWasm/AbstractMachine/Validator.h b/Libraries/LibWasm/AbstractMachine/Validator.h index 69d59fd985..7d348f11ac 100644 --- a/Libraries/LibWasm/AbstractMachine/Validator.h +++ b/Libraries/LibWasm/AbstractMachine/Validator.h @@ -206,7 +206,9 @@ public: friend struct AK::Formatter; public: - explicit Stack(Vector const& frames) + explicit Stack(Vector&&) = delete; + + explicit Stack(Vector const& frames) : m_frames(frames) { } @@ -261,17 +263,17 @@ public: return {}; } - Vector release_vector() + Vector release_vector() { m_max_known_size = 0; - return exchange(m_entries, Vector {}); + return exchange(m_entries, {}); } size_t max_known_size() const { return m_max_known_size; } private: - Vector m_entries; - Vector const& m_frames; + Vector m_entries; + Vector const& m_frames; size_t m_max_known_size { 0 }; }; @@ -360,7 +362,7 @@ private: }; Context m_context; - Vector m_frames; + Vector m_frames; size_t m_max_frame_size { 0 }; COWVector m_globals_without_internal_globals; };