/** * This gets called when the parser module is getting unloaded * * @return nada */ void nsDTDContext::ReleaseGlobalObjects(void){ } /************************************************************** Now define the nsTokenAllocator class... **************************************************************/ static const size_t kTokenBuckets[] ={sizeof(CStartToken),sizeof(CAttributeToken),sizeof(CCommentToken),sizeof(CEndToken)}; static const PRInt32 kNumTokenBuckets = sizeof(kTokenBuckets) / sizeof(size_t); static const PRInt32 kInitialTokenPoolSize = NS_SIZE_IN_HEAP(sizeof(CToken)) * 200; /** * * @update gess7/25/98 * @param */ nsTokenAllocator::nsTokenAllocator() { MOZ_COUNT_CTOR(nsTokenAllocator); mArenaPool.Init("TokenPool", kTokenBuckets, kNumTokenBuckets, kInitialTokenPoolSize); #ifdef NS_DEBUG int i=0; for(i=0;i<eToken_last-1;++i) {
nsNodeAllocator::nsNodeAllocator():mSharedNodes(0){ #ifdef DEBUG_TRACK_NODES mCount=0; #endif #else static const size_t kNodeBuckets[] = { sizeof(nsCParserNode), sizeof(nsCParserStartNode) }; static const PRInt32 kNumNodeBuckets = sizeof(kNodeBuckets) / sizeof(size_t); static const PRInt32 kInitialNodePoolSize = NS_SIZE_IN_HEAP(sizeof(nsCParserNode)) * 35; // optimal size based on space-trace data nsNodeAllocator::nsNodeAllocator() { mNodePool.Init("NodePool", kNodeBuckets, kNumNodeBuckets, kInitialNodePoolSize); #endif MOZ_COUNT_CTOR(nsNodeAllocator); } nsNodeAllocator::~nsNodeAllocator() { MOZ_COUNT_DTOR(nsNodeAllocator); #ifdef HEAP_ALLOCATED_NODES nsCParserNode* theNode = 0; while((theNode=(nsCParserNode*)mSharedNodes.Pop())){ #ifdef DEBUG_TRACK_NODES RemoveNode(theNode); #endif ::operator delete(theNode); theNode=nsnull; } #ifdef DEBUG_TRACK_NODES if(mCount) { printf("**************************\n"); printf("%i out of %i nodes leaked!\n",gAllNodeCount,mCount); printf("**************************\n"); } #endif #endif } nsCParserNode* nsNodeAllocator::CreateNode(CToken* aToken, nsTokenAllocator* aTokenAllocator) { nsCParserNode* result = 0; #ifdef HEAP_ALLOCATED_NODES #if 0 if(gAllNodeCount!=mSharedNodes.GetSize()) { int x=10; //this is very BAD! } #endif result = static_cast<nsCParserNode*>(mSharedNodes.Pop()); if (result) { result->Init(aToken, aTokenAllocator,this); } else{ result = nsCParserNode::Create(aToken, aTokenAllocator,this); #ifdef DEBUG_TRACK_NODES ++mCount; AddNode(static_cast<nsCParserNode*>(result)); #endif IF_HOLD(result); } #else eHTMLTokenTypes type = aToken ? eHTMLTokenTypes(aToken->GetTokenType()) : eToken_unknown; switch (type) { case eToken_start: result = nsCParserStartNode::Create(aToken, aTokenAllocator,this); break; default : result = nsCParserNode::Create(aToken, aTokenAllocator,this); break; } IF_HOLD(result); #endif return result; }
#include "nsString.h" #include "nsIAtom.h" #include "nsDOMString.h" #include "nsCRT.h" #include "nsContentUtils.h" #include "nsReadableUtils.h" #include "nsAutoPtr.h" #include NEW_H #include "nsFixedSizeAllocator.h" static const size_t kNodeInfoPoolSizes[] = { sizeof(nsNodeInfo) }; static const PRInt32 kNodeInfoPoolInitialSize = (NS_SIZE_IN_HEAP(sizeof(nsNodeInfo))) * 64; // static nsFixedSizeAllocator* nsNodeInfo::sNodeInfoPool = nsnull; // static nsNodeInfo* nsNodeInfo::Create() { if (!sNodeInfoPool) { sNodeInfoPool = new nsFixedSizeAllocator(); if (!sNodeInfoPool) return nsnull; nsresult rv = sNodeInfoPool->Init("NodeInfo Pool", kNodeInfoPoolSizes, 1, kNodeInfoPoolInitialSize);