int nsMemoryCacheDevice::EvictionList(nsCacheEntry * entry, PRInt32 deltaSize) { // favor items which never expire by putting them in the lowest-index queue if (entry->ExpirationTime() == nsICache::NO_EXPIRATION_TIME) return 0; // compute which eviction queue this entry should go into, // based on floor(log2(size/nref)) PRInt32 size = deltaSize + (PRInt32)entry->DataSize(); PRInt32 fetchCount = NS_MAX(1, entry->FetchCount()); return NS_MIN(PR_FloorLog2(size / fetchCount), kQueueCount - 1); }
NS_IMETHODIMP nsStorageStream::Init(PRUint32 segmentSize, PRUint32 maxSize, nsIMemory *segmentAllocator) { mSegmentedBuffer = new nsSegmentedBuffer(); if (!mSegmentedBuffer) return NS_ERROR_OUT_OF_MEMORY; mSegmentSize = segmentSize; mSegmentSizeLog2 = PR_FloorLog2(segmentSize); // Segment size must be a power of two if (mSegmentSize != ((PRUint32)1 << mSegmentSizeLog2)) return NS_ERROR_INVALID_ARG; return mSegmentedBuffer->Init(segmentSize, maxSize, segmentAllocator); }
int main(int argc, char **argv) { /* ** Test bitmap things. */ if ( PR_TEST_BIT( myMap, 0 )) ErrorReport("Test 0.0: Failed\n"); if ( PR_TEST_BIT( myMap, 31 )) ErrorReport("Test 0.1: Failed\n"); if ( PR_TEST_BIT( myMap, 128 )) ErrorReport("Test 0.2: Failed\n"); if ( PR_TEST_BIT( myMap, 129 )) ErrorReport("Test 0.3: Failed\n"); PR_SET_BIT( myMap, 0 ); if ( !PR_TEST_BIT( myMap, 0 )) ErrorReport("Test 1.0: Failed\n"); PR_CLEAR_BIT( myMap, 0 ); if ( PR_TEST_BIT( myMap, 0 )) ErrorReport("Test 1.0.1: Failed\n"); PR_SET_BIT( myMap, 31 ); if ( !PR_TEST_BIT( myMap, 31 )) ErrorReport("Test 1.1: Failed\n"); PR_CLEAR_BIT( myMap, 31 ); if ( PR_TEST_BIT( myMap, 31 )) ErrorReport("Test 1.1.1: Failed\n"); PR_SET_BIT( myMap, 128 ); if ( !PR_TEST_BIT( myMap, 128 )) ErrorReport("Test 1.2: Failed\n"); PR_CLEAR_BIT( myMap, 128 ); if ( PR_TEST_BIT( myMap, 128 )) ErrorReport("Test 1.2.1: Failed\n"); PR_SET_BIT( myMap, 129 ); if ( !PR_TEST_BIT( myMap, 129 )) ErrorReport("Test 1.3: Failed\n"); PR_CLEAR_BIT( myMap, 129 ); if ( PR_TEST_BIT( myMap, 129 )) ErrorReport("Test 1.3.1: Failed\n"); /* ** Test Ceiling and Floor functions and macros */ if ((rc = PR_CeilingLog2(32)) != 5 ) ErrorReport("Test 10.0: Failed\n"); if ((rc = PR_FloorLog2(32)) != 5 ) ErrorReport("Test 10.1: Failed\n"); /* ** Evaluate results and exit */ if (failed) { printf("FAILED\n"); return(1); } else { printf("PASSED\n"); return(0); } } /* end main() */