Title: [261900] trunk/Source/WebKit
Revision
261900
Author
simon.fra...@apple.com
Date
2020-05-19 18:32:30 -0700 (Tue, 19 May 2020)

Log Message

Use an ObjectIdentifier<> for DisplayLink observer IDs
https://bugs.webkit.org/show_bug.cgi?id=212112

Reviewed by Per Arne Vollan.

Replace unsigned observerID with DisplayLinkObserverID, which is a typesafe ObjectIdentifier<>.

Use PlatformDisplayID in more places.

* Scripts/webkit/messages.py:
* Shared/DisplayLinkObserverID.h: Copied from Source/WebKit/UIProcess/mac/DisplayLink.h.
* UIProcess/Cocoa/WebProcessPoolCocoa.mm:
(WebKit::WebProcessPool::startDisplayLink):
(WebKit::WebProcessPool::stopDisplayLink):
* UIProcess/WebProcessPool.h:
* UIProcess/WebProcessProxy.h:
* UIProcess/WebProcessProxy.messages.in:
* UIProcess/mac/DisplayLink.cpp:
(WebKit::DisplayLink::addObserver):
(WebKit::DisplayLink::removeObserver):
* UIProcess/mac/DisplayLink.h:
* UIProcess/mac/WebProcessProxyMac.mm:
(WebKit::WebProcessProxy::startDisplayLink):
(WebKit::WebProcessProxy::stopDisplayLink):
* WebKit.xcodeproj/project.pbxproj:
* WebProcess/WebPage/mac/DrawingAreaMac.cpp:
(WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (261899 => 261900)


--- trunk/Source/WebKit/ChangeLog	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/ChangeLog	2020-05-20 01:32:30 UTC (rev 261900)
@@ -1,3 +1,33 @@
+2020-05-19  Simon Fraser  <simon.fra...@apple.com>
+
+        Use an ObjectIdentifier<> for DisplayLink observer IDs
+        https://bugs.webkit.org/show_bug.cgi?id=212112
+
+        Reviewed by Per Arne Vollan.
+
+        Replace unsigned observerID with DisplayLinkObserverID, which is a typesafe ObjectIdentifier<>.
+
+        Use PlatformDisplayID in more places.
+
+        * Scripts/webkit/messages.py:
+        * Shared/DisplayLinkObserverID.h: Copied from Source/WebKit/UIProcess/mac/DisplayLink.h.
+        * UIProcess/Cocoa/WebProcessPoolCocoa.mm:
+        (WebKit::WebProcessPool::startDisplayLink):
+        (WebKit::WebProcessPool::stopDisplayLink):
+        * UIProcess/WebProcessPool.h:
+        * UIProcess/WebProcessProxy.h:
+        * UIProcess/WebProcessProxy.messages.in:
+        * UIProcess/mac/DisplayLink.cpp:
+        (WebKit::DisplayLink::addObserver):
+        (WebKit::DisplayLink::removeObserver):
+        * UIProcess/mac/DisplayLink.h:
+        * UIProcess/mac/WebProcessProxyMac.mm:
+        (WebKit::WebProcessProxy::startDisplayLink):
+        (WebKit::WebProcessProxy::stopDisplayLink):
+        * WebKit.xcodeproj/project.pbxproj:
+        * WebProcess/WebPage/mac/DrawingAreaMac.cpp:
+        (WebKit::DisplayRefreshMonitorMac::DisplayRefreshMonitorMac):
+
 2020-05-19  Alex Christensen  <achristen...@webkit.org>
 
         Add _WKDownloadDelegate callback including totalBytesWritten

Modified: trunk/Source/WebKit/Scripts/webkit/messages.py (261899 => 261900)


--- trunk/Source/WebKit/Scripts/webkit/messages.py	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/Scripts/webkit/messages.py	2020-05-20 01:32:30 UTC (rev 261900)
@@ -228,6 +228,7 @@
         'WebKit::ActivityStateChangeID',
         'WebKit::AudioMediaStreamTrackRendererIdentifier',
         'WebKit::ContentWorldIdentifier',
+        'WebKit::DisplayLinkObserverID',
         'WebKit::GeolocationIdentifier',
         'WebKit::ImageBufferBackendHandle',
         'WebKit::ImageBufferFlushIdentifier',

Copied: trunk/Source/WebKit/Shared/DisplayLinkObserverID.h (from rev 261899, trunk/Source/WebKit/UIProcess/mac/DisplayLink.h) (0 => 261900)


--- trunk/Source/WebKit/Shared/DisplayLinkObserverID.h	                        (rev 0)
+++ trunk/Source/WebKit/Shared/DisplayLinkObserverID.h	2020-05-20 01:32:30 UTC (rev 261900)
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/ObjectIdentifier.h>
+
+namespace WebKit {
+
+enum DisplayLinkObserverIDType { };
+using DisplayLinkObserverID = ObjectIdentifier<DisplayLinkObserverIDType>;
+
+} // namespace WebKit

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm (261899 => 261900)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebProcessPoolCocoa.mm	2020-05-20 01:32:30 UTC (rev 261900)
@@ -791,7 +791,7 @@
 }
 
 #if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-void WebProcessPool::startDisplayLink(IPC::Connection& connection, unsigned observerID, uint32_t displayID)
+void WebProcessPool::startDisplayLink(IPC::Connection& connection, DisplayLinkObserverID observerID, PlatformDisplayID displayID)
 {
     for (auto& displayLink : m_displayLinks) {
         if (displayLink->displayID() == displayID) {
@@ -804,7 +804,7 @@
     m_displayLinks.append(WTFMove(displayLink));
 }
 
-void WebProcessPool::stopDisplayLink(IPC::Connection& connection, unsigned observerID, uint32_t displayID)
+void WebProcessPool::stopDisplayLink(IPC::Connection& connection, DisplayLinkObserverID observerID, PlatformDisplayID displayID)
 {
     for (auto& displayLink : m_displayLinks) {
         if (displayLink->displayID() == displayID) {

Modified: trunk/Source/WebKit/UIProcess/WebProcessPool.h (261899 => 261900)


--- trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/WebProcessPool.h	2020-05-20 01:32:30 UTC (rev 261900)
@@ -249,8 +249,8 @@
 #endif
 
 #if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-    void startDisplayLink(IPC::Connection&, unsigned observerID, uint32_t displayID);
-    void stopDisplayLink(IPC::Connection&, unsigned observerID, uint32_t displayID);
+    void startDisplayLink(IPC::Connection&, DisplayLinkObserverID, WebCore::PlatformDisplayID);
+    void stopDisplayLink(IPC::Connection&, DisplayLinkObserverID, WebCore::PlatformDisplayID);
     void stopDisplayLinks(IPC::Connection&);
 #endif
 

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.h (261899 => 261900)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.h	2020-05-20 01:32:30 UTC (rev 261900)
@@ -28,6 +28,7 @@
 #include "APIUserInitiatedAction.h"
 #include "AuxiliaryProcessProxy.h"
 #include "BackgroundProcessResponsivenessTimer.h"
+#include "DisplayLinkObserverID.h"
 #include "MessageReceiverMap.h"
 #include "NetworkProcessProxy.h"
 #include "PluginInfoStore.h"
@@ -74,6 +75,7 @@
 struct PrewarmInformation;
 struct SecurityOriginData;
 enum class ThirdPartyCookieBlockingMode : uint8_t;
+using PlatformDisplayID = uint32_t;
 }
 
 namespace WebKit {
@@ -281,8 +283,8 @@
 #endif
 
 #if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-    void startDisplayLink(unsigned observerID, uint32_t displayID);
-    void stopDisplayLink(unsigned observerID, uint32_t displayID);
+    void startDisplayLink(DisplayLinkObserverID, WebCore::PlatformDisplayID);
+    void stopDisplayLink(DisplayLinkObserverID, WebCore::PlatformDisplayID);
 #endif
 
     // Called when the web process has crashed or we know that it will terminate soon.

Modified: trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in (261899 => 261900)


--- trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/WebProcessProxy.messages.in	2020-05-20 01:32:30 UTC (rev 261900)
@@ -66,8 +66,8 @@
 #endif
 
 #if PLATFORM(MAC) && ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-    StartDisplayLink(unsigned observerID, uint32_t displayID)
-    StopDisplayLink(unsigned observerID, uint32_t displayID)
+    StartDisplayLink(WebKit::DisplayLinkObserverID observerID, uint32_t displayID)
+    StopDisplayLink(WebKit::DisplayLinkObserverID observerID, uint32_t displayID)
 #endif
 
     # Plug-in messages.

Modified: trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp (261899 => 261900)


--- trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/mac/DisplayLink.cpp	2020-05-20 01:32:30 UTC (rev 261900)
@@ -61,7 +61,7 @@
     CVDisplayLinkRelease(m_displayLink);
 }
 
-void DisplayLink::addObserver(IPC::Connection& connection, unsigned observerID)
+void DisplayLink::addObserver(IPC::Connection& connection, DisplayLinkObserverID observerID)
 {
     ASSERT(RunLoop::isMain());
     bool isRunning = !m_observers.isEmpty();
@@ -69,7 +69,7 @@
     {
         LockHolder locker(m_observersLock);
         m_observers.ensure(&connection, [] {
-            return Vector<unsigned> { };
+            return Vector<DisplayLinkObserverID> { };
         }).iterator->value.append(observerID);
     }
 
@@ -80,7 +80,7 @@
     }
 }
 
-void DisplayLink::removeObserver(IPC::Connection& connection, unsigned observerID)
+void DisplayLink::removeObserver(IPC::Connection& connection, DisplayLinkObserverID observerID)
 {
     ASSERT(RunLoop::isMain());
 

Modified: trunk/Source/WebKit/UIProcess/mac/DisplayLink.h (261899 => 261900)


--- trunk/Source/WebKit/UIProcess/mac/DisplayLink.h	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/mac/DisplayLink.h	2020-05-20 01:32:30 UTC (rev 261900)
@@ -27,6 +27,7 @@
 
 #if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
 
+#include "DisplayLinkObserverID.h"
 #include <CoreVideo/CVDisplayLink.h>
 #include <WebCore/PlatformScreen.h>
 #include <wtf/HashMap.h>
@@ -44,8 +45,8 @@
     explicit DisplayLink(WebCore::PlatformDisplayID);
     ~DisplayLink();
     
-    void addObserver(IPC::Connection&, unsigned observerID);
-    void removeObserver(IPC::Connection&, unsigned observerID);
+    void addObserver(IPC::Connection&, DisplayLinkObserverID);
+    void removeObserver(IPC::Connection&, DisplayLinkObserverID);
     void removeObservers(IPC::Connection&);
     bool hasObservers() const;
 
@@ -56,7 +57,7 @@
     
     CVDisplayLinkRef m_displayLink { nullptr };
     Lock m_observersLock;
-    HashMap<RefPtr<IPC::Connection>, Vector<unsigned>> m_observers;
+    HashMap<RefPtr<IPC::Connection>, Vector<DisplayLinkObserverID>> m_observers;
     WebCore::PlatformDisplayID m_displayID;
 };
 

Modified: trunk/Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm (261899 => 261900)


--- trunk/Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/UIProcess/mac/WebProcessProxyMac.mm	2020-05-20 01:32:30 UTC (rev 261900)
@@ -60,7 +60,7 @@
 }
 
 #if ENABLE(WEBPROCESS_WINDOWSERVER_BLOCKING)
-void WebProcessProxy::startDisplayLink(unsigned observerID, uint32_t displayID)
+void WebProcessProxy::startDisplayLink(DisplayLinkObserverID observerID, WebCore::PlatformDisplayID displayID)
 {
     ASSERT(hasProcessPrivilege(ProcessPrivilege::CanCommunicateWithWindowServer));
     ASSERT(connection());
@@ -67,7 +67,7 @@
     processPool().startDisplayLink(*connection(), observerID, displayID);
 }
 
-void WebProcessProxy::stopDisplayLink(unsigned observerID, uint32_t displayID)
+void WebProcessProxy::stopDisplayLink(DisplayLinkObserverID observerID, WebCore::PlatformDisplayID displayID)
 {
     ASSERT(connection());
     processPool().stopDisplayLink(*connection(), observerID, displayID);

Modified: trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj (261899 => 261900)


--- trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj	2020-05-20 01:32:30 UTC (rev 261900)
@@ -112,6 +112,7 @@
 		0F08CF521D63C13A00B48DF1 /* WKFormSelectPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F08CF511D63C13A00B48DF1 /* WKFormSelectPicker.h */; };
 		0F08CF541D63C14000B48DF1 /* WKFormSelectPopover.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F08CF531D63C14000B48DF1 /* WKFormSelectPopover.h */; };
 		0F174AA3142A4CB70039250F /* APIGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F174AA2142A4CB60039250F /* APIGeometry.h */; };
