Bug 386769 - "Make setting innerHTML faster". r=jst, sr=peterv, a=blocking1.9.

git-svn-id: svn://10.0.0.236/trunk@245266 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
bent.mozilla%gmail.com
2008-02-08 22:07:53 +00:00
parent 67ad77f715
commit e21a2262ee
17 changed files with 235 additions and 65 deletions

View File

@@ -244,6 +244,17 @@ static PRBool gDumpContent=PR_FALSE;
* default constructor
*/
nsParser::nsParser()
{
Initialize(PR_TRUE);
}
nsParser::~nsParser()
{
Cleanup();
}
void
nsParser::Initialize(PRBool aConstructor)
{
#ifdef NS_DEBUG
if (!gDumpContent) {
@@ -251,13 +262,22 @@ nsParser::nsParser()
}
#endif
if (aConstructor) {
// Raw pointer
mParserContext = 0;
}
else {
// nsCOMPtrs
mObserver = nsnull;
mParserFilter = nsnull;
}
mContinueEvent = nsnull;
mCharsetSource = kCharsetUninitialized;
mCharset.AssignLiteral("ISO-8859-1");
mParserContext=0;
mStreamStatus=0;
mCharsetSource=kCharsetUninitialized;
mInternalState=NS_OK;
mContinueEvent=nsnull;
mCommand=eViewNormal;
mInternalState = NS_OK;
mStreamStatus = 0;
mCommand = eViewNormal;
mFlags = NS_PARSER_FLAG_OBSERVERS_ENABLED |
NS_PARSER_FLAG_PARSER_ENABLED |
NS_PARSER_FLAG_CAN_TOKENIZE;
@@ -268,12 +288,9 @@ nsParser::nsParser()
MOZ_TIMER_RESET(mTokenizeTime);
}
/**
* Destructor
*/
nsParser::~nsParser()
void
nsParser::Cleanup()
{
#ifdef NS_DEBUG
if (gDumpContent) {
if (mSink) {
@@ -306,14 +323,31 @@ nsParser::~nsParser()
NS_ASSERTION(!(mFlags & NS_PARSER_FLAG_PENDING_CONTINUE_EVENT), "bad");
}
NS_IMPL_CYCLE_COLLECTION_2(nsParser, mSink, mObserver)
NS_IMPL_CYCLE_COLLECTION_CLASS(nsParser)
NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(nsParser)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mSink)
NS_IMPL_CYCLE_COLLECTION_UNLINK_NSCOMPTR(mObserver)
NS_IMPL_CYCLE_COLLECTION_UNLINK_END
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(nsParser)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mSink)
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mObserver)
CParserContext *pc = tmp->mParserContext;
while (pc) {
cb.NoteXPCOMChild(pc->mDTD);
cb.NoteXPCOMChild(pc->mTokenizer);
pc = pc->mPrevContext;
}
NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
NS_IMPL_CYCLE_COLLECTING_ADDREF_AMBIGUOUS(nsParser, nsIParser)
NS_IMPL_CYCLE_COLLECTING_RELEASE_AMBIGUOUS(nsParser, nsIParser)
NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(nsParser)
NS_INTERFACE_MAP_ENTRY(nsIStreamListener)
NS_INTERFACE_MAP_ENTRY(nsIParser)
NS_INTERFACE_MAP_ENTRY(nsIRequestObserver)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIParser)
NS_INTERFACE_MAP_ENTRY(nsIStreamListener)
NS_INTERFACE_MAP_ENTRY(nsIParser)
NS_INTERFACE_MAP_ENTRY(nsIRequestObserver)
NS_INTERFACE_MAP_ENTRY_AMBIGUOUS(nsISupports, nsIParser)
NS_INTERFACE_MAP_END
// The parser continue event is posted only if