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

Reply via email to