From e252b6e2584d320d1c47fe05117e2e4ebc9ebb9e Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Thu, 1 Jun 2023 19:43:36 -0400 Subject: [PATCH] LibGfx/JPEG: Use a more aggressive inline policy Some of these functions can be called millions of times even for images of moderate size. Inlining these functions really helps the compiler and gives performance improvements up to 10%. --- .../Libraries/LibGfx/ImageFormats/JPEGLoader.cpp | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp b/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp index 3cc91fccd9..39aee02ef3 100644 --- a/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp +++ b/Userland/Libraries/LibGfx/ImageFormats/JPEGLoader.cpp @@ -270,14 +270,14 @@ public: return jpeg_stream; } - ErrorOr read_u8() + ALWAYS_INLINE ErrorOr read_u8() { if (m_byte_offset == m_current_size) TRY(refill_buffer()); return m_buffer[m_byte_offset++]; } - ErrorOr read_u16() + ALWAYS_INLINE ErrorOr read_u16() { if (m_saved_marker.has_value()) return m_saved_marker.release_value(); @@ -285,7 +285,7 @@ public: return (static_cast(TRY(read_u8())) << 8) | TRY(read_u8()); } - ErrorOr discard(u64 bytes) + ALWAYS_INLINE ErrorOr discard(u64 bytes) { auto const discarded_from_buffer = min(m_current_size - m_byte_offset, bytes); m_byte_offset += discarded_from_buffer; @@ -347,7 +347,7 @@ private: class HuffmanStream { public: - ErrorOr next_symbol(HuffmanTable const& table) + ALWAYS_INLINE ErrorOr next_symbol(HuffmanTable const& table) { u16 const code = TRY(peek_bits(HuffmanTable::maximum_bits_per_code)); @@ -357,7 +357,7 @@ public: return symbol_and_size.symbol; } - ErrorOr read_bits(u8 count = 1) + ALWAYS_INLINE ErrorOr read_bits(u8 count = 1) { if (count > NumericLimits::digits()) { dbgln_if(JPEG_DEBUG, "Can't read {} bits at once!", count); @@ -369,7 +369,7 @@ public: return value; } - ErrorOr peek_bits(u8 count) + ALWAYS_INLINE ErrorOr peek_bits(u8 count) { if (count == 0) return 0; @@ -382,7 +382,7 @@ public: return static_cast((m_bit_reservoir >> (bits_in_reservoir - m_bit_offset - count)) & mask); } - ErrorOr discard_bits(u8 count) + ALWAYS_INLINE ErrorOr discard_bits(u8 count) { m_bit_offset += count; @@ -409,7 +409,7 @@ public: } private: - ErrorOr refill_reservoir() + ALWAYS_INLINE ErrorOr refill_reservoir() { auto const bytes_needed = m_bit_offset / bits_per_byte;