Prechádzať zdrojové kódy

LibWeb: Avoid allocating UTF-16 strings only the UTF-16 length is needed

Timothy Flynn 11 mesiacov pred
rodič
commit
4a166a45ec

+ 2 - 3
Userland/Libraries/LibWeb/DOM/CharacterData.h

@@ -7,6 +7,7 @@
 #pragma once
 
 #include <AK/String.h>
+#include <AK/Utf16View.h>
 #include <LibUnicode/Forward.h>
 #include <LibWeb/DOM/ChildNode.h>
 #include <LibWeb/DOM/Node.h>
@@ -30,9 +31,7 @@ public:
 
     unsigned length_in_utf16_code_units() const
     {
-        // FIXME: This is inefficient!
-        auto utf16_data = MUST(AK::utf8_to_utf16(m_data));
-        return Utf16View { utf16_data }.length_in_code_units();
+        return AK::utf16_code_unit_length_from_utf8(m_data);
     }
 
     WebIDL::ExceptionOr<String> substring_data(size_t offset_in_utf16_code_units, size_t count_in_utf16_code_units) const;

+ 2 - 3
Userland/Libraries/LibWeb/HTML/HTMLTextAreaElement.cpp

@@ -6,6 +6,7 @@
  * SPDX-License-Identifier: BSD-2-Clause
  */
 
+#include <AK/Utf16View.h>
 #include <LibWeb/Bindings/HTMLTextAreaElementPrototype.h>
 #include <LibWeb/Bindings/Intrinsics.h>
 #include <LibWeb/CSS/StyleProperties.h>
@@ -189,9 +190,7 @@ String HTMLTextAreaElement::api_value() const
 u32 HTMLTextAreaElement::text_length() const
 {
     // The textLength IDL attribute must return the length of the element's API value.
-    // FIXME: This is inefficient!
-    auto utf16_data = MUST(AK::utf8_to_utf16(api_value()));
-    return Utf16View { utf16_data }.length_in_code_units();
+    return AK::utf16_code_unit_length_from_utf8(api_value());
 }
 
 // https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-cva-checkvalidity