diff --git a/mozilla/htmlparser/src/CNavDTD.cpp b/mozilla/htmlparser/src/CNavDTD.cpp
index 1c60833745f..f6ba4d25c1a 100644
--- a/mozilla/htmlparser/src/CNavDTD.cpp
+++ b/mozilla/htmlparser/src/CNavDTD.cpp
@@ -78,6 +78,20 @@ static eHTMLTags gWhitespaceTags[]={
#include "nsElementTable.h"
+
+#ifdef RAPTOR_PERF_METRICS
+# define START_TIMER() \
+ if(mParser) mParser->mParseTime.Start(PR_FALSE);
+
+# define STOP_TIMER() \
+ if(mParser) mParser->mParseTime.Stop();
+
+#else
+# define STOP_TIMER()
+# define START_TIMER()
+#endif
+
+
/***************************************************************
This the ITagHandler deque deallocator, needed by the
CTagHandlerRegister
@@ -487,8 +501,6 @@ eAutoDetectResult CNavDTD::CanParse(nsString& aContentType, nsString& aCommand,
}
-PRTime gStartTime;
-
/**
*
* @update gess5/18/98
@@ -506,17 +518,15 @@ nsresult CNavDTD::WillBuildModel(nsString& aFilename,PRBool aNotifySink,nsString
mHasOpenScript=PR_FALSE;
if((aNotifySink) && (aSink)) {
+ STOP_TIMER();
+
if(aSink && (!mSink)) {
result=aSink->QueryInterface(kIHTMLContentSinkIID, (void **)&mSink);
}
-
-
-#ifdef RGESS_DEBUG
- gStartTime = PR_Now();
- printf("Begin parsing...\n");
-#endif
-
result = aSink->WillBuildModel();
+
+ START_TIMER();
+
CStartToken theToken(eHTMLTag_html);
HandleStartToken(&theToken);
@@ -603,15 +613,6 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
}
}
- #ifdef RGESS_DEBUG
- PRTime theEnd= PR_Now();
- PRTime creates, ustoms;
- LL_I2L(ustoms, 1000);
- LL_SUB(creates, theEnd, gStartTime);
- LL_DIV(creates, creates, ustoms);
- printf("End parse elapsed: %lldms\n",creates);
- #endif
-
//let's only grab this state once!
if(!gShowCRC) {
gShowCRC=1; //this only indicates we'll not initialize again.
@@ -623,6 +624,8 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
}
}
+ STOP_TIMER();
+
if(2==gShowCRC) {
if(mComputedCRC32!=mExpectedCRC32) {
if(mExpectedCRC32!=0) {
@@ -641,6 +644,9 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
if(mDTDDebug) {
mDTDDebug->DumpVectorRecord();
}
+
+ START_TIMER();
+
}
}
}
@@ -821,10 +827,16 @@ nsresult CNavDTD::DidHandleStartTag(nsCParserNode& aNode,eHTMLTags aChildTag){
case eHTMLTag_xmp:
//grab the skipped content and dump it out as text...
{
+
+ STOP_TIMER();
+
const nsString& theText=aNode.GetSkippedContent();
if(0AddLeaf(*theNode);
+
+ START_TIMER();
+
break;
case eHTMLTag_image:
@@ -1634,7 +1652,12 @@ nsresult CNavDTD::HandleCommentToken(CToken* aToken) {
WriteTokenToLog(aToken);
#endif
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->AddComment(aNode) : NS_OK;
+
+ START_TIMER();
+
return result;
}
@@ -1704,7 +1727,12 @@ nsresult CNavDTD::HandleProcessingInstructionToken(CToken* aToken){
WriteTokenToLog(aToken);
#endif
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->AddProcessingInstruction(aNode) : NS_OK;
+
+ START_TIMER();
+
return result;
}
@@ -1731,7 +1759,13 @@ nsresult CNavDTD::HandleDocTypeDeclToken(CToken* aToken){
mLineNumber += (docTypeStr).CountChar(kNewLine);
docTypeStr.Trim("");
nsCParserNode theNode((CHTMLToken*)aToken,mLineNumber,mTokenizer->GetTokenRecycler());
+
+ STOP_TIMER();
+
result = (mSink)? mSink->AddDocTypeDecl(theNode, pc->mParseMode):NS_OK;
+
+ START_TIMER();
+
}
return result;
}
@@ -2235,7 +2269,12 @@ nsresult CNavDTD::CloseTransientStyles(eHTMLTags aChildTag){
nsresult CNavDTD::OpenHTML(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos);
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenHTML(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
return result;
}
@@ -2251,7 +2290,13 @@ nsresult CNavDTD::OpenHTML(const nsIParserNode& aNode){
*/
nsresult CNavDTD::CloseHTML(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() > 0, kInvalidTagStackPos);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->CloseHTML(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
return result;
}
@@ -2268,9 +2313,15 @@ nsresult CNavDTD::CloseHTML(const nsIParserNode& aNode){
nsresult CNavDTD::OpenHead(const nsIParserNode& aNode){
//mBodyContext->Push(eHTMLTag_head);
nsresult result=NS_OK;
+
+ STOP_TIMER();
+
if(!mHasOpenHead++) {
result=(mSink) ? mSink->OpenHead(aNode) : NS_OK;
}
+
+ START_TIMER();
+
return result;
}
@@ -2286,7 +2337,13 @@ nsresult CNavDTD::CloseHead(const nsIParserNode& aNode){
nsresult result=NS_OK;
if(mHasOpenHead) {
if(0==--mHasOpenHead){
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseHead(aNode) : NS_OK;
+
+ START_TIMER();
+
}
}
//mBodyContext->Pop();
@@ -2324,7 +2381,13 @@ nsresult CNavDTD::OpenBody(const nsIParserNode& aNode){
}
if(NS_OK==result) {
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->OpenBody(aNode) : NS_OK;
+
+ START_TIMER();
+
if(!theBodyIsOpen) {
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
mTokenizer->PrependTokens(mMisplacedContent);
@@ -2344,7 +2407,13 @@ nsresult CNavDTD::OpenBody(const nsIParserNode& aNode){
*/
nsresult CNavDTD::CloseBody(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->CloseBody(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
return result;
}
@@ -2360,7 +2429,13 @@ nsresult CNavDTD::CloseBody(const nsIParserNode& aNode){
nsresult CNavDTD::OpenForm(const nsIParserNode& aNode){
if(mHasOpenForm)
CloseForm(aNode);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenForm(aNode) : NS_OK;
+
+ START_TIMER();
+
if(NS_OK==result)
mHasOpenForm=PR_TRUE;
return result;
@@ -2379,7 +2454,13 @@ nsresult CNavDTD::CloseForm(const nsIParserNode& aNode){
nsresult result=NS_OK;
if(mHasOpenForm) {
mHasOpenForm=PR_FALSE;
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseForm(aNode) : NS_OK;
+
+ START_TIMER();
+
}
return result;
}
@@ -2395,7 +2476,13 @@ nsresult CNavDTD::CloseForm(const nsIParserNode& aNode){
nsresult CNavDTD::OpenMap(const nsIParserNode& aNode){
if(mHasOpenMap)
CloseMap(aNode);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenMap(aNode) : NS_OK;
+
+ START_TIMER();
+
if(NS_OK==result) {
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
mHasOpenMap=PR_TRUE;
@@ -2416,7 +2503,13 @@ nsresult CNavDTD::CloseMap(const nsIParserNode& aNode){
nsresult result=NS_OK;
if(mHasOpenMap) {
mHasOpenMap=PR_FALSE;
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseMap(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
}
return result;
@@ -2434,7 +2527,13 @@ nsresult CNavDTD::OpenFrameset(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos);
mHadFrameset=PR_TRUE;
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenFrameset(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
mHadFrameset=PR_TRUE;
return result;
@@ -2450,7 +2549,13 @@ nsresult CNavDTD::OpenFrameset(const nsIParserNode& aNode){
*/
nsresult CNavDTD::CloseFrameset(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() > 0, kInvalidTagStackPos);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->CloseFrameset(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
return result;
}
@@ -2530,7 +2635,13 @@ CNavDTD::OpenContainer(const nsIParserNode& aNode,PRBool aClosedByStartTag){
break;
default:
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->OpenContainer(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
break;
}
@@ -2594,7 +2705,13 @@ CNavDTD::CloseContainer(const nsIParserNode& aNode,eHTMLTags aTag,PRBool aClosed
case eHTMLTag_title:
default:
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseContainer(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
break;
}
@@ -2716,7 +2833,13 @@ nsresult CNavDTD::AddLeaf(const nsIParserNode& aNode){
if(mSink){
eHTMLTags theTag=(eHTMLTags)aNode.GetNodeType();
OpenTransientStyles(theTag);
+
+ STOP_TIMER();
+
result=mSink->AddLeaf(aNode);
+
+ START_TIMER();
+
}
return result;
}
@@ -2947,7 +3070,13 @@ nsITokenizer* CNavDTD::GetTokenizer(void) {
* @return
*/
nsresult CNavDTD::WillResumeParse(void){
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->WillResume() : NS_OK;
+
+ START_TIMER();
+
return result;
}
@@ -2958,7 +3087,13 @@ nsresult CNavDTD::WillResumeParse(void){
* @return error code
*/
nsresult CNavDTD::WillInterruptParse(void){
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->WillInterrupt() : NS_OK;
+
+ START_TIMER();
+
return result;
}
diff --git a/mozilla/htmlparser/src/nsParser.cpp b/mozilla/htmlparser/src/nsParser.cpp
index 7569b92c853..199ba970086 100644
--- a/mozilla/htmlparser/src/nsParser.cpp
+++ b/mozilla/htmlparser/src/nsParser.cpp
@@ -194,6 +194,11 @@ nsParser::nsParser(nsITokenObserver* anObserver) : mCommand(""), mUnusedInput(""
mDTDVerification=PR_FALSE;
mCharsetSource=kCharsetUninitialized;
mInternalState=NS_OK;
+
+#ifdef RAPTOR_PERF_METRICS
+
+ mParseTime.Reset();
+#endif
}
@@ -635,6 +640,9 @@ nsresult nsParser::EnableParser(PRBool aState){
if(result!=NS_OK)
result=mInternalState;
}
+ else {
+ NS_STOP_STOPWATCH(mParseTime);
+ }
NS_STOP_STOPWATCH(mTotalTime)
@@ -649,9 +657,7 @@ nsresult nsParser::EnableParser(PRBool aState){
* @update vidur 4/12/99
* @return current state
*/
-PRBool
-nsParser::IsParserEnabled()
-{
+PRBool nsParser::IsParserEnabled() {
return mParserContext->mParserEnabled;
}
@@ -669,6 +675,7 @@ nsParser::IsParserEnabled()
*/
nsresult nsParser::Parse(nsIURI* aURL,nsIStreamObserver* aListener,PRBool aVerifyEnabled, void* aKey,eParseMode aMode) {
NS_START_STOPWATCH(mTotalTime)
+
NS_PRECONDITION(0!=aURL,kNullURL);
nsresult result=kBadURL;
@@ -713,6 +720,7 @@ nsresult nsParser::Parse(nsIURI* aURL,nsIStreamObserver* aListener,PRBool aVerif
*/
nsresult nsParser::Parse(nsIInputStream& aStream,PRBool aVerifyEnabled, void* aKey,eParseMode aMode){
NS_START_STOPWATCH(mTotalTime)
+
mDTDVerification=aVerifyEnabled;
nsresult result=NS_ERROR_OUT_OF_MEMORY;
@@ -902,6 +910,9 @@ nsresult nsParser::ParseFragment(const nsString& aSourceBuffer,void* aKey,nsITag
nsresult nsParser::ResumeParse(nsIDTD* aDefaultDTD, PRBool aIsFinalChunk) {
nsresult result=NS_OK;
if(mParserContext->mParserEnabled && mInternalState!=NS_ERROR_HTMLPARSER_STOPPARSING) {
+
+ NS_START_STOPWATCH(mParseTime)
+
result=WillBuildModel(mParserContext->mScanner->GetFilename(),aDefaultDTD);
if(mParserContext->mDTD) {
mParserContext->mDTD->WillResumeParse();
@@ -915,10 +926,18 @@ nsresult nsParser::ResumeParse(nsIDTD* aDefaultDTD, PRBool aIsFinalChunk) {
((eOnStop==mParserContext->mStreamListenerState) && (NS_OK==result))){
DidBuildModel(mStreamStatus);
NS_STOP_STOPWATCH(mTotalTime);
+ NS_STOP_STOPWATCH(mParseTime);
+
+
#ifdef RAPTOR_PERF_METRICS
printf("Total Time: ");
mTotalTime.Print();
printf("\n");
+
+ printf("Parse Time: ");
+ mParseTime.Print();
+ printf("\n");
+
#endif
return mInternalState;
}
@@ -939,6 +958,8 @@ nsresult nsParser::ResumeParse(nsIDTD* aDefaultDTD, PRBool aIsFinalChunk) {
}
}//if
+ NS_STOP_STOPWATCH(mParseTime);
+
return result;
}
@@ -1288,7 +1309,7 @@ nsresult nsParser::OnDataAvailable(nsIURI* aURL, nsIInputStream *pIStream, PRUin
printf("xmlencoding detect- %s\n", guess.ToNewCString());
#endif
this->SetDocumentCharset(guess, guessSource);
- mParserContext->mScanner->SetDocumentCharset(guess, guessSource);
+ mParserContext->mScanner->SetDocumentCharset(guess, guessSource);
}
}
theTotalRead+=theNumRead;
diff --git a/mozilla/htmlparser/src/nsParser.h b/mozilla/htmlparser/src/nsParser.h
index 345f46056f8..1872515d1b7 100644
--- a/mozilla/htmlparser/src/nsParser.h
+++ b/mozilla/htmlparser/src/nsParser.h
@@ -381,9 +381,13 @@ protected:
nsCharsetSource mCharsetSource;
nsresult mInternalState;
CObserverService mObserverService;
+
#ifdef RAPTOR_PERF_METRICS
+public:
Stopwatch mTotalTime;
+ Stopwatch mParseTime;
#endif
+
};
diff --git a/mozilla/parser/htmlparser/src/CNavDTD.cpp b/mozilla/parser/htmlparser/src/CNavDTD.cpp
index 1c60833745f..f6ba4d25c1a 100644
--- a/mozilla/parser/htmlparser/src/CNavDTD.cpp
+++ b/mozilla/parser/htmlparser/src/CNavDTD.cpp
@@ -78,6 +78,20 @@ static eHTMLTags gWhitespaceTags[]={
#include "nsElementTable.h"
+
+#ifdef RAPTOR_PERF_METRICS
+# define START_TIMER() \
+ if(mParser) mParser->mParseTime.Start(PR_FALSE);
+
+# define STOP_TIMER() \
+ if(mParser) mParser->mParseTime.Stop();
+
+#else
+# define STOP_TIMER()
+# define START_TIMER()
+#endif
+
+
/***************************************************************
This the ITagHandler deque deallocator, needed by the
CTagHandlerRegister
@@ -487,8 +501,6 @@ eAutoDetectResult CNavDTD::CanParse(nsString& aContentType, nsString& aCommand,
}
-PRTime gStartTime;
-
/**
*
* @update gess5/18/98
@@ -506,17 +518,15 @@ nsresult CNavDTD::WillBuildModel(nsString& aFilename,PRBool aNotifySink,nsString
mHasOpenScript=PR_FALSE;
if((aNotifySink) && (aSink)) {
+ STOP_TIMER();
+
if(aSink && (!mSink)) {
result=aSink->QueryInterface(kIHTMLContentSinkIID, (void **)&mSink);
}
-
-
-#ifdef RGESS_DEBUG
- gStartTime = PR_Now();
- printf("Begin parsing...\n");
-#endif
-
result = aSink->WillBuildModel();
+
+ START_TIMER();
+
CStartToken theToken(eHTMLTag_html);
HandleStartToken(&theToken);
@@ -603,15 +613,6 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
}
}
- #ifdef RGESS_DEBUG
- PRTime theEnd= PR_Now();
- PRTime creates, ustoms;
- LL_I2L(ustoms, 1000);
- LL_SUB(creates, theEnd, gStartTime);
- LL_DIV(creates, creates, ustoms);
- printf("End parse elapsed: %lldms\n",creates);
- #endif
-
//let's only grab this state once!
if(!gShowCRC) {
gShowCRC=1; //this only indicates we'll not initialize again.
@@ -623,6 +624,8 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
}
}
+ STOP_TIMER();
+
if(2==gShowCRC) {
if(mComputedCRC32!=mExpectedCRC32) {
if(mExpectedCRC32!=0) {
@@ -641,6 +644,9 @@ nsresult CNavDTD::DidBuildModel(nsresult anErrorCode,PRBool aNotifySink,nsIParse
if(mDTDDebug) {
mDTDDebug->DumpVectorRecord();
}
+
+ START_TIMER();
+
}
}
}
@@ -821,10 +827,16 @@ nsresult CNavDTD::DidHandleStartTag(nsCParserNode& aNode,eHTMLTags aChildTag){
case eHTMLTag_xmp:
//grab the skipped content and dump it out as text...
{
+
+ STOP_TIMER();
+
const nsString& theText=aNode.GetSkippedContent();
if(0AddLeaf(*theNode);
+
+ START_TIMER();
+
break;
case eHTMLTag_image:
@@ -1634,7 +1652,12 @@ nsresult CNavDTD::HandleCommentToken(CToken* aToken) {
WriteTokenToLog(aToken);
#endif
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->AddComment(aNode) : NS_OK;
+
+ START_TIMER();
+
return result;
}
@@ -1704,7 +1727,12 @@ nsresult CNavDTD::HandleProcessingInstructionToken(CToken* aToken){
WriteTokenToLog(aToken);
#endif
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->AddProcessingInstruction(aNode) : NS_OK;
+
+ START_TIMER();
+
return result;
}
@@ -1731,7 +1759,13 @@ nsresult CNavDTD::HandleDocTypeDeclToken(CToken* aToken){
mLineNumber += (docTypeStr).CountChar(kNewLine);
docTypeStr.Trim("");
nsCParserNode theNode((CHTMLToken*)aToken,mLineNumber,mTokenizer->GetTokenRecycler());
+
+ STOP_TIMER();
+
result = (mSink)? mSink->AddDocTypeDecl(theNode, pc->mParseMode):NS_OK;
+
+ START_TIMER();
+
}
return result;
}
@@ -2235,7 +2269,12 @@ nsresult CNavDTD::CloseTransientStyles(eHTMLTags aChildTag){
nsresult CNavDTD::OpenHTML(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos);
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenHTML(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
return result;
}
@@ -2251,7 +2290,13 @@ nsresult CNavDTD::OpenHTML(const nsIParserNode& aNode){
*/
nsresult CNavDTD::CloseHTML(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() > 0, kInvalidTagStackPos);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->CloseHTML(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
return result;
}
@@ -2268,9 +2313,15 @@ nsresult CNavDTD::CloseHTML(const nsIParserNode& aNode){
nsresult CNavDTD::OpenHead(const nsIParserNode& aNode){
//mBodyContext->Push(eHTMLTag_head);
nsresult result=NS_OK;
+
+ STOP_TIMER();
+
if(!mHasOpenHead++) {
result=(mSink) ? mSink->OpenHead(aNode) : NS_OK;
}
+
+ START_TIMER();
+
return result;
}
@@ -2286,7 +2337,13 @@ nsresult CNavDTD::CloseHead(const nsIParserNode& aNode){
nsresult result=NS_OK;
if(mHasOpenHead) {
if(0==--mHasOpenHead){
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseHead(aNode) : NS_OK;
+
+ START_TIMER();
+
}
}
//mBodyContext->Pop();
@@ -2324,7 +2381,13 @@ nsresult CNavDTD::OpenBody(const nsIParserNode& aNode){
}
if(NS_OK==result) {
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->OpenBody(aNode) : NS_OK;
+
+ START_TIMER();
+
if(!theBodyIsOpen) {
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
mTokenizer->PrependTokens(mMisplacedContent);
@@ -2344,7 +2407,13 @@ nsresult CNavDTD::OpenBody(const nsIParserNode& aNode){
*/
nsresult CNavDTD::CloseBody(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->CloseBody(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
return result;
}
@@ -2360,7 +2429,13 @@ nsresult CNavDTD::CloseBody(const nsIParserNode& aNode){
nsresult CNavDTD::OpenForm(const nsIParserNode& aNode){
if(mHasOpenForm)
CloseForm(aNode);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenForm(aNode) : NS_OK;
+
+ START_TIMER();
+
if(NS_OK==result)
mHasOpenForm=PR_TRUE;
return result;
@@ -2379,7 +2454,13 @@ nsresult CNavDTD::CloseForm(const nsIParserNode& aNode){
nsresult result=NS_OK;
if(mHasOpenForm) {
mHasOpenForm=PR_FALSE;
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseForm(aNode) : NS_OK;
+
+ START_TIMER();
+
}
return result;
}
@@ -2395,7 +2476,13 @@ nsresult CNavDTD::CloseForm(const nsIParserNode& aNode){
nsresult CNavDTD::OpenMap(const nsIParserNode& aNode){
if(mHasOpenMap)
CloseMap(aNode);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenMap(aNode) : NS_OK;
+
+ START_TIMER();
+
if(NS_OK==result) {
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
mHasOpenMap=PR_TRUE;
@@ -2416,7 +2503,13 @@ nsresult CNavDTD::CloseMap(const nsIParserNode& aNode){
nsresult result=NS_OK;
if(mHasOpenMap) {
mHasOpenMap=PR_FALSE;
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseMap(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
}
return result;
@@ -2434,7 +2527,13 @@ nsresult CNavDTD::OpenFrameset(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() >= 0, kInvalidTagStackPos);
mHadFrameset=PR_TRUE;
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->OpenFrameset(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
mHadFrameset=PR_TRUE;
return result;
@@ -2450,7 +2549,13 @@ nsresult CNavDTD::OpenFrameset(const nsIParserNode& aNode){
*/
nsresult CNavDTD::CloseFrameset(const nsIParserNode& aNode){
NS_PRECONDITION(mBodyContext->GetCount() > 0, kInvalidTagStackPos);
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->CloseFrameset(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
return result;
}
@@ -2530,7 +2635,13 @@ CNavDTD::OpenContainer(const nsIParserNode& aNode,PRBool aClosedByStartTag){
break;
default:
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->OpenContainer(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Push((eHTMLTags)aNode.GetNodeType());
break;
}
@@ -2594,7 +2705,13 @@ CNavDTD::CloseContainer(const nsIParserNode& aNode,eHTMLTags aTag,PRBool aClosed
case eHTMLTag_title:
default:
+
+ STOP_TIMER();
+
result=(mSink) ? mSink->CloseContainer(aNode) : NS_OK;
+
+ START_TIMER();
+
mBodyContext->Pop();
break;
}
@@ -2716,7 +2833,13 @@ nsresult CNavDTD::AddLeaf(const nsIParserNode& aNode){
if(mSink){
eHTMLTags theTag=(eHTMLTags)aNode.GetNodeType();
OpenTransientStyles(theTag);
+
+ STOP_TIMER();
+
result=mSink->AddLeaf(aNode);
+
+ START_TIMER();
+
}
return result;
}
@@ -2947,7 +3070,13 @@ nsITokenizer* CNavDTD::GetTokenizer(void) {
* @return
*/
nsresult CNavDTD::WillResumeParse(void){
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->WillResume() : NS_OK;
+
+ START_TIMER();
+
return result;
}
@@ -2958,7 +3087,13 @@ nsresult CNavDTD::WillResumeParse(void){
* @return error code
*/
nsresult CNavDTD::WillInterruptParse(void){
+
+ STOP_TIMER();
+
nsresult result=(mSink) ? mSink->WillInterrupt() : NS_OK;
+
+ START_TIMER();
+
return result;
}
diff --git a/mozilla/parser/htmlparser/src/nsParser.cpp b/mozilla/parser/htmlparser/src/nsParser.cpp
index 7569b92c853..199ba970086 100644
--- a/mozilla/parser/htmlparser/src/nsParser.cpp
+++ b/mozilla/parser/htmlparser/src/nsParser.cpp
@@ -194,6 +194,11 @@ nsParser::nsParser(nsITokenObserver* anObserver) : mCommand(""), mUnusedInput(""
mDTDVerification=PR_FALSE;
mCharsetSource=kCharsetUninitialized;
mInternalState=NS_OK;
+
+#ifdef RAPTOR_PERF_METRICS
+
+ mParseTime.Reset();
+#endif
}
@@ -635,6 +640,9 @@ nsresult nsParser::EnableParser(PRBool aState){
if(result!=NS_OK)
result=mInternalState;
}
+ else {
+ NS_STOP_STOPWATCH(mParseTime);
+ }
NS_STOP_STOPWATCH(mTotalTime)
@@ -649,9 +657,7 @@ nsresult nsParser::EnableParser(PRBool aState){
* @update vidur 4/12/99
* @return current state
*/
-PRBool
-nsParser::IsParserEnabled()
-{
+PRBool nsParser::IsParserEnabled() {
return mParserContext->mParserEnabled;
}
@@ -669,6 +675,7 @@ nsParser::IsParserEnabled()
*/
nsresult nsParser::Parse(nsIURI* aURL,nsIStreamObserver* aListener,PRBool aVerifyEnabled, void* aKey,eParseMode aMode) {
NS_START_STOPWATCH(mTotalTime)
+
NS_PRECONDITION(0!=aURL,kNullURL);
nsresult result=kBadURL;
@@ -713,6 +720,7 @@ nsresult nsParser::Parse(nsIURI* aURL,nsIStreamObserver* aListener,PRBool aVerif
*/
nsresult nsParser::Parse(nsIInputStream& aStream,PRBool aVerifyEnabled, void* aKey,eParseMode aMode){
NS_START_STOPWATCH(mTotalTime)
+
mDTDVerification=aVerifyEnabled;
nsresult result=NS_ERROR_OUT_OF_MEMORY;
@@ -902,6 +910,9 @@ nsresult nsParser::ParseFragment(const nsString& aSourceBuffer,void* aKey,nsITag
nsresult nsParser::ResumeParse(nsIDTD* aDefaultDTD, PRBool aIsFinalChunk) {
nsresult result=NS_OK;
if(mParserContext->mParserEnabled && mInternalState!=NS_ERROR_HTMLPARSER_STOPPARSING) {
+
+ NS_START_STOPWATCH(mParseTime)
+
result=WillBuildModel(mParserContext->mScanner->GetFilename(),aDefaultDTD);
if(mParserContext->mDTD) {
mParserContext->mDTD->WillResumeParse();
@@ -915,10 +926,18 @@ nsresult nsParser::ResumeParse(nsIDTD* aDefaultDTD, PRBool aIsFinalChunk) {
((eOnStop==mParserContext->mStreamListenerState) && (NS_OK==result))){
DidBuildModel(mStreamStatus);
NS_STOP_STOPWATCH(mTotalTime);
+ NS_STOP_STOPWATCH(mParseTime);
+
+
#ifdef RAPTOR_PERF_METRICS
printf("Total Time: ");
mTotalTime.Print();
printf("\n");
+
+ printf("Parse Time: ");
+ mParseTime.Print();
+ printf("\n");
+
#endif
return mInternalState;
}
@@ -939,6 +958,8 @@ nsresult nsParser::ResumeParse(nsIDTD* aDefaultDTD, PRBool aIsFinalChunk) {
}
}//if
+ NS_STOP_STOPWATCH(mParseTime);
+
return result;
}
@@ -1288,7 +1309,7 @@ nsresult nsParser::OnDataAvailable(nsIURI* aURL, nsIInputStream *pIStream, PRUin
printf("xmlencoding detect- %s\n", guess.ToNewCString());
#endif
this->SetDocumentCharset(guess, guessSource);
- mParserContext->mScanner->SetDocumentCharset(guess, guessSource);
+ mParserContext->mScanner->SetDocumentCharset(guess, guessSource);
}
}
theTotalRead+=theNumRead;
diff --git a/mozilla/parser/htmlparser/src/nsParser.h b/mozilla/parser/htmlparser/src/nsParser.h
index 345f46056f8..1872515d1b7 100644
--- a/mozilla/parser/htmlparser/src/nsParser.h
+++ b/mozilla/parser/htmlparser/src/nsParser.h
@@ -381,9 +381,13 @@ protected:
nsCharsetSource mCharsetSource;
nsresult mInternalState;
CObserverService mObserverService;
+
#ifdef RAPTOR_PERF_METRICS
+public:
Stopwatch mTotalTime;
+ Stopwatch mParseTime;
#endif
+
};