Diff
Modified: trunk/Source/WebKit/ChangeLog (260613 => 260614)
--- trunk/Source/WebKit/ChangeLog 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/ChangeLog 2020-04-24 01:08:37 UTC (rev 260614)
@@ -1,3 +1,24 @@
+2020-04-23 Simon Fraser <[email protected]>
+
+ Bounce displayWasRefreshed() via EventDispatcher
+ https://bugs.webkit.org/show_bug.cgi?id=208778
+
+ Reviewed by Antti Koivisto.
+
+ Allow the WebContent process to be notified of display refresh off the main thread, so other
+ threads like the scrolling thread can respond without being blocked. Achieve this
+ by having EventDispatcher receive the IPC message, then bounce it to the main thread.
+
+ * UIProcess/mac/DisplayLink.cpp:
+ (WebKit::DisplayLink::displayLinkCallback):
+ * WebProcess/WebPage/EventDispatcher.cpp:
+ (WebKit::EventDispatcher::displayWasRefreshed):
+ * WebProcess/WebPage/EventDispatcher.h:
+ * WebProcess/WebPage/EventDispatcher.messages.in:
+ * WebProcess/WebProcess.h:
+ * WebProcess/cocoa/WebProcessCocoa.mm:
+ (WebKit::WebProcess::displayWasRefreshed):
+
2020-04-23 David Kilzer <[email protected]>
Clean up QuickLookThumbnailLoader
Modified: trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp (260613 => 260614)
--- trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp 2020-04-24 01:08:37 UTC (rev 260614)
@@ -28,7 +28,7 @@
#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-#include "WebProcessMessages.h"
+#include "EventDispatcherMessages.h"
#include <wtf/ProcessPrivilege.h>
namespace WebKit {
@@ -124,10 +124,10 @@
auto* displayLink = static_cast<DisplayLink*>(data);
LockHolder locker(displayLink->m_observersLock);
for (auto& connection : displayLink->m_observers.keys())
- connection->send(Messages::WebProcess::DisplayWasRefreshed(displayLink->m_displayID), 0);
+ connection->send(Messages::EventDispatcher::DisplayWasRefreshed(displayLink->m_displayID), 0);
return kCVReturnSuccess;
}
} // namespace WebKit
-#endif
+#endif // ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
Modified: trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.cpp (260613 => 260614)
--- trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.cpp 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.cpp 2020-04-24 01:08:37 UTC (rev 260614)
@@ -42,6 +42,10 @@
#include <WebCore/AsyncScrollingCoordinator.h>
#endif
+#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
+#include <WebCore/DisplayRefreshMonitorManager.h>
+#endif
+
#if ENABLE(SCROLLING_THREAD)
#include <WebCore/ScrollingThread.h>
#include <WebCore/ThreadedScrollingTree.h>
@@ -258,4 +262,13 @@
}
#endif
+#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
+void EventDispatcher::displayWasRefreshed(PlatformDisplayID displayID)
+{
+ RunLoop::main().dispatch([displayID]() {
+ DisplayRefreshMonitorManager::sharedManager().displayWasUpdated(displayID);
+ });
+}
+#endif
+
} // namespace WebKit
Modified: trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.h (260613 => 260614)
--- trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.h 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.h 2020-04-24 01:08:37 UTC (rev 260614)
@@ -43,6 +43,7 @@
namespace WebCore {
class ThreadedScrollingTree;
+using PlatformDisplayID = uint32_t;
}
namespace WebKit {
@@ -97,6 +98,10 @@
static void sendDidReceiveEvent(WebCore::PageIdentifier, WebEvent::Type, bool didHandleEvent);
#endif
+#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
+ void displayWasRefreshed(WebCore::PlatformDisplayID);
+#endif
+
Ref<WorkQueue> m_queue;
#if ENABLE(SCROLLING_THREAD)
Modified: trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.messages.in (260613 => 260614)
--- trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.messages.in 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.messages.in 2020-04-24 01:08:37 UTC (rev 260614)
@@ -28,4 +28,7 @@
#if ENABLE(MAC_GESTURE_EVENTS)
GestureEvent(WebCore::PageIdentifier pageID, WebKit::WebGestureEvent event)
#endif
+#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
+ DisplayWasRefreshed(uint32_t displayID)
+#endif
}
Modified: trunk/Source/WebKit/WebProcess/WebProcess.h (260613 => 260614)
--- trunk/Source/WebKit/WebProcess/WebProcess.h 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/WebProcess/WebProcess.h 2020-04-24 01:08:37 UTC (rev 260614)
@@ -475,7 +475,6 @@
#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
void scrollerStylePreferenceChanged(bool useOverlayScrollbars);
void displayConfigurationChanged(CGDirectDisplayID, CGDisplayChangeSummaryFlags);
- void displayWasRefreshed(CGDirectDisplayID);
#endif
#if PLATFORM(COCOA)
Modified: trunk/Source/WebKit/WebProcess/WebProcess.messages.in (260613 => 260614)
--- trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/WebProcess/WebProcess.messages.in 2020-04-24 01:08:37 UTC (rev 260614)
@@ -119,7 +119,6 @@
#if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
ScrollerStylePreferenceChanged(bool useOvelayScrollbars)
DisplayConfigurationChanged(CGDirectDisplayID displayID, CGDisplayChangeSummaryFlags flags)
- DisplayWasRefreshed(uint32_t displayID)
#endif
#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)
Modified: trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm (260613 => 260614)
--- trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2020-04-24 01:05:34 UTC (rev 260613)
+++ trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm 2020-04-24 01:08:37 UTC (rev 260614)
@@ -875,11 +875,6 @@
{
GraphicsContextGLOpenGLManager::displayWasReconfigured(displayID, flags, nullptr);
}
-
-void WebProcess::displayWasRefreshed(CGDirectDisplayID displayID)
-{
- DisplayRefreshMonitorManager::sharedManager().displayWasUpdated(displayID);
-}
#endif
#if PLATFORM(IOS_FAMILY) && !PLATFORM(MACCATALYST)