Commit e7268dee authored by tkent@chromium.org's avatar tkent@chromium.org

Oilpan: Prepare to move DatabaseThread and SQLTransactionCoordinator to Oilpan heap.

BUG=347902

Review URL: https://codereview.chromium.org/201083003

git-svn-id: svn://svn.chromium.org/blink/trunk@169594 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 1561af56
...@@ -75,7 +75,7 @@ private: ...@@ -75,7 +75,7 @@ private:
void stopSyncDatabases(); void stopSyncDatabases();
RefPtr<DatabaseThread> m_databaseThread; RefPtrWillBePersistent<DatabaseThread> m_databaseThread;
// The contents of m_openSyncDatabases are raw pointers. It's safe because // The contents of m_openSyncDatabases are raw pointers. It's safe because
// DatabaseBackendSync is always closed before destruction. // DatabaseBackendSync is always closed before destruction.
HashSet<DatabaseBackendBase*> m_openSyncDatabases; HashSet<DatabaseBackendBase*> m_openSyncDatabases;
......
...@@ -42,7 +42,7 @@ namespace WebCore { ...@@ -42,7 +42,7 @@ namespace WebCore {
DatabaseThread::DatabaseThread() DatabaseThread::DatabaseThread()
: m_transactionClient(adoptPtr(new SQLTransactionClient())) : m_transactionClient(adoptPtr(new SQLTransactionClient()))
, m_transactionCoordinator(adoptPtr(new SQLTransactionCoordinator())) , m_transactionCoordinator(adoptPtrWillBeNoop(new SQLTransactionCoordinator()))
, m_cleanupSync(0) , m_cleanupSync(0)
, m_terminationRequested(false) , m_terminationRequested(false)
{ {
...@@ -60,6 +60,12 @@ DatabaseThread::~DatabaseThread() ...@@ -60,6 +60,12 @@ DatabaseThread::~DatabaseThread()
m_thread.clear(); m_thread.clear();
} }
void DatabaseThread::trace(Visitor* visitor)
{
visitor->trace(m_openDatabaseSet);
visitor->trace(m_transactionCoordinator);
}
void DatabaseThread::start() void DatabaseThread::start()
{ {
if (m_thread) if (m_thread)
......
...@@ -51,10 +51,11 @@ class PendingGCRunner; ...@@ -51,10 +51,11 @@ class PendingGCRunner;
class SQLTransactionClient; class SQLTransactionClient;
class SQLTransactionCoordinator; class SQLTransactionCoordinator;
class DatabaseThread : public ThreadSafeRefCounted<DatabaseThread> { class DatabaseThread : public ThreadSafeRefCountedWillBeGarbageCollectedFinalized<DatabaseThread> {
public: public:
static PassRefPtr<DatabaseThread> create() { return adoptRef(new DatabaseThread); } static PassRefPtrWillBeRawPtr<DatabaseThread> create() { return adoptRefWillBeNoop(new DatabaseThread); }
~DatabaseThread(); ~DatabaseThread();
void trace(Visitor*);
void start(); void start();
void requestTermination(DatabaseTaskSynchronizer* cleanupSync); void requestTermination(DatabaseTaskSynchronizer* cleanupSync);
...@@ -83,10 +84,10 @@ private: ...@@ -83,10 +84,10 @@ private:
// This set keeps track of the open databases that have been used on this thread. // This set keeps track of the open databases that have been used on this thread.
// This must be updated in the database thread though it is constructed and // This must be updated in the database thread though it is constructed and
// destructed in the context thread. // destructed in the context thread.
WillBePersistentHeapHashSet<RefPtrWillBeMember<DatabaseBackend> > m_openDatabaseSet; WillBeHeapHashSet<RefPtrWillBeMember<DatabaseBackend> > m_openDatabaseSet;
OwnPtr<SQLTransactionClient> m_transactionClient; OwnPtr<SQLTransactionClient> m_transactionClient;
OwnPtr<SQLTransactionCoordinator> m_transactionCoordinator; OwnPtrWillBeMember<SQLTransactionCoordinator> m_transactionCoordinator;
DatabaseTaskSynchronizer* m_cleanupSync; DatabaseTaskSynchronizer* m_cleanupSync;
mutable Mutex m_terminationRequestedMutex; mutable Mutex m_terminationRequestedMutex;
......
...@@ -49,6 +49,11 @@ SQLTransactionCoordinator::SQLTransactionCoordinator() ...@@ -49,6 +49,11 @@ SQLTransactionCoordinator::SQLTransactionCoordinator()
{ {
} }
void SQLTransactionCoordinator::trace(Visitor* visitor)
{
visitor->trace(m_coordinationInfoMap);
}
void SQLTransactionCoordinator::processPendingTransactions(CoordinationInfo& info) void SQLTransactionCoordinator::processPendingTransactions(CoordinationInfo& info)
{ {
if (info.activeWriteTransaction || info.pendingTransactions.isEmpty()) if (info.activeWriteTransaction || info.pendingTransactions.isEmpty())
......
...@@ -43,10 +43,12 @@ namespace WebCore { ...@@ -43,10 +43,12 @@ namespace WebCore {
class SQLTransactionBackend; class SQLTransactionBackend;
class SQLTransactionCoordinator { class SQLTransactionCoordinator : public NoBaseWillBeGarbageCollected<SQLTransactionCoordinator> {
WTF_MAKE_NONCOPYABLE(SQLTransactionCoordinator); WTF_MAKE_FAST_ALLOCATED; WTF_MAKE_NONCOPYABLE(SQLTransactionCoordinator);
WTF_MAKE_FAST_ALLOCATED_WILL_BE_REMOVED;
public: public:
SQLTransactionCoordinator(); SQLTransactionCoordinator();
void trace(Visitor*);
void acquireLock(SQLTransactionBackend*); void acquireLock(SQLTransactionBackend*);
void releaseLock(SQLTransactionBackend*); void releaseLock(SQLTransactionBackend*);
void shutdown(); void shutdown();
...@@ -66,7 +68,7 @@ private: ...@@ -66,7 +68,7 @@ private:
ALLOW_ONLY_INLINE_ALLOCATION(); ALLOW_ONLY_INLINE_ALLOCATION();
}; };
// Maps database names to information about pending transactions // Maps database names to information about pending transactions
typedef WillBePersistentHeapHashMap<String, CoordinationInfo> CoordinationInfoHeapMap; typedef WillBeHeapHashMap<String, CoordinationInfo> CoordinationInfoHeapMap;
CoordinationInfoHeapMap m_coordinationInfoMap; CoordinationInfoHeapMap m_coordinationInfoMap;
bool m_isShuttingDown; bool m_isShuttingDown;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment