Changeset 149705 in webkit


Ignore:
Timestamp:
May 7, 2013 6:41:16 PM (11 years ago)
Author:
rniwa@webkit.org
Message:

Devirtualize Document class type checking
https://bugs.webkit.org/show_bug.cgi?id=115755

Reviewed by Benjamin Poulain.

Merge https://chromium.googlesource.com/chromium/blink/+/dae5adc768d5ce6bff301df6515745da8ea24950

Document has a bunch of virtual bool is*Document() methods on it, but it also has
two bools for XHTML and HTML documents which is silly. We can merge them all
together into an enum of values and devirtualize the type checking methods.

  • dom/Document.cpp:

(WebCore::Document::Document):
(WebCore::Document::createElement):

  • dom/Document.h:

(WebCore::Document::create):
(WebCore::Document::createXHTML):
(WebCore::Document::isHTMLDocument):
(WebCore::Document::isXHTMLDocument):
(WebCore::Document::isImageDocument):
(WebCore::Document::isSVGDocument):
(WebCore::Document::isPluginDocument):
(WebCore::Document::isMediaDocument):
(WebCore::Document):

  • html/HTMLDocument.cpp:

(WebCore::HTMLDocument::HTMLDocument):

  • html/HTMLDocument.h:

(WebCore::HTMLDocument):

  • html/ImageDocument.cpp:

(WebCore::ImageDocument::ImageDocument):

  • html/ImageDocument.h:

(WebCore::ImageDocument):

  • html/MediaDocument.cpp:

(WebCore::MediaDocument::MediaDocument):

  • html/MediaDocument.h:

(WebCore::MediaDocument):

  • html/PluginDocument.cpp:

(WebCore::PluginDocument::PluginDocument):

  • html/PluginDocument.h:

(WebCore::PluginDocument):

  • loader/PlaceholderDocument.h:

(WebCore::PlaceholderDocument::PlaceholderDocument):

  • svg/SVGDocument.cpp:

(WebCore::SVGDocument::SVGDocument):

  • svg/SVGDocument.h:

(WebCore::SVGDocument):

