Modified: trunk/Source/WebCore/ChangeLog (194159 => 194160)
--- trunk/Source/WebCore/ChangeLog 2015-12-16 18:38:26 UTC (rev 194159)
+++ trunk/Source/WebCore/ChangeLog 2015-12-16 18:43:54 UTC (rev 194160)
@@ -1,3 +1,25 @@
+2015-12-16 Brady Eidson <[email protected]>
+
+ Modern IDB: Combine handling open requests, delete requests, and transactions into one timer.
+ https://bugs.webkit.org/show_bug.cgi?id=152344
+
+ Reviewed by Alex Christensen.
+
+ No new tests (Refactor, existing tests pass).
+
+ * Modules/indexeddb/server/UniqueIDBDatabase.cpp:
+ (WebCore::IDBServer::UniqueIDBDatabase::UniqueIDBDatabase):
+ (WebCore::IDBServer::UniqueIDBDatabase::commitTransaction):
+ (WebCore::IDBServer::UniqueIDBDatabase::connectionClosedFromClient):
+ (WebCore::IDBServer::UniqueIDBDatabase::enqueueTransaction):
+ (WebCore::IDBServer::UniqueIDBDatabase::invokeOperationAndTransactionTimer):
+ (WebCore::IDBServer::UniqueIDBDatabase::operationAndTransactionTimerFired):
+ (WebCore::IDBServer::UniqueIDBDatabase::didPerformActivateTransactionInBackingStore):
+ (WebCore::IDBServer::UniqueIDBDatabase::inProgressTransactionCompleted):
+ (WebCore::IDBServer::UniqueIDBDatabase::invokeDeleteOrRunTransactionTimer): Deleted.
+ (WebCore::IDBServer::UniqueIDBDatabase::deleteOrRunTransactionsTimerFired): Deleted.
+ * Modules/indexeddb/server/UniqueIDBDatabase.h:
+
2015-12-16 Alex Christensen <[email protected]>
Build fix after r194156.
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (194159 => 194160)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2015-12-16 18:38:26 UTC (rev 194159)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp 2015-12-16 18:43:54 UTC (rev 194160)
@@ -47,8 +47,7 @@
UniqueIDBDatabase::UniqueIDBDatabase(IDBServer& server, const IDBDatabaseIdentifier& identifier)
: m_server(server)
, m_identifier(identifier)
- , m_deleteOrRunTransactionsTimer(*this, &UniqueIDBDatabase::deleteOrRunTransactionsTimerFired)
- , m_handleOpenDatabaseOperationsTimer(*this, &UniqueIDBDatabase::handleOpenDatabaseOperations)
+ , m_operationAndTransactionTimer(*this, &UniqueIDBDatabase::operationAndTransactionTimerFired)
{
}
@@ -793,8 +792,7 @@
m_versionChangeTransaction = nullptr;
m_versionChangeDatabaseConnection = nullptr;
- if (!m_handleOpenDatabaseOperationsTimer.isActive())
- m_handleOpenDatabaseOperationsTimer.startOneShot(0);
+ invokeOperationAndTransactionTimer();
}
uint64_t callbackID = storeCallback(callback);
@@ -892,7 +890,7 @@
}
// Now that a database connection has closed, previously blocked operations might be runnable.
- invokeDeleteOrRunTransactionTimer();
+ invokeOperationAndTransactionTimer();
}
void UniqueIDBDatabase::enqueueTransaction(Ref<UniqueIDBDatabaseTransaction>&& transaction)
@@ -903,19 +901,21 @@
m_pendingTransactions.append(WTF::move(transaction));
- invokeDeleteOrRunTransactionTimer();
+ invokeOperationAndTransactionTimer();
}
-void UniqueIDBDatabase::invokeDeleteOrRunTransactionTimer()
+void UniqueIDBDatabase::invokeOperationAndTransactionTimer()
{
- if (!m_deleteOrRunTransactionsTimer.isActive())
- m_deleteOrRunTransactionsTimer.startOneShot(0);
+ if (!m_operationAndTransactionTimer.isActive())
+ m_operationAndTransactionTimer.startOneShot(0);
}
-void UniqueIDBDatabase::deleteOrRunTransactionsTimerFired()
+void UniqueIDBDatabase::operationAndTransactionTimerFired()
{
- LOG(IndexedDB, "(main) UniqueIDBDatabase::deleteOrRunTransactionsTimerFired");
+ LOG(IndexedDB, "(main) UniqueIDBDatabase::operationAndTransactionTimerFired");
+ handleOpenDatabaseOperations();
+
if (m_deletePending && maybeDeleteDatabase(nullptr))
return;
@@ -939,7 +939,7 @@
// If no transactions were deferred, it's possible we can start another transaction right now.
if (!hadDeferredTransactions)
- invokeDeleteOrRunTransactionTimer();
+ invokeOperationAndTransactionTimer();
}
}
@@ -970,7 +970,7 @@
{
LOG(IndexedDB, "(main) UniqueIDBDatabase::didPerformActivateTransactionInBackingStore");
- invokeDeleteOrRunTransactionTimer();
+ invokeOperationAndTransactionTimer();
performErrorCallback(callbackIdentifier, error);
}
@@ -1046,7 +1046,7 @@
m_closePendingDatabaseConnections.remove(&transaction->databaseConnection());
// Previously blocked operations might be runnable.
- invokeDeleteOrRunTransactionTimer();
+ invokeOperationAndTransactionTimer();
}
void UniqueIDBDatabase::performErrorCallback(uint64_t callbackIdentifier, const IDBError& error)
Modified: trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (194159 => 194160)
--- trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h 2015-12-16 18:38:26 UTC (rev 194159)
+++ trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h 2015-12-16 18:43:54 UTC (rev 194160)
@@ -164,8 +164,8 @@
bool hasAnyPendingCallbacks() const;
- void invokeDeleteOrRunTransactionTimer();
- void deleteOrRunTransactionsTimerFired();
+ void invokeOperationAndTransactionTimer();
+ void operationAndTransactionTimerFired();
RefPtr<UniqueIDBDatabaseTransaction> takeNextRunnableTransaction(bool& hadDeferredTransactions);
IDBServer& m_server;
@@ -190,8 +190,7 @@
HashMap<uint64_t, GetResultCallback> m_getResultCallbacks;
HashMap<uint64_t, CountCallback> m_countCallbacks;
- Timer m_deleteOrRunTransactionsTimer;
- Timer m_handleOpenDatabaseOperationsTimer;
+ Timer m_operationAndTransactionTimer;
Deque<RefPtr<UniqueIDBDatabaseTransaction>> m_pendingTransactions;
HashMap<IDBResourceIdentifier, RefPtr<UniqueIDBDatabaseTransaction>> m_inProgressTransactions;