Title: [142484] trunk/Source/WebCore
Revision
142484
Author
e...@webkit.org
Date
2013-02-11 09:54:50 -0800 (Mon, 11 Feb 2013)

Log 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):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (142483 => 142484)


--- trunk/Source/WebCore/ChangeLog	2013-02-11 17:28:22 UTC (rev 142483)
+++ trunk/Source/WebCore/ChangeLog	2013-02-11 17:54:50 UTC (rev 142484)
@@ -1,3 +1,30 @@
+2013-02-11  Eric Seidel  <e...@webkit.org>
+
+        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):
+
 2013-02-11  Joshua Bell  <jsb...@chromium.org>
 
         [V8] IndexedDB: Minor GC can collect IDBDatabase wrapper with versionchange handler

Modified: trunk/Source/WebCore/html/track/WebVTTToken.h (142483 => 142484)


--- trunk/Source/WebCore/html/track/WebVTTToken.h	2013-02-11 17:28:22 UTC (rev 142483)
+++ trunk/Source/WebCore/html/track/WebVTTToken.h	2013-02-11 17:54:50 UTC (rev 142484)
@@ -33,8 +33,6 @@
 
 #if ENABLE(VIDEO_TRACK)
 
-#include "MarkupTokenBase.h"
-
 namespace WebCore {
 
 class WebVTTTokenTypes {
@@ -49,40 +47,88 @@
     };
 };
 
-class WebVTTToken : public MarkupTokenBase<WebVTTTokenTypes> {
+class WebVTTToken {
+    WTF_MAKE_NONCOPYABLE(WebVTTToken);
+    WTF_MAKE_FAST_ALLOCATED;
 public:
+    typedef WebVTTTokenTypes Type;
+    typedef WTF::Vector<UChar, 1024> DataVector; // FIXME: Is this too large for WebVTT?
+
+    WebVTTToken() { clear(); }
+
     void appendToName(UChar character)
     {
         ASSERT(m_type == WebVTTTokenTypes::StartTag || m_type == WebVTTTokenTypes::EndTag);
-        MarkupTokenBase<WebVTTTokenTypes>::appendToName(character);
+        ASSERT(character);
+        m_data.append(character);
     }
-    
+
+    Type::Type type() const { return m_type; }
+
     const DataVector& name() const
     {
-        return MarkupTokenBase<WebVTTTokenTypes>::name();
+        return m_data;
     }
-    
+
     const DataVector& characters() const
     {
         ASSERT(m_type == Type::Character || m_type == Type::TimestampTag);
         return m_data;
     }
-    
+
+    // Starting a character token works slightly differently than starting
+    // other types of tokens because we want to save a per-character branch.
+    void ensureIsCharacterToken()
+    {
+        ASSERT(m_type == Type::Uninitialized || m_type == Type::Character);
+        m_type = Type::Character;
+    }
+
+    void appendToCharacter(char character)
+    {
+        ASSERT(m_type == Type::Character);
+        m_data.append(character);
+    }
+
+    void appendToCharacter(UChar character)
+    {
+        ASSERT(m_type == Type::Character);
+        m_data.append(character);
+    }
+
+    void appendToCharacter(const Vector<LChar, 32>& characters)
+    {
+        ASSERT(m_type == Type::Character);
+        m_data.appendVector(characters);
+    }
+
     void beginEmptyStartTag()
     {
         ASSERT(m_type == Type::Uninitialized);
         m_type = Type::StartTag;
-        m_currentAttribute = 0;
-        m_attributes.clear();
         m_data.clear();
     }
  
+    void beginStartTag(UChar character)
+    {
+        ASSERT(character);
+        ASSERT(m_type == Type::Uninitialized);
+        m_type = Type::StartTag;
+        m_data.append(character);
+    }
+
+    void beginEndTag(LChar character)
+    {
+        ASSERT(m_type == Type::Uninitialized);
+        m_type = Type::EndTag;
+        m_data.append(character);
+    }
+
     void beginTimestampTag(UChar character)
     {
         ASSERT(character);
         ASSERT(m_type == Type::Uninitialized);
         m_type = Type::TimestampTag;
-        m_selfClosing = true;
         m_data.append(character);
     }
     
@@ -129,13 +175,20 @@
     {
         return m_annotation;
     }
+
+    void makeEndOfFile()
+    {
+        ASSERT(m_type == Type::Uninitialized);
+        m_type = Type::EndOfFile;
+    }
     
     void clear()
     {
+        m_type = Type::Uninitialized;
+        m_data.clear();
         m_annotation.clear();
         m_classes.clear();
         m_currentBuffer.clear();
-        MarkupTokenBase<WebVTTTokenTypes>::clear();
     }
 
 private:
@@ -146,6 +199,8 @@
         m_currentBuffer.append(character);
     }
 
+    Type::Type m_type;
+    DataVector m_data;
     DataVector m_annotation;
     DataVector m_classes;
     DataVector m_currentBuffer;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to