mirror of
https://github.com/classilla/tenfourfox.git
synced 2025-02-22 02:29:14 +00:00
#399: tune up HTTP cache M1248003 M1248389
This commit is contained in:
parent
9d1d17ec99
commit
2bc560a930
@ -69,6 +69,7 @@ public:
|
|||||||
CacheIndexEntryAutoManage(const SHA1Sum::Hash *aHash, CacheIndex *aIndex)
|
CacheIndexEntryAutoManage(const SHA1Sum::Hash *aHash, CacheIndex *aIndex)
|
||||||
: mIndex(aIndex)
|
: mIndex(aIndex)
|
||||||
, mOldRecord(nullptr)
|
, mOldRecord(nullptr)
|
||||||
|
, mOldFrecency(0)
|
||||||
, mDoNotSearchInIndex(false)
|
, mDoNotSearchInIndex(false)
|
||||||
, mDoNotSearchInUpdates(false)
|
, mDoNotSearchInUpdates(false)
|
||||||
{
|
{
|
||||||
@ -79,6 +80,7 @@ public:
|
|||||||
mIndex->mIndexStats.BeforeChange(entry);
|
mIndex->mIndexStats.BeforeChange(entry);
|
||||||
if (entry && entry->IsInitialized() && !entry->IsRemoved()) {
|
if (entry && entry->IsInitialized() && !entry->IsRemoved()) {
|
||||||
mOldRecord = entry->mRec;
|
mOldRecord = entry->mRec;
|
||||||
|
mOldFrecency = entry->mRec->mFrecency;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,6 +106,8 @@ public:
|
|||||||
mIndex->ReplaceRecordInIterators(mOldRecord, entry->mRec);
|
mIndex->ReplaceRecordInIterators(mOldRecord, entry->mRec);
|
||||||
mIndex->RemoveRecordFromFrecencyArray(mOldRecord);
|
mIndex->RemoveRecordFromFrecencyArray(mOldRecord);
|
||||||
mIndex->InsertRecordToFrecencyArray(entry->mRec);
|
mIndex->InsertRecordToFrecencyArray(entry->mRec);
|
||||||
|
} else if (entry->mRec->mFrecency != mOldFrecency) {
|
||||||
|
mIndex->mFrecencyArraySorted = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// both entries were removed or not initialized, do nothing
|
// both entries were removed or not initialized, do nothing
|
||||||
@ -147,6 +151,7 @@ private:
|
|||||||
const SHA1Sum::Hash *mHash;
|
const SHA1Sum::Hash *mHash;
|
||||||
RefPtr<CacheIndex> mIndex;
|
RefPtr<CacheIndex> mIndex;
|
||||||
CacheIndexRecord *mOldRecord;
|
CacheIndexRecord *mOldRecord;
|
||||||
|
uint32_t mOldFrecency;
|
||||||
bool mDoNotSearchInIndex;
|
bool mDoNotSearchInIndex;
|
||||||
bool mDoNotSearchInUpdates;
|
bool mDoNotSearchInUpdates;
|
||||||
};
|
};
|
||||||
@ -246,6 +251,7 @@ CacheIndex::CacheIndex()
|
|||||||
, mRWBufSize(0)
|
, mRWBufSize(0)
|
||||||
, mRWBufPos(0)
|
, mRWBufPos(0)
|
||||||
, mJournalReadSuccessfully(false)
|
, mJournalReadSuccessfully(false)
|
||||||
|
, mFrecencyArraySorted(false)
|
||||||
{
|
{
|
||||||
sLock.AssertCurrentThreadOwns();
|
sLock.AssertCurrentThreadOwns();
|
||||||
LOG(("CacheIndex::CacheIndex [this=%p]", this));
|
LOG(("CacheIndex::CacheIndex [this=%p]", this));
|
||||||
@ -1187,7 +1193,11 @@ CacheIndex::GetEntryForEviction(bool aIgnoreEmptyEntries, SHA1Sum::Hash *aHash,
|
|||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
|
||||||
// find first non-forced valid and unpinned entry with the lowest frecency
|
// find first non-forced valid and unpinned entry with the lowest frecency
|
||||||
index->mFrecencyArray.Sort(FrecencyComparator());
|
if (!index->mFrecencyArraySorted) {
|
||||||
|
index->mFrecencyArray.Sort(FrecencyComparator());
|
||||||
|
index->mFrecencyArraySorted = true;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < index->mFrecencyArray.Length(); ++i) {
|
for (i = 0; i < index->mFrecencyArray.Length(); ++i) {
|
||||||
memcpy(&hash, &index->mFrecencyArray[i]->mHash, sizeof(SHA1Sum::Hash));
|
memcpy(&hash, &index->mFrecencyArray[i]->mHash, sizeof(SHA1Sum::Hash));
|
||||||
|
|
||||||
@ -1385,7 +1395,11 @@ CacheIndex::GetIterator(nsILoadContextInfo *aInfo, bool aAddNew,
|
|||||||
iter = new CacheIndexIterator(index, aAddNew);
|
iter = new CacheIndexIterator(index, aAddNew);
|
||||||
}
|
}
|
||||||
|
|
||||||
index->mFrecencyArray.Sort(FrecencyComparator());
|
if (!index->mFrecencyArraySorted) {
|
||||||
|
index->mFrecencyArray.Sort(FrecencyComparator());
|
||||||
|
index->mFrecencyArraySorted = true;
|
||||||
|
}
|
||||||
|
|
||||||
iter->AddRecords(index->mFrecencyArray);
|
iter->AddRecords(index->mFrecencyArray);
|
||||||
|
|
||||||
index->mIterators.AppendElement(iter);
|
index->mIterators.AppendElement(iter);
|
||||||
@ -3161,6 +3175,7 @@ CacheIndex::InsertRecordToFrecencyArray(CacheIndexRecord *aRecord)
|
|||||||
|
|
||||||
MOZ_ASSERT(!mFrecencyArray.Contains(aRecord));
|
MOZ_ASSERT(!mFrecencyArray.Contains(aRecord));
|
||||||
mFrecencyArray.AppendElement(aRecord);
|
mFrecencyArray.AppendElement(aRecord);
|
||||||
|
mFrecencyArraySorted = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -1020,6 +1020,7 @@ private:
|
|||||||
// and such entries are stored at the end of the array. Uninitialized entries
|
// and such entries are stored at the end of the array. Uninitialized entries
|
||||||
// and entries marked as deleted are not present in this array.
|
// and entries marked as deleted are not present in this array.
|
||||||
nsTArray<CacheIndexRecord *> mFrecencyArray;
|
nsTArray<CacheIndexRecord *> mFrecencyArray;
|
||||||
|
bool mFrecencyArraySorted;
|
||||||
|
|
||||||
nsTArray<CacheIndexIterator *> mIterators;
|
nsTArray<CacheIndexIterator *> mIterators;
|
||||||
|
|
||||||
|
@ -1239,6 +1239,16 @@ CacheStorageService::PurgeOverMemoryLimit()
|
|||||||
|
|
||||||
LOG(("CacheStorageService::PurgeOverMemoryLimit"));
|
LOG(("CacheStorageService::PurgeOverMemoryLimit"));
|
||||||
|
|
||||||
|
static TimeDuration const kFourSeconds = TimeDuration::FromSeconds(4);
|
||||||
|
TimeStamp now = TimeStamp::NowLoRes();
|
||||||
|
|
||||||
|
if (!mLastPurgeTime.IsNull() && now - mLastPurgeTime < kFourSeconds) {
|
||||||
|
LOG((" bypassed, too soon"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
mLastPurgeTime = now;
|
||||||
|
|
||||||
Pool(true).PurgeOverMemoryLimit();
|
Pool(true).PurgeOverMemoryLimit();
|
||||||
Pool(false).PurgeOverMemoryLimit();
|
Pool(false).PurgeOverMemoryLimit();
|
||||||
}
|
}
|
||||||
|
@ -311,7 +311,7 @@ private:
|
|||||||
|
|
||||||
nsTArray<RefPtr<CacheEntry> > mFrecencyArray;
|
nsTArray<RefPtr<CacheEntry> > mFrecencyArray;
|
||||||
nsTArray<RefPtr<CacheEntry> > mExpirationArray;
|
nsTArray<RefPtr<CacheEntry> > mExpirationArray;
|
||||||
mozilla::Atomic<uint32_t> mMemorySize;
|
Atomic<uint32_t, Relaxed> mMemorySize;
|
||||||
|
|
||||||
bool OnMemoryConsumptionChange(uint32_t aSavedMemorySize,
|
bool OnMemoryConsumptionChange(uint32_t aSavedMemorySize,
|
||||||
uint32_t aCurrentMemoryConsumption);
|
uint32_t aCurrentMemoryConsumption);
|
||||||
@ -330,6 +330,7 @@ private:
|
|||||||
|
|
||||||
MemoryPool mDiskPool;
|
MemoryPool mDiskPool;
|
||||||
MemoryPool mMemoryPool;
|
MemoryPool mMemoryPool;
|
||||||
|
TimeStamp mLastPurgeTime;
|
||||||
MemoryPool& Pool(bool aUsingDisk)
|
MemoryPool& Pool(bool aUsingDisk)
|
||||||
{
|
{
|
||||||
return aUsingDisk ? mDiskPool : mMemoryPool;
|
return aUsingDisk ? mDiskPool : mMemoryPool;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user