+		0F189CAC24749F2F00E58D81 /* DisplayLinkObserverID.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F189CAB24749F2F00E58D81 /* DisplayLinkObserverID.h */; };
 		0F3C725B196F604E00AEDD0C /* WKInspectorHighlightView.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3C7259196F5F6800AEDD0C /* WKInspectorHighlightView.h */; };
 		0F45A331239D89A100294ABF /* WKWebViewPrivateForTestingIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F45A32F239D89A000294ABF /* WKWebViewPrivateForTestingIOS.h */; settings = {ATTRIBUTES = (Private, ); }; };
 		0F45A335239D89AF00294ABF /* WKWebViewPrivateForTestingMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F45A333239D89AF00294ABF /* WKWebViewPrivateForTestingMac.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -2200,6 +2201,7 @@
 		0F11781422E39BE6008BD570 /* TransactionID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TransactionID.h; sourceTree = "<group>"; };
 		0F174AA2142A4CB60039250F /* APIGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = APIGeometry.h; sourceTree = "<group>"; };
 		0F174AA6142AAC610039250F /* WKGeometry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKGeometry.cpp; sourceTree = "<group>"; };
+		0F189CAB24749F2F00E58D81 /* DisplayLinkObserverID.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DisplayLinkObserverID.h; sourceTree = "<group>"; };
 		0F3C7257196F5F5000AEDD0C /* WKInspectorHighlightView.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = WKInspectorHighlightView.mm; sourceTree = "<group>"; };
 		0F3C7259196F5F6800AEDD0C /* WKInspectorHighlightView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKInspectorHighlightView.h; sourceTree = "<group>"; };
 		0F45A32F239D89A000294ABF /* WKWebViewPrivateForTestingIOS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKWebViewPrivateForTestingIOS.h; sourceTree = "<group>"; };
@@ -6031,6 +6033,7 @@
 				99F642D21FABE378009621E9 /* CoordinateSystem.h */,
 				99036AE823A970870000B06A /* DebuggableInfoData.cpp */,
 				99036AE723A970870000B06A /* DebuggableInfoData.h */,
