mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-03-02 22:37:50 +00:00
Bug 616090 - Optimize timer in nsDOMStorageDBWrapper. r=honzab a=blocking-fennec
This commit is contained in:
parent
15de57bf72
commit
e62810702b
@ -441,6 +441,8 @@ nsDOMStorageManager::Observe(nsISupports *aSubject,
|
||||
nsCOMPtr<nsIObserverService> obsserv = mozilla::services::GetObserverService();
|
||||
if (obsserv)
|
||||
obsserv->NotifyObservers(nsnull, NS_DOMSTORAGE_FLUSH_TIMER_OBSERVER, nsnull);
|
||||
if (!UnflushedDataExists())
|
||||
DOMStorageImpl::gStorageDB->StopTempTableFlushTimer();
|
||||
} else if (!strcmp(aTopic, "browser:purge-domain-data")) {
|
||||
// Convert the domain name to the ACE format
|
||||
nsCAutoString aceDomain;
|
||||
@ -537,6 +539,26 @@ nsDOMStorageManager::RemoveFromStoragesHash(DOMStorageImpl* aStorage)
|
||||
mStorages.RemoveEntry(aStorage);
|
||||
}
|
||||
|
||||
static PLDHashOperator
|
||||
CheckUnflushedData(nsDOMStorageEntry* aEntry, void* userArg)
|
||||
{
|
||||
if (aEntry->mStorage->WasTemporaryTableLoaded()) {
|
||||
PRBool *unflushedData = (PRBool*)userArg;
|
||||
*unflushedData = PR_TRUE;
|
||||
return PL_DHASH_STOP;
|
||||
}
|
||||
|
||||
return PL_DHASH_NEXT;
|
||||
}
|
||||
|
||||
PRBool
|
||||
nsDOMStorageManager::UnflushedDataExists()
|
||||
{
|
||||
PRBool unflushedData = PR_FALSE;
|
||||
mStorages.EnumerateEntries(CheckUnflushedData, &unflushedData);
|
||||
return unflushedData;
|
||||
}
|
||||
|
||||
//
|
||||
// nsDOMStorage
|
||||
//
|
||||
@ -1055,6 +1077,8 @@ DOMStorageImpl::SetTemporaryTableLoaded(bool loaded)
|
||||
mLastTemporaryTableAccessTime = TimeStamp::Now();
|
||||
if (!mLoadedTemporaryTable)
|
||||
mTemporaryTableAge = mLastTemporaryTableAccessTime;
|
||||
|
||||
gStorageDB->EnsureTempTableFlushTimer();
|
||||
}
|
||||
|
||||
mLoadedTemporaryTable = loaded;
|
||||
|
@ -136,6 +136,11 @@ public:
|
||||
static nsDOMStorageManager* GetInstance();
|
||||
static void Shutdown();
|
||||
|
||||
/**
|
||||
* Checks whether there is any data waiting to be flushed from a temp table.
|
||||
*/
|
||||
PRBool UnflushedDataExists();
|
||||
|
||||
static nsDOMStorageManager* gStorageManager;
|
||||
|
||||
protected:
|
||||
|
@ -75,9 +75,7 @@ nsDOMStorageDBWrapper::nsDOMStorageDBWrapper()
|
||||
|
||||
nsDOMStorageDBWrapper::~nsDOMStorageDBWrapper()
|
||||
{
|
||||
if (mFlushTimer) {
|
||||
mFlushTimer->Cancel();
|
||||
}
|
||||
StopTempTableFlushTimer();
|
||||
}
|
||||
|
||||
nsresult
|
||||
@ -97,13 +95,6 @@ nsDOMStorageDBWrapper::Init()
|
||||
rv = mPrivateBrowsingDB.Init();
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
mFlushTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
rv = mFlushTimer->Init(nsDOMStorageManager::gStorageManager, 5000,
|
||||
nsITimer::TYPE_REPEATING_SLACK);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
@ -452,3 +443,30 @@ nsDOMStorageDBWrapper::GetDomainFromScopeKey(const nsACString& aScope,
|
||||
ReverseString(reverseDomain, aDomain);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMStorageDBWrapper::EnsureTempTableFlushTimer()
|
||||
{
|
||||
if (!mTempTableFlushTimer) {
|
||||
nsresult rv;
|
||||
mTempTableFlushTimer = do_CreateInstance(NS_TIMER_CONTRACTID, &rv);
|
||||
|
||||
if (!NS_SUCCEEDED(rv)) {
|
||||
mTempTableFlushTimer = nsnull;
|
||||
return;
|
||||
}
|
||||
|
||||
mTempTableFlushTimer->Init(nsDOMStorageManager::gStorageManager, 5000,
|
||||
nsITimer::TYPE_REPEATING_SLACK);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
nsDOMStorageDBWrapper::StopTempTableFlushTimer()
|
||||
{
|
||||
if (mTempTableFlushTimer) {
|
||||
mTempTableFlushTimer->Cancel();
|
||||
mTempTableFlushTimer = nsnull;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -221,13 +221,24 @@ public:
|
||||
static nsresult GetDomainFromScopeKey(const nsACString& aScope,
|
||||
nsACString& aDomain);
|
||||
|
||||
/**
|
||||
* Ensures the temp table flush timer is running. This is called when we add
|
||||
* data that will need to be flushed.
|
||||
*/
|
||||
void EnsureTempTableFlushTimer();
|
||||
|
||||
/**
|
||||
* Stops the temp table flush timer.
|
||||
*/
|
||||
void StopTempTableFlushTimer();
|
||||
|
||||
protected:
|
||||
nsDOMStoragePersistentDB mChromePersistentDB;
|
||||
nsDOMStoragePersistentDB mPersistentDB;
|
||||
nsDOMStorageMemoryDB mSessionOnlyDB;
|
||||
nsDOMStorageMemoryDB mPrivateBrowsingDB;
|
||||
|
||||
nsCOMPtr<nsITimer> mFlushTimer;
|
||||
nsCOMPtr<nsITimer> mTempTableFlushTimer;
|
||||
};
|
||||
|
||||
#endif /* nsDOMStorageDB_h___ */
|
||||
|
Loading…
x
Reference in New Issue
Block a user