Title: [170928] trunk/Source
Revision
170928
Author
psola...@apple.com
Date
2014-07-09 13:55:35 -0700 (Wed, 09 Jul 2014)

Log Message

Move resource buffering from SynchronousNetworkLoaderClient to NetworkResourceLoader
https://bugs.webkit.org/show_bug.cgi?id=134732

Reviewed by Darin Adler.

Source/WebCore:
No new tests because no functional changes.

* WebCore.exp.in:

Source/WebKit2:
Buffer the resource in NetworkResourceLoader instead of SynchronousNetworkLoaderClient. This
is in preparation for bug 134560 where we will be supporting JS and CSS resource buffering
that uses AsynchronousNetworkLoaderClient.

* NetworkProcess/NetworkResourceLoader.cpp:
(WebKit::NetworkResourceLoader::NetworkResourceLoader):
(WebKit::NetworkResourceLoader::didReceiveBuffer):
(WebKit::NetworkResourceLoader::didFinishLoading):
* NetworkProcess/NetworkResourceLoader.h:
(WebKit::NetworkResourceLoader::bufferedData):
* NetworkProcess/SynchronousNetworkLoaderClient.cpp:
(WebKit::SynchronousNetworkLoaderClient::didReceiveBuffer):
(WebKit::SynchronousNetworkLoaderClient::didFinishLoading):
(WebKit::SynchronousNetworkLoaderClient::didFail):
(WebKit::SynchronousNetworkLoaderClient::sendDelayedReply):
* NetworkProcess/SynchronousNetworkLoaderClient.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (170927 => 170928)


--- trunk/Source/WebCore/ChangeLog	2014-07-09 20:52:35 UTC (rev 170927)
+++ trunk/Source/WebCore/ChangeLog	2014-07-09 20:55:35 UTC (rev 170928)
@@ -1,3 +1,14 @@
+2014-07-09  Pratik Solanki  <psola...@apple.com>
+
+        Move resource buffering from SynchronousNetworkLoaderClient to NetworkResourceLoader
+        https://bugs.webkit.org/show_bug.cgi?id=134732
+
+        Reviewed by Darin Adler.
+
+        No new tests because no functional changes.
+
+        * WebCore.exp.in:
+
 2014-07-09  Tim Horton  <timothy_hor...@apple.com>
 
         Fix the !USE(IOSURFACE) build.

Modified: trunk/Source/WebCore/WebCore.exp.in (170927 => 170928)


--- trunk/Source/WebCore/WebCore.exp.in	2014-07-09 20:52:35 UTC (rev 170927)
+++ trunk/Source/WebCore/WebCore.exp.in	2014-07-09 20:55:35 UTC (rev 170928)
@@ -244,6 +244,7 @@
 __ZN7WebCore12SharedBuffer12createNSDataEv
 __ZN7WebCore12SharedBuffer24createWithContentsOfFileERKN3WTF6StringE
 __ZN7WebCore12SharedBuffer6appendEPKcj
+__ZN7WebCore12SharedBuffer6appendEPS0_
 __ZN7WebCore12SharedBufferC1EPKcj
 __ZN7WebCore12SharedBufferC1EPKhj
 __ZN7WebCore12SharedBufferC1Ev

Modified: trunk/Source/WebKit2/ChangeLog (170927 => 170928)


--- trunk/Source/WebKit2/ChangeLog	2014-07-09 20:52:35 UTC (rev 170927)
+++ trunk/Source/WebKit2/ChangeLog	2014-07-09 20:55:35 UTC (rev 170928)
@@ -1,3 +1,27 @@
+2014-07-09  Pratik Solanki  <psola...@apple.com>
+
+        Move resource buffering from SynchronousNetworkLoaderClient to NetworkResourceLoader
+        https://bugs.webkit.org/show_bug.cgi?id=134732
+
+        Reviewed by Darin Adler.
+
+        Buffer the resource in NetworkResourceLoader instead of SynchronousNetworkLoaderClient. This
+        is in preparation for bug 134560 where we will be supporting JS and CSS resource buffering
+        that uses AsynchronousNetworkLoaderClient.
+
+        * NetworkProcess/NetworkResourceLoader.cpp:
+        (WebKit::NetworkResourceLoader::NetworkResourceLoader):
+        (WebKit::NetworkResourceLoader::didReceiveBuffer):
+        (WebKit::NetworkResourceLoader::didFinishLoading):
+        * NetworkProcess/NetworkResourceLoader.h:
+        (WebKit::NetworkResourceLoader::bufferedData):
+        * NetworkProcess/SynchronousNetworkLoaderClient.cpp:
+        (WebKit::SynchronousNetworkLoaderClient::didReceiveBuffer):
+        (WebKit::SynchronousNetworkLoaderClient::didFinishLoading):
+        (WebKit::SynchronousNetworkLoaderClient::didFail):
+        (WebKit::SynchronousNetworkLoaderClient::sendDelayedReply):
+        * NetworkProcess/SynchronousNetworkLoaderClient.h:
+
 2014-07-09  Benjamin Poulain  <bpoul...@apple.com>
 
         [iOS][WK2] subviews of the unscaled view drift out during CA animations

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp (170927 => 170928)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2014-07-09 20:52:35 UTC (rev 170927)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.cpp	2014-07-09 20:55:35 UTC (rev 170928)
@@ -99,9 +99,10 @@
 
     ASSERT(RunLoop::isMain());
     
-    if (reply)
+    if (reply) {
         m_networkLoaderClient = std::make_unique<SynchronousNetworkLoaderClient>(m_request, reply);
-    else
+        m_bufferedData = WebCore::SharedBuffer::create();
+    } else
         m_networkLoaderClient = std::make_unique<AsynchronousNetworkLoaderClient>();
 }
 
