From 8d289f05495706c1bc88ee0fa57b4efe75a9ff69 Mon Sep 17 00:00:00 2001 From: Olli Pettay Date: Wed, 21 Jul 2010 19:03:21 +0300 Subject: [PATCH] Bug 580094 - Few SetInnerHTML micro optimizations , r=jst, a=benjamin --HG-- extra : rebase_source : d23e9583ef631e1a93d6aece9c3543c4b23ed9c2 --- content/base/src/nsContentSink.cpp | 6 ++---- content/base/src/nsContentUtils.cpp | 5 +++-- parser/html/nsHtml5Parser.cpp | 11 ++++------- parser/html/nsHtml5Parser.h | 4 ++-- parser/htmlparser/public/nsIParser.h | 7 ++++--- parser/htmlparser/src/nsParser.cpp | 2 +- parser/htmlparser/src/nsParser.h | 2 +- 7 files changed, 17 insertions(+), 20 deletions(-) diff --git a/content/base/src/nsContentSink.cpp b/content/base/src/nsContentSink.cpp index 0ee6869d5cd..a9f90bfee5f 100644 --- a/content/base/src/nsContentSink.cpp +++ b/content/base/src/nsContentSink.cpp @@ -1600,12 +1600,10 @@ nsContentSink::DropParserAndPerfHint(void) // Do this hack to make sure that the parser // doesn't get destroyed, accidently, before // the circularity, between sink & parser, is - // actually borken. - nsCOMPtr kungFuDeathGrip(mParser); - + // actually broken. // Drop our reference to the parser to get rid of a circular // reference. - mParser = nsnull; + nsCOMPtr kungFuDeathGrip(mParser.forget()); if (mDynamicLowerValue) { // Reset the performance hint which was set to FALSE diff --git a/content/base/src/nsContentUtils.cpp b/content/base/src/nsContentUtils.cpp index 30bc1976162..2dba25f4e29 100644 --- a/content/base/src/nsContentUtils.cpp +++ b/content/base/src/nsContentUtils.cpp @@ -3793,15 +3793,16 @@ nsContentUtils::CreateContextualFragment(nsINode* aContextNode, } } + nsCOMPtr fragment = do_QueryInterface(frag); if (contextAsContent) { parser->ParseFragment(aFragment, - frag, + fragment, contextAsContent->Tag(), contextAsContent->GetNameSpaceID(), (document->GetCompatibilityMode() == eCompatibility_NavQuirks)); } else { parser->ParseFragment(aFragment, - frag, + fragment, nsGkAtoms::body, kNameSpaceID_XHTML, (document->GetCompatibilityMode() == eCompatibility_NavQuirks)); diff --git a/parser/html/nsHtml5Parser.cpp b/parser/html/nsHtml5Parser.cpp index 974cfe90b00..d22c2d88dfd 100644 --- a/parser/html/nsHtml5Parser.cpp +++ b/parser/html/nsHtml5Parser.cpp @@ -428,15 +428,12 @@ nsHtml5Parser::ParseFragment(const nsAString& aSourceBuffer, NS_IMETHODIMP nsHtml5Parser::ParseFragment(const nsAString& aSourceBuffer, - nsISupports* aTargetNode, + nsIContent* aTargetNode, nsIAtom* aContextLocalName, PRInt32 aContextNamespace, PRBool aQuirks) { - nsCOMPtr target = do_QueryInterface(aTargetNode); - NS_ASSERTION(target, "Target did not QI to nsIContent"); - - nsIDocument* doc = target->GetOwnerDoc(); + nsIDocument* doc = aTargetNode->GetOwnerDoc(); NS_ENSURE_TRUE(doc, NS_ERROR_NOT_AVAILABLE); nsIURI* uri = doc->GetDocumentURI(); @@ -447,10 +444,10 @@ nsHtml5Parser::ParseFragment(const nsAString& aSourceBuffer, mExecutor->SetParser(this); mExecutor->SetNodeInfoManager(doc->NodeInfoManager()); - nsIContent* weakTarget = target; + nsIContent* target = aTargetNode; mTreeBuilder->setFragmentContext(aContextLocalName, aContextNamespace, - &weakTarget, + &target, aQuirks); mExecutor->EnableFragmentMode(); diff --git a/parser/html/nsHtml5Parser.h b/parser/html/nsHtml5Parser.h index d54ade1db37..ea579179253 100644 --- a/parser/html/nsHtml5Parser.h +++ b/parser/html/nsHtml5Parser.h @@ -217,13 +217,13 @@ class nsHtml5Parser : public nsIParser, * Invoke the fragment parsing algorithm (innerHTML). * * @param aSourceBuffer the string being set as innerHTML - * @param aTargetNode the target container (must QI to nsIContent) + * @param aTargetNode the target container * @param aContextLocalName local name of context node * @param aContextNamespace namespace of context node * @param aQuirks true to make not close