+				0F189CAB24749F2F00E58D81 /* DisplayLinkObserverID.h */,
 				2D7FD190223C730F007887F1 /* DocumentEditingContext.h */,
 				2D7FD191223C7310007887F1 /* DocumentEditingContext.mm */,
 				C517388012DF8F4F00EE3F47 /* DragControllerAction.h */,
@@ -10782,6 +10785,7 @@
 				2DAADA8F2298C21000E36B0C /* DeviceManagementSPI.h in Headers */,
 				83891B6C1A68C30B0030F386 /* DiagnosticLoggingClient.h in Headers */,
 				C18173612058424700DFDA65 /* DisplayLink.h in Headers */,
+				0F189CAC24749F2F00E58D81 /* DisplayLinkObserverID.h in Headers */,
 				5C1427021C23F84C00D41183 /* Download.h in Headers */,
 				A1DF631318E0B7C8003A3E2A /* DownloadClient.h in Headers */,
 				5C1427051C23F84C00D41183 /* DownloadID.h in Headers */,

Modified: trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp (261899 => 261900)


--- trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp	2020-05-20 01:15:40 UTC (rev 261899)
+++ trunk/Source/WebKit/WebProcess/WebPage/mac/DrawingAreaMac.cpp	2020-05-20 01:32:30 UTC (rev 261900)
@@ -55,18 +55,15 @@
     
     bool hasRequestedRefreshCallback() const override { return m_hasSentMessage; }
 
+    DisplayLinkObserverID m_observerID;
+    std::unique_ptr<RunLoopObserver> m_runLoopObserver;
     bool m_hasSentMessage { false };
-    unsigned m_observerID;
-    static unsigned m_counterID;
-    std::unique_ptr<RunLoopObserver> m_runLoopObserver;
     bool m_firstCallbackInCurrentRunloop { false };
 };
 
-unsigned DisplayRefreshMonitorMac::m_counterID = 0;
-
 DisplayRefreshMonitorMac::DisplayRefreshMonitorMac(PlatformDisplayID displayID)
     : DisplayRefreshMonitor(displayID)
-    , m_observerID(++m_counterID)
+    , m_observerID(DisplayLinkObserverID::generate())
 {
 }
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to