Location:
trunk/Source/WebCore
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r149700 r149705  
     12013-05-07  Ryosuke Niwa  <rniwa@webkit.org>
     2
     3        Devirtualize Document class type checking
     4        https://bugs.webkit.org/show_bug.cgi?id=115755
     5
     6        Reviewed by Benjamin Poulain.
     7
     8        Merge https://chromium.googlesource.com/chromium/blink/+/dae5adc768d5ce6bff301df6515745da8ea24950
     9
     10        Document has a bunch of virtual bool is*Document() methods on it, but it also has
     11        two bools for XHTML and HTML documents which is silly. We can merge them all
     12        together into an enum of values and devirtualize the type checking methods.
     13
     14        * dom/Document.cpp:
     15        (WebCore::Document::Document):
     16        (WebCore::Document::createElement):
     17        * dom/Document.h:
     18        (WebCore::Document::create):
     19        (WebCore::Document::createXHTML):
     20        (WebCore::Document::isHTMLDocument):
     21        (WebCore::Document::isXHTMLDocument):
     22        (WebCore::Document::isImageDocument):
     23        (WebCore::Document::isSVGDocument):
     24        (WebCore::Document::isPluginDocument):
     25        (WebCore::Document::isMediaDocument):
     26        (WebCore::Document):
     27        * html/HTMLDocument.cpp:
     28        (WebCore::HTMLDocument::HTMLDocument):
     29        * html/HTMLDocument.h:
     30        (WebCore::HTMLDocument):
     31        * html/ImageDocument.cpp:
     32        (WebCore::ImageDocument::ImageDocument):
     33        * html/ImageDocument.h:
     34        (WebCore::ImageDocument):
     35        * html/MediaDocument.cpp:
     36        (WebCore::MediaDocument::MediaDocument):
     37        * html/MediaDocument.h:
     38        (WebCore::MediaDocument):
     39        * html/PluginDocument.cpp:
     40        (WebCore::PluginDocument::PluginDocument):
     41        * html/PluginDocument.h:
     42        (WebCore::PluginDocument):
     43        * loader/PlaceholderDocument.h:
     44        (WebCore::PlaceholderDocument::PlaceholderDocument):
     45        * svg/SVGDocument.cpp:
     46        (WebCore::SVGDocument::SVGDocument):
     47        * svg/SVGDocument.h:
     48        (WebCore::SVGDocument):
     49
    1502013-05-07  Anders Carlsson  <andersca@apple.com>
    251
  • trunk/Source/WebCore/dom/Document.cpp

    r149652 r149705  
    414414uint64_t Document::s_globalTreeVersion = 0;
    415415
    416 Document::Document(Frame* frame, const KURL& url, bool isXHTML, bool isHTML)
     416Document::Document(Frame* frame, const KURL& url, unsigned documentClasses)
    417417    : ContainerNode(0, CreateDocument)
    418418    , TreeScope(this)
     
    452452    , m_inPageCache(false)
    453453    , m_accessKeyMapValid(false)
    454     , m_isXHTML(isXHTML)
    455     , m_isHTML(isHTML)
     454    , m_documentClasses(documentClasses)
    456455    , m_isViewSource(false)
    457456    , m_sawElementsInKnownNamespaces(false)
     
    829828    }
    830829
    831     if (m_isXHTML)
     830    if (isXHTMLDocument())
    832831        return HTMLElementFactory::createHTMLElement(QualifiedName(nullAtom, name, xhtmlNamespaceURI), this, 0, false);
    833832
  • trunk/Source/WebCore/dom/Document.h

    r149586 r149705  
    221221typedef HashCountedSet<Node*> TouchEventTargetSet;
    222222
     223enum DocumentClass {
     224    DefaultDocumentClass = 0,
     225    HTMLDocumentClass = 1,
     226    XHTMLDocumentClass = 1 << 1,
     227    ImageDocumentClass = 1 << 2,
     228    PluginDocumentClass = 1 << 3,
     229    MediaDocumentClass = 1 << 4,
     230    SVGDocumentClass = 1 << 5,
     231};
     232
     233typedef unsigned char DocumentClassFlags;
     234
    223235class Document : public ContainerNode, public TreeScope, public ScriptExecutionContext {
    224236public:
    225237    static PassRefPtr<Document> create(Frame* frame, const KURL& url)
    226238    {
    227         return adoptRef(new Document(frame, url, false, false));
     239        return adoptRef(new Document(frame, url));
    228240    }
    229241    static PassRefPtr<Document> createXHTML(Frame* frame, const KURL& url)
    230242    {
    231         return adoptRef(new Document(frame, url, true, false));
     243        return adoptRef(new Document(frame, url, XHTMLDocumentClass));
    232244    }
    233245    virtual ~Document();
     
    428440
    429441    // Other methods (not part of DOM)
    430     bool isHTMLDocument() const { return m_isHTML; }
    431     bool isXHTMLDocument() const { return m_isXHTML; }
    432     virtual bool isImageDocument() const { return false; }
     442    bool isHTMLDocument() const { return m_documentClasses & HTMLDocumentClass; }
     443    bool isXHTMLDocument() const { return m_documentClasses & XHTMLDocumentClass; }
     444    bool isImageDocument() const { return m_documentClasses & ImageDocumentClass; }
     445    bool isSVGDocument() const { return m_documentClasses & SVGDocumentClass; }
     446    bool isPluginDocument() const { return m_documentClasses & PluginDocumentClass; }
     447    bool isMediaDocument() const { return m_documentClasses & MediaDocumentClass; }
    433448#if ENABLE(SVG)
    434     virtual bool isSVGDocument() const { return false; }
    435449    bool hasSVGRootNode() const;
    436450#else
    437     static bool isSVGDocument() { return false; }
    438451    static bool hasSVGRootNode() { return false; }
    439452#endif
    440     virtual bool isPluginDocument() const { return false; }
    441     virtual bool isMediaDocument() const { return false; }
    442453    virtual bool isFrameSet() const { return false; }
    443454
     
    12081219
    12091220protected:
    1210     Document(Frame*, const KURL&, bool isXHTML, bool isHTML);
     1221    Document(Frame*, const KURL&, unsigned = DefaultDocumentClass);
    12111222
    12121223    virtual void didUpdateSecurityOrigin() OVERRIDE;
     
    14751486    OwnPtr<SelectorQueryCache> m_selectorQueryCache;
    14761487
    1477     bool m_isXHTML;
    1478     bool m_isHTML;
     1488    DocumentClassFlags m_documentClasses;
    14791489
    14801490    bool m_isViewSource;
  • trunk/Source/WebCore/html/HTMLDocument.cpp

    r149652 r149705  
    8282using namespace HTMLNames;
    8383
    84 HTMLDocument::HTMLDocument(Frame* frame, const KURL& url)
    85     : Document(frame, url, false, true)
     84HTMLDocument::HTMLDocument(Frame* frame, const KURL& url, DocumentClassFlags documentClasses)
     85    : Document(frame, url, documentClasses | HTMLDocumentClass)
    8686{
    8787    clearXMLVersion();
  • trunk/Source/WebCore/html/HTMLDocument.h

    r149652 r149705  
    7676
    7777protected:
    78     HTMLDocument(Frame*, const KURL&);
     78    HTMLDocument(Frame*, const KURL&, DocumentClassFlags = 0);
    7979
    8080private:
  • trunk/Source/WebCore/html/ImageDocument.cpp

    r145745 r149705  
    178178
    179179ImageDocument::ImageDocument(Frame* frame, const KURL& url)
    180     : HTMLDocument(frame, url)
     180    : HTMLDocument(frame, url, ImageDocumentClass)
    181181    , m_imageElement(0)
    182182    , m_imageSizeIsKnown(false)
  • trunk/Source/WebCore/html/ImageDocument.h

    r145745 r149705  
    5252
    5353    virtual PassRefPtr<DocumentParser> createParser();
    54     virtual bool isImageDocument() const { return true; }
    5554   
    5655    void createDocumentStructure();
  • trunk/Source/WebCore/html/MediaDocument.cpp

    r147888 r149705  
    119119   
    120120MediaDocument::MediaDocument(Frame* frame, const KURL& url)
    121     : HTMLDocument(frame, url)
     121    : HTMLDocument(frame, url, MediaDocumentClass)
    122122    , m_replaceMediaElementTimer(this, &MediaDocument::replaceMediaElementTimerFired)
    123123{
  • trunk/Source/WebCore/html/MediaDocument.h

    r145745 r149705  
    4646    MediaDocument(Frame*, const KURL&);
    4747
    48     virtual bool isMediaDocument() const { return true; }       
    4948    virtual PassRefPtr<DocumentParser> createParser();
    5049
  • trunk/Source/WebCore/html/PluginDocument.cpp

    r145914 r149705  
    137137
    138138PluginDocument::PluginDocument(Frame* frame, const KURL& url)
    139     : HTMLDocument(frame, url)
     139    : HTMLDocument(frame, url, PluginDocumentClass)
    140140    , m_shouldLoadPluginManually(true)
    141141{
  • trunk/Source/WebCore/html/PluginDocument.h

    r145399 r149705  
    5555
    5656    virtual PassRefPtr<DocumentParser> createParser() OVERRIDE;
    57     virtual bool isPluginDocument() const OVERRIDE { return true; }   
    58        
     57
    5958    void setShouldLoadPluginManually(bool loadManually) { m_shouldLoadPluginManually = loadManually; }
    6059
  • trunk/Source/WebCore/loader/PlaceholderDocument.h

    r95901 r149705  
    4141
    4242private:
    43     PlaceholderDocument(Frame* frame, const KURL& url) : Document(frame, url, false, false) { }
     43    PlaceholderDocument(Frame* frame, const KURL& url)
     44        : Document(frame, url)
     45    { }
    4446};
    4547
  • trunk/Source/WebCore/svg/SVGDocument.cpp

    r145459 r149705  
    3838
    3939SVGDocument::SVGDocument(Frame* frame, const KURL& url)
    40     : Document(frame, url, false, false)
     40    : Document(frame, url, SVGDocumentClass)
    4141{
    4242}
  • trunk/Source/WebCore/svg/SVGDocument.h

    r145745 r149705  
    5252    SVGDocument(Frame*, const KURL&);
    5353
    54     virtual bool isSVGDocument() const { return true; }
    55 
    5654    virtual bool childShouldCreateRenderer(const NodeRenderingContext&) const;
    5755
Note: See TracChangeset for help on using the changeset viewer.