Commit 8c11fd5b authored by rickg%netscape.com's avatar rickg%netscape.com
Browse files

added DEBUG timing code to parsing engine

parent 4ffdfcbc
Loading
Loading
Loading
Loading
+152 −17
Original line number Diff line number Diff line
@@ -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);
    }
    result = aSink->WillBuildModel();

    START_TIMER();

#ifdef RGESS_DEBUG
    gStartTime = PR_Now();
    printf("Begin parsing...\n");
#endif

    result = aSink->WillBuildModel();
    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(0<theText.Length()) {
          CViewSourceHTML::WriteText(theText,*mSink,PR_TRUE,PR_FALSE);
        }

        START_TIMER();

      }
      break;
    default:
@@ -1285,8 +1297,14 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) {
      switch(theChildTag) { 

        case eHTMLTag_area:

          STOP_TIMER();
          
          if (mHasOpenMap && mSink)
            result=mSink->AddLeaf(*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;
}

+25 −4
Original line number Diff line number Diff line
@@ -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;
}

+4 −0
Original line number Diff line number Diff line
@@ -381,9 +381,13 @@ protected:
    nsCharsetSource     mCharsetSource;
    nsresult            mInternalState;
    CObserverService    mObserverService;

#ifdef RAPTOR_PERF_METRICS
public:
    Stopwatch           mTotalTime;
    Stopwatch           mParseTime;
#endif

};


+152 −17
Original line number Diff line number Diff line
@@ -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);
    }
    result = aSink->WillBuildModel();

    START_TIMER();

#ifdef RGESS_DEBUG
    gStartTime = PR_Now();
    printf("Begin parsing...\n");
#endif

    result = aSink->WillBuildModel();
    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(0<theText.Length()) {
          CViewSourceHTML::WriteText(theText,*mSink,PR_TRUE,PR_FALSE);
        }

        START_TIMER();

      }
      break;
    default:
@@ -1285,8 +1297,14 @@ nsresult CNavDTD::HandleStartToken(CToken* aToken) {
      switch(theChildTag) { 

        case eHTMLTag_area:

          STOP_TIMER();
          
          if (mHasOpenMap && mSink)
            result=mSink->AddLeaf(*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;
}

+25 −4
Original line number Diff line number Diff line
@@ -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;
}

Loading