*/ NS_IMETHOD ParseFragment(const nsAString& aSourceBuffer, - nsISupports* aTargetNode, + nsIContent* aTargetNode, nsIAtom* aContextLocalName, PRInt32 aContextNamespace, PRBool aQuirks); diff --git a/parser/htmlparser/public/nsIParser.h b/parser/htmlparser/public/nsIParser.h index cf3c199b93b..8e2be441582 100644 --- a/parser/htmlparser/public/nsIParser.h +++ b/parser/htmlparser/public/nsIParser.h @@ -55,8 +55,8 @@ #include "nsIAtom.h" #define NS_IPARSER_IID \ -{ 0x3db442c2, 0x8a4d, 0x4ce4, \ -{ 0x86, 0x58, 0x48, 0xee, 0x55, 0x4b, 0xbb, 0xd4 } } +{ 0xcbc0cbd8, 0xbbb7, 0x46d6, \ + { 0xa5, 0x51, 0x37, 0x8a, 0x69, 0x53, 0xa7, 0x14 } } // {41421C60-310A-11d4-816F-000064657374} #define NS_IDEBUG_DUMP_CONTENT_IID \ @@ -69,6 +69,7 @@ class nsIParserFilter; class nsString; class nsIURI; class nsIChannel; +class nsIContent; enum eParserCommands { eViewNormal, @@ -263,7 +264,7 @@ class nsIParser : public nsISupports { nsDTDMode aMode = eDTDMode_autodetect) = 0; NS_IMETHOD ParseFragment(const nsAString& aSourceBuffer, - nsISupports* aTargetNode, + nsIContent* aTargetNode, nsIAtom* aContextLocalName, PRInt32 aContextNamespace, PRBool aQuirks) = 0; diff --git a/parser/htmlparser/src/nsParser.cpp b/parser/htmlparser/src/nsParser.cpp index f429bc045ef..ffd588199f8 100644 --- a/parser/htmlparser/src/nsParser.cpp +++ b/parser/htmlparser/src/nsParser.cpp @@ -2123,7 +2123,7 @@ nsParser::Parse(const nsAString& aSourceBuffer, NS_IMETHODIMP nsParser::ParseFragment(const nsAString& aSourceBuffer, - nsISupports* aTargetNode, + nsIContent* aTargetNode, nsIAtom* aContextLocalName, PRInt32 aContextNamespace, PRBool aQuirks) diff --git a/parser/htmlparser/src/nsParser.h b/parser/htmlparser/src/nsParser.h index c34133833e5..c12e633c322 100644 --- a/parser/htmlparser/src/nsParser.h +++ b/parser/htmlparser/src/nsParser.h @@ -216,7 +216,7 @@ class nsParser : public nsIParser, nsDTDMode aMode = eDTDMode_autodetect); NS_IMETHOD ParseFragment(const nsAString& aSourceBuffer, - nsISupports* aTargetNode, + nsIContent* aTargetNode, nsIAtom* aContextLocalName, PRInt32 aContextNamespace, PRBool aQuirks);