diff --git a/mozilla/modules/libjar/nsJAR.cpp b/mozilla/modules/libjar/nsJAR.cpp index 6514d1a45dd..a0bdc2fed09 100644 --- a/mozilla/modules/libjar/nsJAR.cpp +++ b/mozilla/modules/libjar/nsJAR.cpp @@ -1096,6 +1096,11 @@ NS_IMPL_THREADSAFE_ISUPPORTS1(nsZipReaderCache, nsIZipReaderCache) nsZipReaderCache::nsZipReaderCache() : mLock(nsnull), mZips(16), +#ifdef ZIP_CACHE_HIT_RATE + mZipCacheLookups(0), + mZipCacheHits(0), + mZipCacheFlushes(0), +#endif mFreeCount(0) { NS_INIT_REFCNT(); @@ -1126,6 +1131,12 @@ nsZipReaderCache::~nsZipReaderCache() if (mLock) PR_DestroyLock(mLock); mZips.Enumerate(DropZipReaderCache, nsnull); + +#ifdef ZIP_CACHE_HIT_RATE + printf("nsZipReaderCache size=%d hits=%d lookups=%d rate=%f%% flushes=%d\n", + mZipCacheHits, mZipCacheLookups, (float)mZipCacheHits / mZipCacheLookups, + mZipCacheFlushes); +#endif } NS_METHOD @@ -1149,6 +1160,10 @@ nsZipReaderCache::GetZip(nsIFile* zipFile, nsIZipReader* *result) nsresult rv; nsAutoLock lock(mLock); +#ifdef ZIP_CACHE_HIT_RATE + mZipCacheLookups++; +#endif + nsXPIDLCString path; rv = zipFile->GetPath(getter_Copies(path)); if (NS_FAILED(rv)) return rv; @@ -1156,6 +1171,9 @@ nsZipReaderCache::GetZip(nsIFile* zipFile, nsIZipReader* *result) nsCStringKey key(path); nsJAR* zip = (nsJAR*)mZips.Get(&key); // AddRefs if (zip) { +#ifdef ZIP_CACHE_HIT_RATE + mZipCacheHits++; +#endif if (zip->GetReleaseTime() != PR_INTERVAL_NO_TIMEOUT) { // this was an otherwise-free entry, so decrement our free counter NS_ASSERTION(mFreeCount > 0, "mFreeCount screwed up"); @@ -1223,6 +1241,10 @@ nsZipReaderCache::ReleaseZip(nsJAR* zip) } NS_ASSERTION(oldest, "wacked"); +#ifdef ZIP_CACHE_HIT_RATE + mZipCacheFlushes++; +#endif + // remove from hashtable nsCOMPtr zipFile; rv = oldest->GetFile(getter_AddRefs(zipFile)); diff --git a/mozilla/modules/libjar/nsJAR.h b/mozilla/modules/libjar/nsJAR.h index 834c9aab85c..9f4fb74d51b 100644 --- a/mozilla/modules/libjar/nsJAR.h +++ b/mozilla/modules/libjar/nsJAR.h @@ -171,7 +171,9 @@ protected: //////////////////////////////////////////////////////////////////////////////// -class nsZipCacheEntry; +#ifdef DEBUG_warren +#define ZIP_CACHE_HIT_RATE +#endif class nsZipReaderCache : public nsIZipReaderCache { @@ -192,6 +194,13 @@ protected: PRInt32 mCacheSize; nsSupportsHashtable mZips; PRUint32 mFreeCount; + +#ifdef ZIP_CACHE_HIT_RATE + PRUint32 mZipCacheLookups; + PRUint32 mZipCacheHits; + PRUint32 mZipCacheFlushes; +#endif + }; ////////////////////////////////////////////////////////////////////////////////