@@ -214,13 +215,20 @@
     // Such buffering will need to be thread safe, as this callback is happening on a background thread.
     
     m_bytesReceived += buffer->size();
-    m_networkLoaderClient->didReceiveBuffer(this, buffer.get(), encodedDataLength);
+    if (m_bufferedData)
+        m_bufferedData->append(buffer.get());
+    else
+        m_networkLoaderClient->didReceiveBuffer(this, buffer.get(), encodedDataLength);
 }
 
 void NetworkResourceLoader::didFinishLoading(ResourceHandle* handle, double finishTime)
 {
     ASSERT_UNUSED(handle, handle == m_handle);
 
+    // Send the full resource data if we were buffering it.
+    if (m_bufferedData && m_bufferedData->size())
+        m_networkLoaderClient->didReceiveBuffer(this, m_bufferedData.get(), m_bufferedData->size());
+
     m_networkLoaderClient->didFinishLoading(this, finishTime);
 
     cleanup();

Modified: trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h (170927 => 170928)


--- trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2014-07-09 20:52:35 UTC (rev 170927)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkResourceLoader.h	2014-07-09 20:55:35 UTC (rev 170928)
@@ -147,6 +147,8 @@
 #endif
     void continueWillSendRequest(const WebCore::ResourceRequest& newRequest);
 
+    WebCore::SharedBuffer* bufferedData() const { return m_bufferedData.get(); }
+
 private:
     NetworkResourceLoader(const NetworkResourceLoadParameters&, NetworkConnectionToWebProcess*, PassRefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply>);
 
@@ -196,6 +198,7 @@
     RefPtr<NetworkConnectionToWebProcess> m_connection;
     
     RefPtr<HostRecord> m_hostRecord;
+    RefPtr<WebCore::SharedBuffer> m_bufferedData;
 };
 
 } // namespace WebKit

Modified: trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.cpp (170927 => 170928)


--- trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.cpp	2014-07-09 20:52:35 UTC (rev 170927)
+++ trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.cpp	2014-07-09 20:55:35 UTC (rev 170928)
@@ -81,30 +81,24 @@
     m_response = response;
 }
 
-void SynchronousNetworkLoaderClient::didReceiveBuffer(NetworkResourceLoader*, SharedBuffer* buffer, int /* encodedDataLength */)
+void SynchronousNetworkLoaderClient::didReceiveBuffer(NetworkResourceLoader*, SharedBuffer*, int /* encodedDataLength */)
 {
-    // FIXME: There's a potential performance improvement here by preallocating a SharedMemory region
-    // of the expected content length to avoid a copy when we send it to the WebProcess on completion.
-    // It's unclear if the potential complexities of that approach are worth it.
-    
-    if (!m_responseData)
-        m_responseData = std::make_unique<Vector<char>>();
-
-    m_responseData->append(buffer->data(), buffer->size());
+    // Nothing to do here. Data is buffered in NetworkResourceLoader and we will grab it from there
+    // in sendDelayedReply().
 }
 
-void SynchronousNetworkLoaderClient::didFinishLoading(NetworkResourceLoader*, double /* finishTime */)
+void SynchronousNetworkLoaderClient::didFinishLoading(NetworkResourceLoader* loader, double /* finishTime */)
 {
-    sendDelayedReply();
+    sendDelayedReply(*loader);
 }
 
-void SynchronousNetworkLoaderClient::didFail(NetworkResourceLoader*, const ResourceError& error)
+void SynchronousNetworkLoaderClient::didFail(NetworkResourceLoader* loader, const ResourceError& error)
 {
     m_error = error;
-    sendDelayedReply();
+    sendDelayedReply(*loader);
 }
 
-void SynchronousNetworkLoaderClient::sendDelayedReply()
+void SynchronousNetworkLoaderClient::sendDelayedReply(NetworkResourceLoader& loader)
 {
     ASSERT(m_delayedReply);
 
@@ -113,7 +107,12 @@
         //platformSynthesizeErrorResponse();
     }
 
-    m_delayedReply->send(m_error, m_response, m_responseData ? *m_responseData : Vector<char>());
+    Vector<char> responseData;
+    SharedBuffer* buffer = loader.bufferedData();
+    if (buffer && buffer->size())
+        responseData.append(buffer->data(), buffer->size());
+
+    m_delayedReply->send(m_error, m_response, responseData);
     m_delayedReply = nullptr;
 }
 

Modified: trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h (170927 => 170928)


--- trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h	2014-07-09 20:52:35 UTC (rev 170927)
+++ trunk/Source/WebKit2/NetworkProcess/SynchronousNetworkLoaderClient.h	2014-07-09 20:55:35 UTC (rev 170928)
@@ -60,14 +60,13 @@
     virtual void didFinishLoading(NetworkResourceLoader*, double finishTime) override;
     virtual void didFail(NetworkResourceLoader*, const WebCore::ResourceError&) override;
 
-    void sendDelayedReply();
+    void sendDelayedReply(NetworkResourceLoader&);
 
     WebCore::ResourceRequest m_originalRequest;
     WebCore::ResourceRequest m_currentRequest;
     RefPtr<Messages::NetworkConnectionToWebProcess::PerformSynchronousLoad::DelayedReply> m_delayedReply;
     WebCore::ResourceResponse m_response;
     WebCore::ResourceError m_error;
-    std::unique_ptr<Vector<char>> m_responseData;
 };
 
 } // namespace WebKit
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to