Changeset 244077 in webkit
- Timestamp:
- Apr 9, 2019, 8:56:45 AM (7 years ago)
- Location:
- trunk/Source
- Files:
-
- 11 edited
-
WebCore/ChangeLog (modified) (1 diff)
-
WebCore/Modules/indexeddb/server/IDBServer.cpp (modified) (2 diffs)
-
WebCore/Modules/indexeddb/server/IDBServer.h (modified) (5 diffs)
-
WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp (modified) (6 diffs)
-
WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h (modified) (2 diffs)
-
WebKit/ChangeLog (modified) (1 diff)
-
WebKit/NetworkProcess/NetworkProcess.cpp (modified) (2 diffs)
-
WebKit/NetworkProcess/NetworkProcess.h (modified) (1 diff)
-
WebKit/UIProcess/Network/NetworkProcessProxy.cpp (modified) (2 diffs)
-
WebKit/UIProcess/Network/NetworkProcessProxy.h (modified) (2 diffs)
-
WebKit/UIProcess/Network/NetworkProcessProxy.messages.in (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r244074 r244077 1 2019-04-09 Sihui Liu <sihui_liu@apple.com> 2 3 Remove unnecessary network process assertion for IDB close 4 https://bugs.webkit.org/show_bug.cgi?id=196693 5 6 Reviewed by Geoffrey Garen. 7 8 We already took assertion at WebCore::SQLiteDatabase::close. 9 10 * Modules/indexeddb/server/IDBServer.cpp: 11 (WebCore::IDBServer::IDBServer::create): 12 (WebCore::IDBServer::IDBServer::IDBServer): 13 (WebCore::IDBServer::m_quotaManagerGetter): Deleted. 14 (WebCore::IDBServer::IDBServer::closeDatabase): Deleted. 15 (WebCore::IDBServer::IDBServer::didCloseDatabase): Deleted. 16 * Modules/indexeddb/server/IDBServer.h: 17 (WebCore::IDBServer::IDBServer::create): Deleted. 18 * Modules/indexeddb/server/UniqueIDBDatabase.cpp: 19 (WebCore::IDBServer::UniqueIDBDatabase::performCurrentDeleteOperation): 20 (WebCore::IDBServer::UniqueIDBDatabase::scheduleShutdownForClose): 21 (WebCore::IDBServer::UniqueIDBDatabase::didShutdownForClose): 22 (WebCore::IDBServer::UniqueIDBDatabase::didDeleteBackingStore): 23 (WebCore::IDBServer::UniqueIDBDatabase::immediateCloseForUserDelete): 24 (WebCore::IDBServer::UniqueIDBDatabase::notifyServerAboutClose): Deleted. 25 * Modules/indexeddb/server/UniqueIDBDatabase.h: 26 1 27 2019-04-09 Eike Rathke <erack@redhat.com> 2 28 -
trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.cpp
r243339 r244077 46 46 namespace IDBServer { 47 47 48 Ref<IDBServer> IDBServer::create(PAL::SessionID sessionID, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter , WTF::Function<void(bool)>&& isClosingDatabaseCallback)49 { 50 return adoptRef(*new IDBServer(sessionID, fileHandler, WTFMove(quotaManagerGetter) , WTFMove(isClosingDatabaseCallback)));51 } 52 53 Ref<IDBServer> IDBServer::create(PAL::SessionID sessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter , WTF::Function<void(bool)>&& isClosingDatabaseCallback)54 { 55 return adoptRef(*new IDBServer(sessionID, databaseDirectoryPath, fileHandler, WTFMove(quotaManagerGetter) , WTFMove(isClosingDatabaseCallback)));56 } 57 58 IDBServer::IDBServer(PAL::SessionID sessionID, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter , WTF::Function<void(bool)>&& isClosingDatabaseCallback)48 Ref<IDBServer> IDBServer::create(PAL::SessionID sessionID, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter) 49 { 50 return adoptRef(*new IDBServer(sessionID, fileHandler, WTFMove(quotaManagerGetter))); 51 } 52 53 Ref<IDBServer> IDBServer::create(PAL::SessionID sessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter) 54 { 55 return adoptRef(*new IDBServer(sessionID, databaseDirectoryPath, fileHandler, WTFMove(quotaManagerGetter))); 56 } 57 58 IDBServer::IDBServer(PAL::SessionID sessionID, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter) 59 59 : CrossThreadTaskHandler("IndexedDatabase Server") 60 60 , m_sessionID(sessionID) 61 61 , m_backingStoreTemporaryFileHandler(fileHandler) 62 , m_isClosingDatabaseCallback(WTFMove(isClosingDatabaseCallback))63 , m_isClosingDatabaseHysteresis([&](PAL::HysteresisState state) { m_isClosingDatabaseCallback(state == PAL::HysteresisState::Started); })64 62 , m_quotaManagerGetter(WTFMove(quotaManagerGetter)) 65 63 { 66 64 } 67 65 68 IDBServer::IDBServer(PAL::SessionID sessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter , WTF::Function<void(bool)>&& isClosingDatabaseCallback)66 IDBServer::IDBServer(PAL::SessionID sessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler& fileHandler, QuotaManagerGetter&& quotaManagerGetter) 69 67 : CrossThreadTaskHandler("IndexedDatabase Server") 70 68 , m_sessionID(sessionID) 71 69 , m_databaseDirectoryPath(databaseDirectoryPath) 72 70 , m_backingStoreTemporaryFileHandler(fileHandler) 73 , m_isClosingDatabaseCallback(WTFMove(isClosingDatabaseCallback))74 , m_isClosingDatabaseHysteresis([&](PAL::HysteresisState state) { m_isClosingDatabaseCallback(state == PAL::HysteresisState::Started); })75 71 , m_quotaManagerGetter(WTFMove(quotaManagerGetter)) 76 72 { … … 703 699 } 704 700 705 void IDBServer::closeDatabase(UniqueIDBDatabase* database)706 {707 ASSERT(isMainThread());708 if (m_databaseDirectoryPath.isEmpty())709 return;710 711 auto addResult = m_uniqueIDBDatabasesInClose.add(database);712 if (addResult.isNewEntry && m_uniqueIDBDatabasesInClose.size() == 1)713 m_isClosingDatabaseHysteresis.start();714 }715 716 void IDBServer::didCloseDatabase(UniqueIDBDatabase* database)717 {718 ASSERT(isMainThread());719 if (m_databaseDirectoryPath.isEmpty())720 return;721 722 if (m_uniqueIDBDatabasesInClose.remove(database)) {723 if (m_uniqueIDBDatabasesInClose.isEmpty())724 m_isClosingDatabaseHysteresis.stop();725 }726 }727 728 701 IDBServer::QuotaUser::QuotaUser(IDBServer& server, StorageQuotaManager* manager, ClientOrigin&& origin) 729 702 : m_server(server) -
trunk/Source/WebCore/Modules/indexeddb/server/IDBServer.h
r244027 r244077 62 62 public: 63 63 using QuotaManagerGetter = WTF::Function<StorageQuotaManager*(PAL::SessionID, const ClientOrigin&)>; 64 static Ref<IDBServer> create(PAL::SessionID, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&& , WTF::Function<void(bool)>&& isClosingDatabaseCallback = [](bool) { });65 WEBCORE_EXPORT static Ref<IDBServer> create(PAL::SessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&& , WTF::Function<void(bool)>&& isClosingDatabaseCallback = [](bool) { });64 static Ref<IDBServer> create(PAL::SessionID, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&&); 65 WEBCORE_EXPORT static Ref<IDBServer> create(PAL::SessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&&); 66 66 67 67 WEBCORE_EXPORT void registerConnection(IDBConnectionToClient&); … … 117 117 WEBCORE_EXPORT void setPerOriginQuota(uint64_t); 118 118 119 void closeDatabase(UniqueIDBDatabase*);120 void didCloseDatabase(UniqueIDBDatabase*);121 void hysteresisUpdated(PAL::HysteresisState);122 123 119 void requestSpace(const ClientOrigin&, uint64_t taskSize, CompletionHandler<void(StorageQuotaManager::Decision)>&&); 124 120 void increasePotentialSpaceUsed(const ClientOrigin&, uint64_t taskSize); … … 130 126 131 127 private: 132 IDBServer(PAL::SessionID, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&& , WTF::Function<void(bool)>&&);133 IDBServer(PAL::SessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&& , WTF::Function<void(bool)>&&);128 IDBServer(PAL::SessionID, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&&); 129 IDBServer(PAL::SessionID, const String& databaseDirectoryPath, IDBBackingStoreTemporaryFileHandler&, QuotaManagerGetter&&); 134 130 135 131 UniqueIDBDatabase& getOrCreateUniqueIDBDatabase(const IDBDatabaseIdentifier&); … … 187 183 HashMap<uint64_t, RefPtr<IDBConnectionToClient>> m_connectionMap; 188 184 HashMap<IDBDatabaseIdentifier, std::unique_ptr<UniqueIDBDatabase>> m_uniqueIDBDatabaseMap; 189 HashSet<UniqueIDBDatabase*> m_uniqueIDBDatabasesInClose;190 185 191 186 HashMap<uint64_t, UniqueIDBDatabaseConnection*> m_databaseConnections; … … 198 193 199 194 uint64_t m_perOriginQuota { defaultPerOriginQuota }; 200 201 WTF::Function<void(bool)> m_isClosingDatabaseCallback;202 PAL::HysteresisActivity m_isClosingDatabaseHysteresis;203 195 204 196 HashMap<ClientOrigin, std::unique_ptr<QuotaUser>> m_quotaUsers; -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.cpp
r243910 r244077 331 331 else { 332 332 m_deleteBackingStoreInProgress = true; 333 notifyServerAboutClose(CloseState::Start);334 333 postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::deleteBackingStore, m_identifier)); 335 334 } … … 384 383 m_owningPointerForClose = m_server->closeAndTakeUniqueIDBDatabase(*this); 385 384 386 notifyServerAboutClose(CloseState::Start);387 385 postDatabaseTask(createCrossThreadTask(*this, &UniqueIDBDatabase::shutdownForClose)); 388 386 } … … 412 410 ASSERT(m_databaseReplyQueue.isEmpty()); 413 411 m_databaseReplyQueue.kill(); 414 notifyServerAboutClose(CloseState::Done);415 412 } 416 413 … … 448 445 if (m_hardClosedForUserDelete) 449 446 return; 450 notifyServerAboutClose(CloseState::Done);451 447 452 448 invokeOperationAndTransactionTimer(); … … 2222 2218 return; 2223 2219 2224 notifyServerAboutClose(CloseState::Start);2225 2220 // Otherwise, this database is still potentially active. 2226 2221 // So we'll have it own itself and then perform a clean unconditional delete on the background thread. … … 2315 2310 } 2316 2311 2317 void UniqueIDBDatabase::notifyServerAboutClose(CloseState state)2318 {2319 ASSERT(isMainThread());2320 #if PLATFORM(IOS_FAMILY)2321 if (state == CloseState::Start)2322 m_server->closeDatabase(this);2323 else2324 m_server->didCloseDatabase(this);2325 #else2326 UNUSED_PARAM(state);2327 #endif2328 }2329 2330 2312 } // namespace IDBServer 2331 2313 } // namespace WebCore -
trunk/Source/WebCore/Modules/indexeddb/server/UniqueIDBDatabase.h
r243270 r244077 129 129 130 130 private: 131 enum class CloseState { Start, Done };132 133 131 void handleDatabaseOperations(); 134 132 void handleCurrentOperation(); … … 252 250 bool isDoneWithHardClose(); 253 251 254 void notifyServerAboutClose(CloseState);255 256 252 void requestSpace(uint64_t taskSize, const char* errorMessage, CompletionHandler<void(Optional<IDBError>&&)>&&); 257 253 void waitForRequestSpaceCompletion(CompletionHandler<void(Optional<IDBError>&&)>&&); -
trunk/Source/WebKit/ChangeLog
r244075 r244077 1 2019-04-09 Sihui Liu <sihui_liu@apple.com> 2 3 Remove unnecessary network process assertion for IDB close 4 https://bugs.webkit.org/show_bug.cgi?id=196693 5 6 Reviewed by Geoffrey Garen. 7 8 * NetworkProcess/NetworkProcess.cpp: 9 (WebKit::NetworkProcess::createIDBServer): 10 (WebKit::NetworkProcess::notifyHoldingLockedFiles): Deleted. 11 * NetworkProcess/NetworkProcess.h: 12 * UIProcess/Network/NetworkProcessProxy.cpp: 13 (WebKit::NetworkProcessProxy::didClose): 14 (WebKit::NetworkProcessProxy::setIsIDBDatabaseHoldingLockedFiles): Deleted. 15 * UIProcess/Network/NetworkProcessProxy.h: 16 * UIProcess/Network/NetworkProcessProxy.messages.in: 17 1 18 2019-04-09 Chris Dumez <cdumez@apple.com> 2 19 -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.cpp
r243911 r244077 2123 2123 return nullptr; 2124 2124 return &this->storageQuotaManager(sessionID, origin); 2125 }, [this, weakThis = makeWeakPtr(this)](bool isHoldingLockedFiles) {2126 if (!weakThis)2127 return;2128 this->notifyHoldingLockedFiles(isHoldingLockedFiles);2129 2125 }); 2130 2126 server->setPerOriginQuota(m_idbPerOriginQuota); … … 2504 2500 } 2505 2501 2506 void NetworkProcess::notifyHoldingLockedFiles(bool isIDBDatabaseHoldingLockedFiles)2507 {2508 parentProcessConnection()->send(Messages::NetworkProcessProxy::SetIsIDBDatabaseHoldingLockedFiles(isIDBDatabaseHoldingLockedFiles), 0);2509 }2510 2511 2502 } // namespace WebKit -
trunk/Source/WebKit/NetworkProcess/NetworkProcess.h
r243911 r244077 408 408 void didSyncAllCookies(); 409 409 410 void notifyHoldingLockedFiles(bool isIDBDatabaseHoldingLockedFiles);411 410 #if USE(SOUP) 412 411 void setIgnoreTLSErrors(bool); -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.cpp
r243911 r244077 280 280 281 281 m_tokenForHoldingLockedFiles = nullptr; 282 m_tokenForIDBDatabaseHoldingLockedFiles = nullptr;283 282 284 283 m_syncAllCookiesToken = nullptr; … … 1059 1058 } 1060 1059 1061 void NetworkProcessProxy::setIsIDBDatabaseHoldingLockedFiles(bool isIDBDatabaseHoldingLockedFiles)1062 {1063 if (!isIDBDatabaseHoldingLockedFiles) {1064 RELEASE_LOG(ProcessSuspension, "UIProcess is releasing a background assertion because the Network process is no longer holding locked files for IDBDatabase");1065 m_tokenForIDBDatabaseHoldingLockedFiles = nullptr;1066 return;1067 }1068 if (!m_tokenForIDBDatabaseHoldingLockedFiles) {1069 RELEASE_LOG(ProcessSuspension, "UIProcess is taking a background assertion because the Network process is holding locked files for IDBDatabase");1070 m_tokenForIDBDatabaseHoldingLockedFiles = m_throttler.backgroundActivityToken();1071 }1072 }1073 1074 1060 void NetworkProcessProxy::syncAllCookies() 1075 1061 { -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.h
r243632 r244077 160 160 161 161 void setIsHoldingLockedFiles(bool); 162 void setIsIDBDatabaseHoldingLockedFiles(bool);163 162 164 163 void syncAllCookies(); … … 262 261 ProcessThrottler m_throttler; 263 262 ProcessThrottler::BackgroundActivityToken m_tokenForHoldingLockedFiles; 264 ProcessThrottler::BackgroundActivityToken m_tokenForIDBDatabaseHoldingLockedFiles;265 263 ProcessThrottler::BackgroundActivityToken m_syncAllCookiesToken; 266 264 -
trunk/Source/WebKit/UIProcess/Network/NetworkProcessProxy.messages.in
r243632 r244077 34 34 ProcessReadyToSuspend() 35 35 SetIsHoldingLockedFiles(bool isHoldingLockedFiles) 36 SetIsIDBDatabaseHoldingLockedFiles(bool isIDBDatabaseHoldingLockedFiles)37 36 38 37 # Diagnostic messages logging
Note:
See TracChangeset
for help on using the changeset viewer.