SQLiteDatabaseTracker.cpp [plain text]
#include "config.h"
#include "SQLiteDatabaseTracker.h"
#include <mutex>
#include <wtf/Lock.h>
namespace WebCore {
namespace SQLiteDatabaseTracker {
static SQLiteDatabaseTrackerClient* s_staticSQLiteDatabaseTrackerClient = nullptr;
static unsigned s_transactionInProgressCounter = 0;
static StaticLock transactionInProgressMutex;
void setClient(SQLiteDatabaseTrackerClient* client)
{
ASSERT(client);
ASSERT(!s_staticSQLiteDatabaseTrackerClient || s_staticSQLiteDatabaseTrackerClient == client);
s_staticSQLiteDatabaseTrackerClient = client;
}
void incrementTransactionInProgressCount()
{
if (!s_staticSQLiteDatabaseTrackerClient)
return;
std::lock_guard<StaticLock> lock(transactionInProgressMutex);
s_transactionInProgressCounter++;
if (s_transactionInProgressCounter == 1)
s_staticSQLiteDatabaseTrackerClient->willBeginFirstTransaction();
}
void decrementTransactionInProgressCount()
{
if (!s_staticSQLiteDatabaseTrackerClient)
return;
std::lock_guard<StaticLock> lock(transactionInProgressMutex);
ASSERT(s_transactionInProgressCounter);
s_transactionInProgressCounter--;
if (!s_transactionInProgressCounter)
s_staticSQLiteDatabaseTrackerClient->didFinishLastTransaction();
}
#if !ASSERT_DISABLED
bool hasTransactionInProgress()
{
return !s_staticSQLiteDatabaseTrackerClient || s_transactionInProgressCounter > 0;
}
#endif
}
}