From 37b5c05ec5679710adcd0464c180c429d3ee7f1f Mon Sep 17 00:00:00 2001 From: Andreas Kling Date: Sun, 10 Dec 2023 11:53:24 +0100 Subject: [PATCH] LibJS: Add fast path for Uint8ClampedArray Get/Put These are just like Uint8Array, except Put values have to be clamped in the 0..255 range. Takes CPU usage from 40% to 30% on the "Canvas Cycle" demo at http://www.effectgames.com/demos/canvascycle/ :^) --- Userland/Libraries/LibJS/Bytecode/CommonImplementations.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Userland/Libraries/LibJS/Bytecode/CommonImplementations.cpp b/Userland/Libraries/LibJS/Bytecode/CommonImplementations.cpp index a62a4f9567..38a1e8e6c4 100644 --- a/Userland/Libraries/LibJS/Bytecode/CommonImplementations.cpp +++ b/Userland/Libraries/LibJS/Bytecode/CommonImplementations.cpp @@ -135,6 +135,8 @@ ThrowCompletionOr get_by_value(VM& vm, Value base_value, Value property_k return fast_integer_indexed_element_get(typed_array, index); case TypedArrayBase::Kind::Int32Array: return fast_integer_indexed_element_get(typed_array, index); + case TypedArrayBase::Kind::Uint8ClampedArray: + return fast_integer_indexed_element_get(typed_array, index); default: // FIXME: Support more TypedArray kinds. break; @@ -423,6 +425,9 @@ ThrowCompletionOr put_by_value(VM& vm, Value base, Value property_key_valu case TypedArrayBase::Kind::Int32Array: fast_integer_indexed_element_set(typed_array, index, value.as_i32()); return {}; + case TypedArrayBase::Kind::Uint8ClampedArray: + fast_integer_indexed_element_set(typed_array, index, clamp(value.as_i32(), 0, 255)); + return {}; default: // FIXME: Support more TypedArray kinds. break;