Title: [289081] trunk/Source
- Revision
- 289081
- Author
- sihui_...@apple.com
- Date
- 2022-02-03 15:09:21 -0800 (Thu, 03 Feb 2022)
Log Message
Delay writing origin file in NetworkStorageManager
https://bugs.webkit.org/show_bug.cgi?id=235897
rdar://87163253
Reviewed by Geoffrey Garen.
Revert r288924 that delays writing origin file to when OriginStorageManager is destroyed, and take a different
approach that schedules a async task to write origin file. PLT results show that the new approach can also make
up for PLT regresion caused by r286936, where network process started to write origin file before replying sync
storage message from web process.
* NetworkProcess/storage/NetworkStorageManager.cpp:
(WebKit::NetworkStorageManager::localOriginStorageManager):
* NetworkProcess/storage/OriginStorageManager.cpp:
(WebKit::OriginStorageManager::OriginStorageManager):
(WebKit::OriginStorageManager::~OriginStorageManager): Deleted.
* NetworkProcess/storage/OriginStorageManager.h:
Modified Paths
Diff
Modified: trunk/Source/WebCore/Headers.cmake (289080 => 289081)
--- trunk/Source/WebCore/Headers.cmake 2022-02-03 22:27:18 UTC (rev 289080)
+++ trunk/Source/WebCore/Headers.cmake 2022-02-03 23:09:21 UTC (rev 289081)
@@ -224,6 +224,8 @@
Modules/indexeddb/server/IDBConnectionToClient.h
Modules/indexeddb/server/IDBConnectionToClientDelegate.h
Modules/indexeddb/server/IDBServer.h
+ Modules/indexeddb/server/MemoryIDBBackingStore.h
+ Modules/indexeddb/server/SQLiteIDBBackingStore.h
Modules/indexeddb/server/ServerOpenDBRequest.h
Modules/indexeddb/server/UniqueIDBDatabase.h
Modules/indexeddb/server/UniqueIDBDatabaseConnection.h
Modified: trunk/Source/WebKit/ChangeLog (289080 => 289081)
--- trunk/Source/WebKit/ChangeLog 2022-02-03 22:27:18 UTC (rev 289080)
+++ trunk/Source/WebKit/ChangeLog 2022-02-03 23:09:21 UTC (rev 289081)
@@ -1,3 +1,23 @@
+2022-02-03 Sihui Liu <sihui_...@apple.com>
+
+ Delay writing origin file in NetworkStorageManager
+ https://bugs.webkit.org/show_bug.cgi?id=235897
+ rdar://87163253
+
+ Reviewed by Geoffrey Garen.
+
+ Revert r288924 that delays writing origin file to when OriginStorageManager is destroyed, and take a different
+ approach that schedules a async task to write origin file. PLT results show that the new approach can also make
+ up for PLT regresion caused by r286936, where network process started to write origin file before replying sync
+ storage message from web process.
+
+ * NetworkProcess/storage/NetworkStorageManager.cpp:
+ (WebKit::NetworkStorageManager::localOriginStorageManager):
+ * NetworkProcess/storage/OriginStorageManager.cpp:
+ (WebKit::OriginStorageManager::OriginStorageManager):
+ (WebKit::OriginStorageManager::~OriginStorageManager): Deleted.
+ * NetworkProcess/storage/OriginStorageManager.h:
+
2022-02-03 Robert Jenner <jen...@apple.com>
Unreviewed, reverting r288902.
Modified: trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp (289080 => 289081)
--- trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp 2022-02-03 22:27:18 UTC (rev 289080)
+++ trunk/Source/WebKit/NetworkProcess/storage/NetworkStorageManager.cpp 2022-02-03 23:09:21 UTC (rev 289081)
@@ -213,12 +213,16 @@
return *m_localOriginStorageManagers.ensure(origin, [&] {
auto originDirectory = originDirectoryPath(m_path, origin, m_salt);
- // We write origin file at when OriginStorageManager is destroyed to avoid delay
- // in replying sync messages for Web Storage API.
- auto writeOriginFileFunction = [originFile = originFilePath(originDirectory), origin]() {
- writeOriginToFileIfNecessary(originFile, origin);
- };
- return makeUnique<OriginStorageManager>(WTFMove(writeOriginFileFunction), WTFMove(originDirectory), LocalStorageManager::localStorageFilePath(m_customLocalStoragePath, origin));
+ // Write origin file asynchronously to avoid delay in replying sync messages for Web Storage API.
+ if (!originDirectory.isEmpty()) {
+ m_queue->dispatch([this, protectedThis = Ref { *this }, origin, originDirectory]() mutable {
+ if (!m_localOriginStorageManagers.contains(origin))
+ return;
+
+ writeOriginToFileIfNecessary(originFilePath(originDirectory), origin);
+ });
+ }
+ return makeUnique<OriginStorageManager>(WTFMove(originDirectory), LocalStorageManager::localStorageFilePath(m_customLocalStoragePath, origin));
}).iterator->value;
}
Modified: trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp (289080 => 289081)
--- trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp 2022-02-03 22:27:18 UTC (rev 289080)
+++ trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.cpp 2022-02-03 23:09:21 UTC (rev 289081)
@@ -279,19 +279,14 @@
std::unique_ptr<SessionStorageManager> m_sessionStorageManager;
};
-OriginStorageManager::OriginStorageManager(Function<void()>&& writeOriginFileFunction, String&& path, String&& localStoragePath)
- : m_writeOriginFileFunction(WTFMove(writeOriginFileFunction))
- , m_path(WTFMove(path))
+OriginStorageManager::OriginStorageManager(String&& path, String&& localStoragePath)
+ : m_path(WTFMove(path))
, m_localStoragePath(WTFMove(localStoragePath))
{
ASSERT(!RunLoop::isMain());
}
-OriginStorageManager::~OriginStorageManager()
-{
- if (m_writeOriginFileFunction)
- m_writeOriginFileFunction();
-}
+OriginStorageManager::~OriginStorageManager() = default;
void OriginStorageManager::connectionClosed(IPC::Connection::UniqueID connection)
{
Modified: trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.h (289080 => 289081)
--- trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.h 2022-02-03 22:27:18 UTC (rev 289080)
+++ trunk/Source/WebKit/NetworkProcess/storage/OriginStorageManager.h 2022-02-03 23:09:21 UTC (rev 289081)
@@ -44,7 +44,7 @@
class OriginStorageManager {
WTF_MAKE_FAST_ALLOCATED;
public:
- OriginStorageManager(Function<void()>&&, String&& path, String&& localStoragePath);
+ OriginStorageManager(String&& path, String&& localStoragePath);
~OriginStorageManager();
void connectionClosed(IPC::Connection::UniqueID);
@@ -69,7 +69,6 @@
void createOriginFileIfNecessary(const WebCore::ClientOrigin&);
void deleteOriginFileIfNecessary();
- Function<void()> m_writeOriginFileFunction;
std::unique_ptr<StorageBucket> m_defaultBucket;
String m_path;
bool m_persisted { false };
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes