Diff
Modified: trunk/Source/WebKit2/ChangeLog (161001 => 161002)
--- trunk/Source/WebKit2/ChangeLog 2013-12-23 18:27:20 UTC (rev 161001)
+++ trunk/Source/WebKit2/ChangeLog 2013-12-23 18:36:54 UTC (rev 161002)
@@ -1,3 +1,25 @@
+2013-12-23 Anders Carlsson <[email protected]>
+
+ Convert ThreadCondition in WebKit2 over to std::condition_variable
+ https://bugs.webkit.org/show_bug.cgi?id=126161
+
+ Reviewed by Sam Weinig.
+
+ * Platform/CoreIPC/Connection.cpp:
+ (CoreIPC::Connection::waitForMessage):
+ (CoreIPC::Connection::processIncomingMessage):
+ * Platform/CoreIPC/Connection.h:
+ * Shared/BlockingResponseMap.h:
+ (BlockingResponseMap::waitForResponse):
+ (BlockingResponseMap::didReceiveResponse):
+ (BlockingResponseMap::cancel):
+ * UIProcess/API/mac/WKPrintingView.h:
+ * UIProcess/API/mac/WKPrintingView.mm:
+ (pageDidDrawToPDF):
+ (-[WKPrintingView _preparePDFDataForPrintingOnSecondaryThread]):
+ (prepareDataForPrintingOnSecondaryThread):
+ (-[WKPrintingView knowsPageRange:]):
+
2013-12-22 Martin Robinson <[email protected]>
[GTK][CMake] libtool-compatible soversion calculation
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp (161001 => 161002)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2013-12-23 18:27:20 UTC (rev 161001)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.cpp 2013-12-23 18:36:54 UTC (rev 161002)
@@ -393,12 +393,10 @@
}
}
- double absoluteTime = currentTime() + timeout;
-
std::pair<std::pair<StringReference, StringReference>, uint64_t> messageAndDestination(std::make_pair(std::make_pair(messageReceiverName, messageName), destinationID));
{
- MutexLocker locker(m_waitForMessageMutex);
+ std::lock_guard<std::mutex> lock(m_waitForMessageMutex);
// We don't support having multiple clients wait for the same message.
ASSERT(!m_waitForMessageMap.contains(messageAndDestination));
@@ -409,7 +407,7 @@
// Now wait for it to be set.
while (true) {
- MutexLocker locker(m_waitForMessageMutex);
+ std::unique_lock<std::mutex> lock(m_waitForMessageMutex);
auto it = m_waitForMessageMap.find(messageAndDestination);
if (it->value) {
@@ -420,7 +418,9 @@
}
// Now we wait.
- if (!m_waitForMessageCondition.timedWait(m_waitForMessageMutex, absoluteTime)) {
+ // 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) {
// We timed out, now remove the pending wait.
m_waitForMessageMap.remove(messageAndDestination);
@@ -645,14 +645,14 @@
// Check if we're waiting for this message.
{
- MutexLocker locker(m_waitForMessageMutex);
+ std::lock_guard<std::mutex> lock(m_waitForMessageMutex);
auto it = m_waitForMessageMap.find(std::make_pair(std::make_pair(message->messageReceiverName(), message->messageName()), message->destinationID()));
if (it != m_waitForMessageMap.end()) {
it->value = std::move(message);
ASSERT(it->value);
- m_waitForMessageCondition.signal();
+ m_waitForMessageCondition.notify_one();
return;
}
}
Modified: trunk/Source/WebKit2/Platform/CoreIPC/Connection.h (161001 => 161002)
--- trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-12-23 18:27:20 UTC (rev 161001)
+++ trunk/Source/WebKit2/Platform/CoreIPC/Connection.h 2013-12-23 18:36:54 UTC (rev 161002)
@@ -34,11 +34,11 @@
#include "MessageReceiver.h"
#include "WorkQueue.h"
#include <atomic>
+#include <thread>
#include <wtf/Deque.h>
#include <wtf/Forward.h>
#include <wtf/PassRefPtr.h>
#include <wtf/OwnPtr.h>
-#include <wtf/Threading.h>
#include <wtf/text/CString.h>
#if OS(DARWIN)
@@ -238,8 +238,8 @@
Mutex m_outgoingMessagesLock;
Deque<std::unique_ptr<MessageEncoder>> m_outgoingMessages;
- ThreadCondition m_waitForMessageCondition;
- Mutex m_waitForMessageMutex;
+ std::condition_variable m_waitForMessageCondition;
+ std::mutex m_waitForMessageMutex;
HashMap<std::pair<std::pair<StringReference, StringReference>, uint64_t>, std::unique_ptr<MessageDecoder>> m_waitForMessageMap;
// Represents a sync request for which we're waiting on a reply.
Modified: trunk/Source/WebKit2/Shared/BlockingResponseMap.h (161001 => 161002)
--- trunk/Source/WebKit2/Shared/BlockingResponseMap.h 2013-12-23 18:27:20 UTC (rev 161001)
+++ trunk/Source/WebKit2/Shared/BlockingResponseMap.h 2013-12-23 18:36:54 UTC (rev 161002)
@@ -26,9 +26,8 @@
#ifndef BlockingResponseMap_h
#define BlockingResponseMap_h
+#include <thread>
#include <wtf/HashMap.h>
-#include <wtf/OwnPtr.h>
-#include <wtf/ThreadingPrimitives.h>
template<typename T>
class BlockingResponseMap {
@@ -40,7 +39,7 @@
std::unique_ptr<T> waitForResponse(uint64_t requestID)
{
while (true) {
- MutexLocker locker(m_mutex);
+ std::unique_lock<std::mutex> lock(m_mutex);
if (m_canceled)
return nullptr;
@@ -48,7 +47,7 @@
if (std::unique_ptr<T> response = m_responses.take(requestID))
return response;
- m_condition.wait(m_mutex);
+ m_condition.wait(lock);
}
return nullptr;
@@ -56,12 +55,13 @@
void didReceiveResponse(uint64_t requestID, std::unique_ptr<T> response)
{
- MutexLocker locker(m_mutex);
+ std::lock_guard<std::mutex> lock(m_mutex);
ASSERT(!m_responses.contains(requestID));
m_responses.set(requestID, std::move(response));
+
// FIXME: Waking up all threads is quite inefficient.
- m_condition.broadcast();
+ m_condition.notify_all();
}
void cancel()
@@ -69,12 +69,12 @@
m_canceled = true;
// FIXME: Waking up all threads is quite inefficient.
- m_condition.broadcast();
+ m_condition.notify_all();
}
private:
- Mutex m_mutex;
- ThreadCondition m_condition;
+ std::mutex m_mutex;
+ std::condition_variable m_condition;
HashMap<uint64_t, std::unique_ptr<T>> m_responses;
bool m_canceled;
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKPrintingView.h (161001 => 161002)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKPrintingView.h 2013-12-23 18:27:20 UTC (rev 161001)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKPrintingView.h 2013-12-23 18:36:54 UTC (rev 161002)
@@ -24,6 +24,7 @@
*/
#import <WebCore/IntRectHash.h>
+#import <thread>
#import <wtf/RetainPtr.h>
@class WKPrintingViewData;
@@ -53,8 +54,8 @@
uint64_t _expectedPrintCallback;
BOOL _isPrintingFromSecondaryThread;
- Mutex _printingCallbackMutex;
- ThreadCondition _printingCallbackCondition;
+ std::mutex _printingCallbackMutex;
+ std::condition_variable _printingCallbackCondition;
NSTimer *_autodisplayResumeTimer;
}
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm (161001 => 161002)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm 2013-12-23 18:27:20 UTC (rev 161001)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKPrintingView.mm 2013-12-23 18:36:54 UTC (rev 161002)
@@ -251,7 +251,7 @@
if (data)
view->_printedPagesData.append(data->bytes(), data->size());
view->_expectedPrintCallback = 0;
- view->_printingCallbackCondition.signal();
+ view->_printingCallbackCondition.notify_one();
}
}
@@ -260,11 +260,11 @@
ASSERT(RunLoop::isMain());
if (!_webFrame->page()) {
- _printingCallbackCondition.signal();
+ _printingCallbackCondition.notify_one();
return;
}
- MutexLocker lock(_printingCallbackMutex);
+ std::lock_guard<std::mutex> lock(_printingCallbackMutex);
ASSERT([self _hasPageRects]);
ASSERT(_printedPagesData.isEmpty());
@@ -358,7 +358,7 @@
ASSERT(RunLoop::isMain());
WKPrintingView *view = static_cast<WKPrintingView *>(untypedContext);
- MutexLocker lock(view->_printingCallbackMutex);
+ std::lock_guard<std::mutex> lock(view->_printingCallbackMutex);
// We may have received page rects while a message to call this function traveled from secondary thread to main one.
if ([view _hasPageRects]) {
@@ -396,9 +396,9 @@
*range = NSMakeRange(1, _printingPageRects.size());
else if (!RunLoop::isMain()) {
ASSERT(![self _isPrintingPreview]);
- MutexLocker lock(_printingCallbackMutex);
+ std::unique_lock<std::mutex> lock(_printingCallbackMutex);
callOnMainThread(prepareDataForPrintingOnSecondaryThread, self);
- _printingCallbackCondition.wait(_printingCallbackMutex);
+ _printingCallbackCondition.wait(lock);
*range = NSMakeRange(1, _printingPageRects.size());
} else {
ASSERT([self _isPrintingPreview]);