Changeset 142484 in webkit


Ignore:
Timestamp:
Feb 11, 2013 9:54:50 AM (11 years ago)
Author:
eric@webkit.org
Message:

Move WebVTTToken off of MarkupTokenBase
https://bugs.webkit.org/show_bug.cgi?id=109410

Reviewed by Tony Gentilcore.

This introduces a small amount of "copy/paste" code
but actually makes WebVTTToken much smaller and simpler!
This also frees the HTMLParser to have its Token class
back to itself so we can tune it to make HTML faster.

  • html/track/WebVTTToken.h:

(WebVTTToken):
(WebCore::WebVTTToken::WebVTTToken):
(WebCore::WebVTTToken::appendToName):
(WebCore::WebVTTToken::type):
(WebCore::WebVTTToken::name):
(WebCore::WebVTTToken::ensureIsCharacterToken):
(WebCore::WebVTTToken::appendToCharacter):
(WebCore::WebVTTToken::beginEmptyStartTag):
(WebCore::WebVTTToken::beginStartTag):
(WebCore::WebVTTToken::beginEndTag):
(WebCore::WebVTTToken::beginTimestampTag):
(WebCore::WebVTTToken::makeEndOfFile):
(WebCore::WebVTTToken::clear):

Location:
trunk/Source/WebCore
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r142483 r142484  
     12013-02-11  Eric Seidel  <eric@webkit.org>
     2
     3        Move WebVTTToken off of MarkupTokenBase
     4        https://bugs.webkit.org/show_bug.cgi?id=109410
     5
     6        Reviewed by Tony Gentilcore.
     7
     8        This introduces a small amount of "copy/paste" code
     9        but actually makes WebVTTToken much smaller and simpler!
     10        This also frees the HTMLParser to have its Token class
     11        back to itself so we can tune it to make HTML faster.
     12
     13        * html/track/WebVTTToken.h:
     14        (WebVTTToken):
     15        (WebCore::WebVTTToken::WebVTTToken):
     16        (WebCore::WebVTTToken::appendToName):
     17        (WebCore::WebVTTToken::type):
     18        (WebCore::WebVTTToken::name):
     19        (WebCore::WebVTTToken::ensureIsCharacterToken):
     20        (WebCore::WebVTTToken::appendToCharacter):
     21        (WebCore::WebVTTToken::beginEmptyStartTag):
     22        (WebCore::WebVTTToken::beginStartTag):
     23        (WebCore::WebVTTToken::beginEndTag):
     24        (WebCore::WebVTTToken::beginTimestampTag):
     25        (WebCore::WebVTTToken::makeEndOfFile):
     26        (WebCore::WebVTTToken::clear):
     27
    1282013-02-11  Joshua Bell  <jsbell@chromium.org>
    229
  • trunk/Source/WebCore/html/track/WebVTTToken.h

    r95901 r142484  
    3434#if ENABLE(VIDEO_TRACK)
    3535
    36 #include "MarkupTokenBase.h"
    37 
    3836namespace WebCore {
    3937
     
    5048};
    5149
    52 class WebVTTToken : public MarkupTokenBase<WebVTTTokenTypes> {
     50class WebVTTToken {
     51    WTF_MAKE_NONCOPYABLE(WebVTTToken);
     52    WTF_MAKE_FAST_ALLOCATED;
    5353public:
     54    typedef WebVTTTokenTypes Type;
     55    typedef WTF::Vector<UChar, 1024> DataVector; // FIXME: Is this too large for WebVTT?
     56
     57    WebVTTToken() { clear(); }
     58
    5459    void appendToName(UChar character)
    5560    {
    5661        ASSERT(m_type == WebVTTTokenTypes::StartTag || m_type == WebVTTTokenTypes::EndTag);
    57         MarkupTokenBase<WebVTTTokenTypes>::appendToName(character);
    58     }
    59    
     62        ASSERT(character);
     63        m_data.append(character);
     64    }
     65
     66    Type::Type type() const { return m_type; }
     67
    6068    const DataVector& name() const
    6169    {
    62         return MarkupTokenBase<WebVTTTokenTypes>::name();
    63     }
    64    
     70        return m_data;
     71    }
     72
    6573    const DataVector& characters() const
    6674    {
     
    6876        return m_data;
    6977    }
    70    
     78
     79    // Starting a character token works slightly differently than starting
     80    // other types of tokens because we want to save a per-character branch.
     81    void ensureIsCharacterToken()
     82    {
     83        ASSERT(m_type == Type::Uninitialized || m_type == Type::Character);
     84        m_type = Type::Character;
     85    }
     86
     87    void appendToCharacter(char character)
     88    {
     89        ASSERT(m_type == Type::Character);
     90        m_data.append(character);
     91    }
     92
     93    void appendToCharacter(UChar character)
     94    {
     95        ASSERT(m_type == Type::Character);
     96        m_data.append(character);
     97    }
     98
     99    void appendToCharacter(const Vector<LChar, 32>& characters)
     100    {
     101        ASSERT(m_type == Type::Character);
     102        m_data.appendVector(characters);
     103    }
     104
    71105    void beginEmptyStartTag()
    72106    {
    73107        ASSERT(m_type == Type::Uninitialized);
    74108        m_type = Type::StartTag;
    75         m_currentAttribute = 0;
    76         m_attributes.clear();
    77109        m_data.clear();
    78110    }
    79111 
     112    void beginStartTag(UChar character)
     113    {
     114        ASSERT(character);
     115        ASSERT(m_type == Type::Uninitialized);
     116        m_type = Type::StartTag;
     117        m_data.append(character);
     118    }
     119
     120    void beginEndTag(LChar character)
     121    {
     122        ASSERT(m_type == Type::Uninitialized);
     123        m_type = Type::EndTag;
     124        m_data.append(character);
     125    }
     126
    80127    void beginTimestampTag(UChar character)
    81128    {
     
    83130        ASSERT(m_type == Type::Uninitialized);
    84131        m_type = Type::TimestampTag;
    85         m_selfClosing = true;
    86132        m_data.append(character);
    87133    }
     
    130176        return m_annotation;
    131177    }
     178
     179    void makeEndOfFile()
     180    {
     181        ASSERT(m_type == Type::Uninitialized);
     182        m_type = Type::EndOfFile;
     183    }
    132184   
    133185    void clear()
    134186    {
     187        m_type = Type::Uninitialized;
     188        m_data.clear();
    135189        m_annotation.clear();
    136190        m_classes.clear();
    137191        m_currentBuffer.clear();
    138         MarkupTokenBase<WebVTTTokenTypes>::clear();
    139192    }
    140193
     
    147200    }
    148201
     202    Type::Type m_type;
     203    DataVector m_data;
    149204    DataVector m_annotation;
    150205    DataVector m_classes;
Note: See TracChangeset for help on using the changeset viewer.