- 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