Skip to content
  • eric@webkit.org's avatar
    2011-01-28 Eric Seidel <eric@webkit.org> · 61acd1c1
    eric@webkit.org authored
            Reviewed by Darin Adler.
    
            HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
            https://bugs.webkit.org/show_bug.cgi?id=48719
    
            It's unclear exactly what the Peacekeeper benchmark is testing,
            because I haven't found a way to run it myself.
    
            However, I constructed a benchmark which shows at least one possible slow point.
            The HTML5 spec talks about creating a new document for every time we use
            the fragment parsing algorithm.  Document() it turns out, it a huge bloated
            mess, and the constructor and destructor do a huge amount of work.
            To avoid constructing (or destructing) documents for each innerHTML call,
            this patch adds a shared dummy document used by all innerHTML calls.
    
            * benchmarks/parser/tiny-innerHTML.html: Added.
    2011-01-28  Eric Seidel  <eric@webkit.org>
    
            Reviewed by Darin Adler.
    
            HTML5 TreeBuilder regressed a Peacekeeper DOM test by 40%
            https://bugs.webkit.org/show_bug.cgi?id=48719
    
            It's unclear exactly what the Peacekeeper benchmark is testing,
            because I haven't found a way to run it myself.
    
            However, I constructed a benchmark which shows at least one possible slow point.
            The HTML5 spec talks about creating a new document for every time we use
            the fragment parsing algorithm.  Document() it turns out, it a huge bloated
            mess, and the constructor and destructor do a huge amount of work.
            To avoid constructing (or destructing) documents for each innerHTML call,
            this patch adds a shared dummy document used by all innerHTML calls.
    
            This patch brings us from 7x slower than Safari 5 on tiny-innerHTML
            to only 1.5x slower than Safari 5.  I'm sure there is more work to do here.
    
            Saving a shared Document like this is error prone.  Currently
            DummyDocumentFactory::releaseDocument() calls removeAllChildren()
            in an attempt to clear the Document's state. However it's possible
            that that call is not sufficient and we'll have future bugs here.
    
            * html/parser/HTMLTreeBuilder.cpp:
            (WebCore::DummyDocumentFactory::createDummyDocument):
            (WebCore::DummyDocumentFactory::releaseDocument):
            (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
            (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
            (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):
            * html/parser/HTMLTreeBuilder.h:
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@77050 268f45cc-cd09-0410-ab3c-d52691b4dbfc
    61acd1c1