Changeset 260614 in webkit


Ignore:
Timestamp:
Apr 23, 2020 6:08:37 PM (4 years ago)
Author:
Simon Fraser
Message:

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):

Location:
trunk/Source/WebKit
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r260611 r260614  
     12020-04-23  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Bounce displayWasRefreshed() via EventDispatcher
     4        https://bugs.webkit.org/show_bug.cgi?id=208778
     5
     6        Reviewed by Antti Koivisto.
     7
     8        Allow the WebContent process to be notified of display refresh off the main thread, so other
     9        threads like the scrolling thread can respond without being blocked. Achieve this
     10        by having EventDispatcher receive the IPC message, then bounce it to the main thread.
     11
     12        * UIProcess/mac/DisplayLink.cpp:
     13        (WebKit::DisplayLink::displayLinkCallback):
     14        * WebProcess/WebPage/EventDispatcher.cpp:
     15        (WebKit::EventDispatcher::displayWasRefreshed):
     16        * WebProcess/WebPage/EventDispatcher.h:
     17        * WebProcess/WebPage/EventDispatcher.messages.in:
     18        * WebProcess/WebProcess.h:
     19        * WebProcess/cocoa/WebProcessCocoa.mm:
     20        (WebKit::WebProcess::displayWasRefreshed):
     21
    1222020-04-23  David Kilzer  <ddkilzer@apple.com>
    223
  • trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp

    r241232 r260614  
    2929#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
    3030
    31 #include "WebProcessMessages.h"
     31#include "EventDispatcherMessages.h"
    3232#include <wtf/ProcessPrivilege.h>
    3333
     
    125125    LockHolder locker(displayLink->m_observersLock);
    126126    for (auto& connection : displayLink->m_observers.keys())
    127         connection->send(Messages::WebProcess::DisplayWasRefreshed(displayLink->m_displayID), 0);
     127        connection->send(Messages::EventDispatcher::DisplayWasRefreshed(displayLink->m_displayID), 0);
    128128    return kCVReturnSuccess;
    129129}
     
    131131} // namespace WebKit
    132132
    133 #endif
     133#endif // ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
  • trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.cpp

    r260403 r260614  
    4343#endif
    4444
     45#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
     46#include <WebCore/DisplayRefreshMonitorManager.h>
     47#endif
     48
    4549#if ENABLE(SCROLLING_THREAD)
    4650#include <WebCore/ScrollingThread.h>
     
    259263#endif
    260264
     265#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
     266void EventDispatcher::displayWasRefreshed(PlatformDisplayID displayID)
     267{
     268    RunLoop::main().dispatch([displayID]() {
     269        DisplayRefreshMonitorManager::sharedManager().displayWasUpdated(displayID);
     270    });
     271}
     272#endif
     273
    261274} // namespace WebKit
  • trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.h

    r259805 r260614  
    4444namespace WebCore {
    4545class ThreadedScrollingTree;
     46using PlatformDisplayID = uint32_t;
    4647}
    4748
     
    9899#endif
    99100
     101#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
     102    void displayWasRefreshed(WebCore::PlatformDisplayID);
     103#endif
     104
    100105    Ref<WorkQueue> m_queue;
    101106
  • trunk/Source/WebKit/WebProcess/WebPage/EventDispatcher.messages.in

    r253267 r260614  
    2929    GestureEvent(WebCore::PageIdentifier pageID, WebKit::WebGestureEvent event)
    3030#endif
     31#if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
     32    DisplayWasRefreshed(uint32_t displayID)
     33#endif
    3134}
  • trunk/Source/WebKit/WebProcess/WebProcess.h

    r260065 r260614  
    476476    void scrollerStylePreferenceChanged(bool useOverlayScrollbars);
    477477    void displayConfigurationChanged(CGDirectDisplayID, CGDisplayChangeSummaryFlags);
    478     void displayWasRefreshed(CGDirectDisplayID);
    479478#endif
    480479
  • trunk/Source/WebKit/WebProcess/WebProcess.messages.in

    r260065 r260614  
    120120    ScrollerStylePreferenceChanged(bool useOvelayScrollbars)
    121121    DisplayConfigurationChanged(CGDirectDisplayID displayID, CGDisplayChangeSummaryFlags flags)
    122     DisplayWasRefreshed(uint32_t displayID)
    123122#endif
    124123
  • trunk/Source/WebKit/WebProcess/cocoa/WebProcessCocoa.mm

    r260485 r260614  
    876876    GraphicsContextGLOpenGLManager::displayWasReconfigured(displayID, flags, nullptr);
    877877}
    878    
    879 void WebProcess::displayWasRefreshed(CGDirectDisplayID displayID)
    880 {
    881     DisplayRefreshMonitorManager::sharedManager().displayWasUpdated(displayID);
    882 }
    883878#endif
    884879
Note: See TracChangeset for help on using the changeset viewer.