Diff
Modified: trunk/Source/WebKit2/ChangeLog (161006 => 161007)
--- trunk/Source/WebKit2/ChangeLog 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/ChangeLog 2013-12-23 19:34:27 UTC (rev 161007)
@@ -1,5 +1,29 @@
2013-12-23 Anders Carlsson <[email protected]>
+ Use std::chrono::milliseconds for message wait timeouts in WebKit2
+ https://bugs.webkit.org/show_bug.cgi?id=126168
+
+ Reviewed by Sam Weinig.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::waitForMessage):
+ * Platform/CoreIPC/Connection.h:
+ (CoreIPC::Connection::waitForAndDispatchImmediately):
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView forceAsyncDrawingAreaSizeUpdate:]):
+ (-[WKView waitForAsyncDrawingAreaSizeUpdate]):
+ * UIProcess/DrawingAreaProxy.cpp:
+ * UIProcess/DrawingAreaProxy.h:
+ (WebKit::DrawingAreaProxy::didUpdateBackingStoreStateTimeout):
+ (WebKit::DrawingAreaProxy::waitForPossibleGeometryUpdate):
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::waitForDidUpdateViewState):
+ * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
+ * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate):
+
+2013-12-23 Anders Carlsson <[email protected]>
+
Include <condition_variable>, not <thread>.
* Platform/CoreIPC/Connection.h:
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp (161006 => 161007)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2013-12-23 19:34:27 UTC (rev 161007)
@@ -375,7 +375,7 @@
return sendMessage(std::move(encoder));
}
-std::unique_ptr<MessageDecoder> Connection::waitForMessage(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, double timeout)
+std::unique_ptr<MessageDecoder> Connection::waitForMessage(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, std::chrono::milliseconds timeout)
{
// First, check if this message is already in the incoming messages queue.
{
@@ -418,9 +418,7 @@
}
// Now we wait.
- // FIXME: It would be better if Connection::waitForMessage took an std::chrono::milliseconds instead of a double.
- std::chrono::milliseconds timeoutInMilliseconds(static_cast<std::chrono::milliseconds::rep>(timeout * 1000));
- if (m_waitForMessageCondition.wait_for(lock, timeoutInMilliseconds) == std::cv_status::timeout) {
+ if (m_waitForMessageCondition.wait_for(lock, timeout) == std::cv_status::timeout) {
// We timed out, now remove the pending wait.
m_waitForMessageMap.remove(messageAndDestination);
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.h (161006 => 161007)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-12-23 19:34:27 UTC (rev 161007)
@@ -159,7 +159,7 @@
template<typename T> bool send(T&& message, uint64_t destinationID, unsigned messageSendFlags = 0);
template<typename T> bool sendSync(T&& message, typename T::Reply&& reply, uint64_t destinationID, double timeout = NoTimeout, unsigned syncSendFlags = 0);
- template<typename T> bool waitForAndDispatchImmediately(uint64_t destinationID, double timeout);
+ template<typename T> bool waitForAndDispatchImmediately(uint64_t destinationID, std::chrono::milliseconds timeout);
std::unique_ptr<MessageEncoder> createSyncMessageEncoder(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, uint64_t& syncRequestID);
bool sendMessage(std::unique_ptr<MessageEncoder>, unsigned messageSendFlags = 0);
@@ -181,7 +181,7 @@
bool isValid() const { return m_client; }
- std::unique_ptr<MessageDecoder> waitForMessage(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, double timeout);
+ std::unique_ptr<MessageDecoder> waitForMessage(StringReference messageReceiverName, StringReference messageName, uint64_t destinationID, std::chrono::milliseconds timeout);
std::unique_ptr<MessageDecoder> waitForSyncReply(uint64_t syncRequestID, double timeout, unsigned syncSendFlags);
@@ -340,7 +340,7 @@
return replyDecoder->decode(reply);
}
-template<typename T> bool Connection::waitForAndDispatchImmediately(uint64_t destinationID, double timeout)
+template<typename T> bool Connection::waitForAndDispatchImmediately(uint64_t destinationID, std::chrono::milliseconds timeout)
{
std::unique_ptr<MessageDecoder> decoder = waitForMessage(T::receiverName(), T::name(), destinationID, timeout);
if (!decoder)
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (161006 => 161007)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2013-12-23 19:34:27 UTC (rev 161007)
@@ -3169,7 +3169,7 @@
// pending did-update message now, such that the new update can be sent. We do so after setting
// the drawing area size such that the latest update is sent.
if (DrawingAreaProxy* drawingArea = _data->_page->drawingArea())
- drawingArea->waitForPossibleGeometryUpdate(0);
+ drawingArea->waitForPossibleGeometryUpdate(std::chrono::milliseconds::zero());
}
- (void)waitForAsyncDrawingAreaSizeUpdate
@@ -3178,8 +3178,8 @@
// If a geometry update is still pending then the action of receiving the
// first geometry update may result in another update being scheduled -
// we should wait for this to complete too.
- drawingArea->waitForPossibleGeometryUpdate(DrawingAreaProxy::didUpdateBackingStoreStateTimeout * 0.5);
- drawingArea->waitForPossibleGeometryUpdate(DrawingAreaProxy::didUpdateBackingStoreStateTimeout * 0.5);
+ drawingArea->waitForPossibleGeometryUpdate(DrawingAreaProxy::didUpdateBackingStoreStateTimeout() / 2);
+ drawingArea->waitForPossibleGeometryUpdate(DrawingAreaProxy::didUpdateBackingStoreStateTimeout() / 2);
}
}
Modified: trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.cpp (161006 => 161007)
--- trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.cpp 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.cpp 2013-12-23 19:34:27 UTC (rev 161007)
@@ -34,8 +34,6 @@
namespace WebKit {
-const double DrawingAreaProxy::didUpdateBackingStoreStateTimeout = 0.5;
-
DrawingAreaProxy::DrawingAreaProxy(DrawingAreaType type, WebPageProxy* webPageProxy)
: m_type(type)
, m_webPageProxy(webPageProxy)
Modified: trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h (161006 => 161007)
--- trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h 2013-12-23 19:34:27 UTC (rev 161007)
@@ -32,6 +32,7 @@
#include <WebCore/FloatPoint.h>
#include <WebCore/IntRect.h>
#include <WebCore/IntSize.h>
+#include <chrono>
#include <stdint.h>
#include <wtf/Noncopyable.h>
@@ -60,10 +61,10 @@
const WebCore::IntSize& size() const { return m_size; }
void setSize(const WebCore::IntSize&, const WebCore::IntSize&, const WebCore::IntSize& scrollOffset);
- // The timeout, in seconds, we use when waiting for a DidUpdateGeometry message.
- static const double didUpdateBackingStoreStateTimeout;
+ // The timeout we use when waiting for a DidUpdateGeometry message.
+ static constexpr std::chrono::milliseconds didUpdateBackingStoreStateTimeout() { return std::chrono::milliseconds(500); }
- virtual void waitForPossibleGeometryUpdate(double = didUpdateBackingStoreStateTimeout) { }
+ virtual void waitForPossibleGeometryUpdate(std::chrono::milliseconds = didUpdateBackingStoreStateTimeout()) { }
virtual void colorSpaceDidChange() { }
virtual void minimumLayoutSizeDidChange() { }
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (161006 => 161007)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2013-12-23 19:34:27 UTC (rev 161007)
@@ -1008,7 +1008,7 @@
m_waitingForDidUpdateViewState = true;
if (!m_process->isLaunching()) {
- const double viewStateUpdateTimeout = 0.25;
+ auto viewStateUpdateTimeout = std::chrono::milliseconds(250);
m_process->connection()->waitForAndDispatchImmediately<Messages::WebPageProxy::DidUpdateViewState>(m_pageID, viewStateUpdateTimeout);
}
}
Modified: trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h (161006 => 161007)
--- trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h 2013-12-23 19:34:27 UTC (rev 161007)
@@ -41,7 +41,7 @@
// DrawingAreaProxy
virtual void deviceScaleFactorDidChange() OVERRIDE;
virtual void sizeDidChange() OVERRIDE;
- virtual void waitForPossibleGeometryUpdate(double timeout = didUpdateBackingStoreStateTimeout) OVERRIDE;
+ virtual void waitForPossibleGeometryUpdate(std::chrono::milliseconds timeout = didUpdateBackingStoreStateTimeout()) OVERRIDE;
virtual void colorSpaceDidChange() OVERRIDE;
virtual void minimumLayoutSizeDidChange() OVERRIDE;
Modified: trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm (161006 => 161007)
--- trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2013-12-23 19:15:09 UTC (rev 161006)
+++ trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2013-12-23 19:34:27 UTC (rev 161007)
@@ -67,7 +67,7 @@
sendUpdateGeometry();
}
-void TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate(double timeout)
+void TiledCoreAnimationDrawingAreaProxy::waitForPossibleGeometryUpdate(std::chrono::milliseconds timeout)
{
if (!m_isWaitingForDidUpdateGeometry)
return;