⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 295171 in webkit


Ignore:
Timestamp:
Jun 2, 2022, 10:41:49 PM (4 years ago)
Author:
Chris Dumez
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

Location:
trunk/Source/WebCore/html/parser
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/html/parser/HTMLTokenizer.cpp

    r295167 r295171  
    307307        if (character == kEndOfFileMarker) {
    308308            parseError();
    309             bufferASCIICharacter('<');
    310             bufferASCIICharacter('/');
     309            bufferCharacters("</"_s);
    311310            RECONSUME_IN(DataState);
    312311        }
    … …  
    348347            ADVANCE_PAST_NON_NEWLINE_TO(RCDATAEndTagNameState);
    349348        }
    350         bufferASCIICharacter('<');
    351         bufferASCIICharacter('/');
     349        bufferCharacters("</"_s);
    352350        RECONSUME_IN(RCDATAState);
    353351    END_STATE()
    … …  
    375373                return commitToCompleteEndTag(source);
    376374        }
    377         bufferASCIICharacter('<');
    378         bufferASCIICharacter('/');
     375        bufferCharacters("</"_s);
    379376        m_token.appendToCharacter(m_temporaryBuffer);
    380377        m_bufferedEndTagName.clear();
    … …  
    399396            ADVANCE_PAST_NON_NEWLINE_TO(RAWTEXTEndTagNameState);
    400397        }
    401         bufferASCIICharacter('<');
    402         bufferASCIICharacter('/');
     398        bufferCharacters("</"_s);
    403399        RECONSUME_IN(RAWTEXTState);
    404400    END_STATE()
    … …  
    426422                return commitToCompleteEndTag(source);
    427423        }
    428         bufferASCIICharacter('<');
    429         bufferASCIICharacter('/');
     424        bufferCharacters("</"_s);
    430425        m_token.appendToCharacter(m_temporaryBuffer);
    431426        m_bufferedEndTagName.clear();
    … …  
    441436        }
    442437        if (character == '!') {
    443             bufferASCIICharacter('<');
    444             bufferASCIICharacter('!');
     438            bufferCharacters("<!"_s);
    445439            ADVANCE_PAST_NON_NEWLINE_TO(ScriptDataEscapeStartState);
    446440        }
    … …  
    455449            ADVANCE_PAST_NON_NEWLINE_TO(ScriptDataEndTagNameState);
    456450        }
    457         bufferASCIICharacter('<');
    458         bufferASCIICharacter('/');
     451        bufferCharacters("</"_s);
    459452        RECONSUME_IN(ScriptDataState);
    460453    END_STATE()
    … …  
    482475                return commitToCompleteEndTag(source);
    483476        }
    484         bufferASCIICharacter('<');
    485         bufferASCIICharacter('/');
     477        bufferCharacters("</"_s);
    486478        m_token.appendToCharacter(m_temporaryBuffer);
    487479        m_bufferedEndTagName.clear();
    … …  
    578570            ADVANCE_PAST_NON_NEWLINE_TO(ScriptDataEscapedEndTagNameState);
    579571        }
    580         bufferASCIICharacter('<');
    581         bufferASCIICharacter('/');
     572        bufferCharacters("</"_s);
    582573        RECONSUME_IN(ScriptDataEscapedState);
    583574    END_STATE()
    … …  
    605596                return commitToCompleteEndTag(source);
    606597        }
    607         bufferASCIICharacter('<');
    608         bufferASCIICharacter('/');
     598        bufferCharacters("</"_s);
    609599        m_token.appendToCharacter(m_temporaryBuffer);
    610600        m_bufferedEndTagName.clear();
    … …  
    13861376        if (character == '>')
    13871377            ADVANCE_PAST_NON_NEWLINE_TO(DataState);
    1388         bufferASCIICharacter(']');
    1389         bufferASCIICharacter(']');
     1378        bufferCharacters("]]"_s);
    13901379        RECONSUME_IN(CDATASectionState);
    13911380    END_STATE()
  • trunk/Source/WebCore/html/parser/HTMLTokenizer.h

    r295167 r295171  
    161161    void bufferCharacter(UChar);
    162162    template<typename CharacterType> void bufferCharacters(Span<const CharacterType>);
     163    void bufferCharacters(ASCIILiteral literal) { bufferCharacters(Span { literal.characters8(), literal.length() }); }
    163164
    164165    bool emitAndResumeInDataState(SegmentedString&);
Note: See TracChangeset for help on using the changeset viewer.