Title: [295171] trunk/Source/WebCore/html/parser
Revision
295171
Author
cdu...@apple.com
Date
2022-06-02 22:41:49 -0700 (Thu, 02 Jun 2022)

Log Message

Optimize HTMLTokenizer::bufferASCIICharacter()
https://bugs.webkit.org/show_bug.cgi?id=241252

Reviewed by Yusuke Suzuki.

Optimize HTMLTokenizer::bufferASCIICharacter() by appending several characters
at once whenever possible.

* Source/WebCore/html/parser/HTMLTokenizer.cpp:
(WebCore::HTMLTokenizer::processToken):
* Source/WebCore/html/parser/HTMLTokenizer.h:
(WebCore::HTMLTokenizer::bufferCharacters):

Canonical link: https://commits.webkit.org/251255@main

Modified Paths

Diff

Modified: trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp (295170 => 295171)


--- trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp	2022-06-03 05:35:30 UTC (rev 295170)
+++ trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp	2022-06-03 05:41:49 UTC (rev 295171)
@@ -306,8 +306,7 @@
         }
         if (character == kEndOfFileMarker) {
             parseError();
-            bufferASCIICharacter('<');
-            bufferASCIICharacter('/');
+            bufferCharacters("</"_s);
             RECONSUME_IN(DataState);
         }
         parseError();
@@ -347,8 +346,7 @@
             appendToPossibleEndTag(convertASCIIAlphaToLower(character));
             ADVANCE_PAST_NON_NEWLINE_TO(RCDATAEndTagNameState);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         RECONSUME_IN(RCDATAState);
     END_STATE()
 
@@ -374,8 +372,7 @@
             if (isAppropriateEndTag())
                 return commitToCompleteEndTag(source);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         m_token.appendToCharacter(m_temporaryBuffer);
         m_bufferedEndTagName.clear();
         m_temporaryBuffer.clear();
@@ -398,8 +395,7 @@
             appendToPossibleEndTag(convertASCIIAlphaToLower(character));
             ADVANCE_PAST_NON_NEWLINE_TO(RAWTEXTEndTagNameState);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         RECONSUME_IN(RAWTEXTState);
     END_STATE()
 
@@ -425,8 +421,7 @@
             if (isAppropriateEndTag())
                 return commitToCompleteEndTag(source);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         m_token.appendToCharacter(m_temporaryBuffer);
         m_bufferedEndTagName.clear();
         m_temporaryBuffer.clear();
@@ -440,8 +435,7 @@
             ADVANCE_PAST_NON_NEWLINE_TO(ScriptDataEndTagOpenState);
         }
         if (character == '!') {
-            bufferASCIICharacter('<');
-            bufferASCIICharacter('!');
+            bufferCharacters("<!"_s);
             ADVANCE_PAST_NON_NEWLINE_TO(ScriptDataEscapeStartState);
         }
         bufferASCIICharacter('<');
@@ -454,8 +448,7 @@
             appendToPossibleEndTag(convertASCIIAlphaToLower(character));
             ADVANCE_PAST_NON_NEWLINE_TO(ScriptDataEndTagNameState);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         RECONSUME_IN(ScriptDataState);
     END_STATE()
 
@@ -481,8 +474,7 @@
             if (isAppropriateEndTag())
                 return commitToCompleteEndTag(source);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         m_token.appendToCharacter(m_temporaryBuffer);
         m_bufferedEndTagName.clear();
         m_temporaryBuffer.clear();
@@ -577,8 +569,7 @@
             appendToPossibleEndTag(convertASCIIAlphaToLower(character));
             ADVANCE_PAST_NON_NEWLINE_TO(ScriptDataEscapedEndTagNameState);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         RECONSUME_IN(ScriptDataEscapedState);
     END_STATE()
 
@@ -604,8 +595,7 @@
             if (isAppropriateEndTag())
                 return commitToCompleteEndTag(source);
         }
-        bufferASCIICharacter('<');
-        bufferASCIICharacter('/');
+        bufferCharacters("</"_s);
         m_token.appendToCharacter(m_temporaryBuffer);
         m_bufferedEndTagName.clear();
         m_temporaryBuffer.clear();
@@ -1385,8 +1375,7 @@
     BEGIN_STATE(CDATASectionDoubleRightSquareBracketState)
         if (character == '>')
             ADVANCE_PAST_NON_NEWLINE_TO(DataState);
-        bufferASCIICharacter(']');
-        bufferASCIICharacter(']');
+        bufferCharacters("]]"_s);
         RECONSUME_IN(CDATASectionState);
     END_STATE()
 

Modified: trunk/Source/WebCore/html/parser/HTMLTokenizer.h (295170 => 295171)


--- trunk/Source/WebCore/html/parser/HTMLTokenizer.h	2022-06-03 05:35:30 UTC (rev 295170)
+++ trunk/Source/WebCore/html/parser/HTMLTokenizer.h	2022-06-03 05:41:49 UTC (rev 295171)
@@ -160,6 +160,7 @@
     void bufferASCIICharacter(UChar);
     void bufferCharacter(UChar);
     template<typename CharacterType> void bufferCharacters(Span<const CharacterType>);
+    void bufferCharacters(ASCIILiteral literal) { bufferCharacters(Span { literal.characters8(), literal.length() }); }
 
     bool emitAndResumeInDataState(SegmentedString&);
     bool emitAndReconsumeInDataState();
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to