haikuwebkit/Source/WebKit/NetworkProcess/WebStorage
Sihui Liu d90b20a162 Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner
https://bugs.webkit.org/show_bug.cgi?id=228748
<rdar://problem/81626714>

Reviewed by Chris Dumez.

Source/WebKit:

When suspending ResourceLoadStatistics and LocalStorage, we dispatched a suspend task, which waits on a
condition, to their WorkQueue. That means the queue will be suspended after completing all tasks scheduled
before the suspend task. These tasks may take a long time to complete and assertion may be timed out.

When network process receives PrepareToSuspend message, we want the queues to suspend as soon as possible. To
achieve that, now we check if the queue needs to be suspended before each task, which ensures the queue
execute as most one task after suspend().

* NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.cpp:
(WebKit::ResourceLoadStatisticsDatabaseStore::ResourceLoadStatisticsDatabaseStore):
* NetworkProcess/Classifier/ResourceLoadStatisticsDatabaseStore.h:
* NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.cpp:
(WebKit::ResourceLoadStatisticsMemoryStore::ResourceLoadStatisticsMemoryStore):
* NetworkProcess/Classifier/ResourceLoadStatisticsMemoryStore.h:
* NetworkProcess/Classifier/ResourceLoadStatisticsStore.cpp:
(WebKit::ResourceLoadStatisticsStore::ResourceLoadStatisticsStore):
* NetworkProcess/Classifier/ResourceLoadStatisticsStore.h:
(WebKit::ResourceLoadStatisticsStore::workQueue):
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.cpp:
(WebKit::sharedStatisticsQueue):
(WebKit::WebResourceLoadStatisticsStore::suspend):
(WebKit::WebResourceLoadStatisticsStore::resume):
(WebKit::WTF_GUARDED_BY_LOCK): Deleted.
* NetworkProcess/Classifier/WebResourceLoadStatisticsStore.h:
* NetworkProcess/WebStorage/LocalStorageDatabase.cpp:
(WebKit::LocalStorageDatabase::create):
(WebKit::LocalStorageDatabase::LocalStorageDatabase):
* NetworkProcess/WebStorage/LocalStorageDatabase.h:
* NetworkProcess/WebStorage/LocalStorageNamespace.cpp:
(WebKit::LocalStorageNamespace::getOrCreateStorageArea):
* NetworkProcess/WebStorage/LocalStorageNamespace.h:
* NetworkProcess/WebStorage/SessionStorageNamespace.cpp:
(WebKit::SessionStorageNamespace::getOrCreateStorageArea):
* NetworkProcess/WebStorage/SessionStorageNamespace.h:
* NetworkProcess/WebStorage/StorageArea.cpp:
(WebKit::StorageArea::StorageArea):
* NetworkProcess/WebStorage/StorageArea.h:
* NetworkProcess/WebStorage/StorageManager.cpp:
(WebKit::StorageManager::createLocalStorageArea):
(WebKit::StorageManager::createTransientLocalStorageArea):
(WebKit::StorageManager::createSessionStorageArea):
* NetworkProcess/WebStorage/StorageManager.h:
* NetworkProcess/WebStorage/StorageManagerSet.cpp:
(WebKit::StorageManagerSet::StorageManagerSet):
(WebKit::StorageManagerSet::suspend):
(WebKit::StorageManagerSet::resume):
* NetworkProcess/WebStorage/StorageManagerSet.h:
(WebKit::StorageManagerSet::WTF_GUARDED_BY_LOCK): Deleted.
* NetworkProcess/WebStorage/TransientLocalStorageNamespace.cpp:
(WebKit::TransientLocalStorageNamespace::getOrCreateStorageArea):
* NetworkProcess/WebStorage/TransientLocalStorageNamespace.h:

Source/WTF:

Add SuspendableWorkQueue that would perform suspend check before each task.

* WTF.xcodeproj/project.pbxproj:
* wtf/CMakeLists.txt:
* wtf/Forward.h:
* wtf/SuspendableWorkQueue.cpp: Added.
(WTF::SuspendableWorkQueue::create):
(WTF::SuspendableWorkQueue::SuspendableWorkQueue):
(WTF::SuspendableWorkQueue::suspend):
(WTF::SuspendableWorkQueue::resume):
(WTF::SuspendableWorkQueue::dispatch):
(WTF::SuspendableWorkQueue::dispatchAfter):
(WTF::SuspendableWorkQueue::dispatchSync):
(WTF::SuspendableWorkQueue::invokeAllSuspensionCompletionHandlers):
(WTF::SuspendableWorkQueue::suspendIfNeeded):
* wtf/SuspendableWorkQueue.h: Added.
* wtf/WorkQueue.h:
(): Deleted.


Canonical link: https://commits.webkit.org/240451@main
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@280934 268f45cc-cd09-0410-ab3c-d52691b4dbfc
2021-08-11 22:25:56 +00:00
..
ios Unify linkedOnOrAfter duplicate code and use SPI/WebCoreTestSupport instead of NSUserDefaults 2020-10-05 14:57:53 +00:00
LocalStorageDatabase.cpp Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
LocalStorageDatabase.h Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
LocalStorageDatabaseTracker.cpp Rename FileSystem::pathGetFileName() to FileSystem::pathFileName() 2021-05-14 16:01:00 +00:00
LocalStorageDatabaseTracker.h Remove WTF::Optional synonym for std::optional, using that class template directly instead 2021-05-30 16:11:40 +00:00
LocalStorageNamespace.cpp Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
LocalStorageNamespace.h Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
SessionStorageNamespace.cpp Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
SessionStorageNamespace.h Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
StorageArea.cpp Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
StorageArea.h Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
StorageAreaIdentifier.h
StorageManager.cpp Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
StorageManager.h Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
StorageManagerSet.cpp Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
StorageManagerSet.h Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
StorageManagerSet.messages.in Remove WTF::Optional synonym for std::optional, using that class template directly instead 2021-05-30 16:11:40 +00:00
TransientLocalStorageNamespace.cpp Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00
TransientLocalStorageNamespace.h Suspend WorkQueue of ResourceLoadStatistics and LocalStorage sooner 2021-08-11 22:25:56 +00:00