- Revision
- 272326
- Author
- [email protected]
- Date
- 2021-02-03 10:34:36 -0800 (Wed, 03 Feb 2021)
Log Message
[iOS] delay `+[BKSMousePointerService sharedInstance]` so that it doesn't impact launch perf
https://bugs.webkit.org/show_bug.cgi?id=221298
Reviewed by Geoffrey Garen.
Source/WebKit:
* UIProcess/ios/WKMouseDeviceObserver.h:
* UIProcess/ios/WKMouseDeviceObserver.mm:
(-[WKMouseDeviceObserver init]): Added.
(-[WKMouseDeviceObserver startWithCompletionHandler:]): Added.
(-[WKMouseDeviceObserver start]):
(-[WKMouseDeviceObserver stop]):
(-[WKMouseDeviceObserver stopWithCompletionHandler:]): Added.
Tools:
* TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
(iOSMouseSupport.MouseInitiallyDisconnected):
(iOSMouseSupport.MouseInitiallyConnected):
(iOSMouseSupport.MouseLaterDisconnected):
(iOSMouseSupport.MouseLaterConnected):
Modified Paths
Diff
Modified: trunk/Source/WebKit/ChangeLog (272325 => 272326)
--- trunk/Source/WebKit/ChangeLog 2021-02-03 18:26:19 UTC (rev 272325)
+++ trunk/Source/WebKit/ChangeLog 2021-02-03 18:34:36 UTC (rev 272326)
@@ -1,3 +1,18 @@
+2021-02-03 Devin Rousso <[email protected]>
+
+ [iOS] delay `+[BKSMousePointerService sharedInstance]` so that it doesn't impact launch perf
+ https://bugs.webkit.org/show_bug.cgi?id=221298
+
+ Reviewed by Geoffrey Garen.
+
+ * UIProcess/ios/WKMouseDeviceObserver.h:
+ * UIProcess/ios/WKMouseDeviceObserver.mm:
+ (-[WKMouseDeviceObserver init]): Added.
+ (-[WKMouseDeviceObserver startWithCompletionHandler:]): Added.
+ (-[WKMouseDeviceObserver start]):
+ (-[WKMouseDeviceObserver stop]):
+ (-[WKMouseDeviceObserver stopWithCompletionHandler:]): Added.
+
2021-02-03 Youenn Fablet <[email protected]>
Make sure GPUProcess MediaRecorder handles correctly muted tracks
Modified: trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.h (272325 => 272326)
--- trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.h 2021-02-03 18:26:19 UTC (rev 272325)
+++ trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.h 2021-02-03 18:34:36 UTC (rev 272326)
@@ -38,7 +38,9 @@
- (instancetype)init NS_UNAVAILABLE;
- (void)start;
+- (void)startWithCompletionHandler:(void (^)(void))completionHandler;
- (void)stop;
+- (void)stopWithCompletionHandler:(void (^)(void))completionHandler;
@property (nonatomic, readonly) BOOL hasMouseDevice;
Modified: trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.mm (272325 => 272326)
--- trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.mm 2021-02-03 18:26:19 UTC (rev 272325)
+++ trunk/Source/WebKit/UIProcess/ios/WKMouseDeviceObserver.mm 2021-02-03 18:34:36 UTC (rev 272326)
@@ -29,6 +29,8 @@
#if HAVE(UIKIT_WITH_MOUSE_SUPPORT) && PLATFORM(IOS)
#import "WebProcessProxy.h"
+#import <wtf/BlockPtr.h>
+#import <wtf/OSObjectPtr.h>
#import <wtf/RetainPtr.h>
@implementation WKMouseDeviceObserver {
@@ -35,6 +37,7 @@
BOOL _hasMouseDevice;
size_t _startCount;
RetainPtr<id<BSInvalidatable>> _token;
+ OSObjectPtr<dispatch_queue_t> _deviceObserverTokenQueue;
}
+ (WKMouseDeviceObserver *)sharedInstance
@@ -45,26 +48,54 @@
return instance;
}
+- (instancetype)init
+{
+ if (!(self = [super init]))
+ return nil;
+
+ _deviceObserverTokenQueue = adoptOSObject(dispatch_queue_create("WKMouseDeviceObserver _deviceObserverTokenQueue", DISPATCH_QUEUE_SERIAL));
+
+ return self;
+}
+
#pragma mark - BKSMousePointerDeviceObserver state
- (void)start
{
+ [self startWithCompletionHandler:^{ }];
+}
+
+- (void)startWithCompletionHandler:(void (^)(void))completionHandler
+{
if (++_startCount > 1)
return;
- ASSERT(!_token);
- _token = [[BKSMousePointerService sharedInstance] addPointerDeviceObserver:self];
+ dispatch_async(_deviceObserverTokenQueue.get(), [strongSelf = retainPtr(self), completionHandler = makeBlockPtr(completionHandler)] {
+ ASSERT(!strongSelf->_token);
+ strongSelf->_token = [[BKSMousePointerService sharedInstance] addPointerDeviceObserver:strongSelf.get()];
+
+ completionHandler();
+ });
}
- (void)stop
{
+ [self stopWithCompletionHandler:^{ }];
+}
+
+- (void)stopWithCompletionHandler:(void (^)(void))completionHandler
+{
ASSERT(_startCount);
if (!_startCount || --_startCount)
return;
- ASSERT(_token);
- [_token invalidate];
- _token = nil;
+ dispatch_async(_deviceObserverTokenQueue.get(), [strongSelf = retainPtr(self), completionHandler = makeBlockPtr(completionHandler)] {
+ ASSERT(strongSelf->_token);
+ [strongSelf->_token invalidate];
+ strongSelf->_token = nil;
+
+ completionHandler();
+ });
}
#pragma mark - BKSMousePointerDeviceObserver handlers
Modified: trunk/Tools/ChangeLog (272325 => 272326)
--- trunk/Tools/ChangeLog 2021-02-03 18:26:19 UTC (rev 272325)
+++ trunk/Tools/ChangeLog 2021-02-03 18:34:36 UTC (rev 272326)
@@ -1,3 +1,16 @@
+2021-02-03 Devin Rousso <[email protected]>
+
+ [iOS] delay `+[BKSMousePointerService sharedInstance]` so that it doesn't impact launch perf
+ https://bugs.webkit.org/show_bug.cgi?id=221298
+
+ Reviewed by Geoffrey Garen.
+
+ * TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm:
+ (iOSMouseSupport.MouseInitiallyDisconnected):
+ (iOSMouseSupport.MouseInitiallyConnected):
+ (iOSMouseSupport.MouseLaterDisconnected):
+ (iOSMouseSupport.MouseLaterConnected):
+
2021-02-03 Alex Christensen <[email protected]>
Flaky API Test: TestWebKitAPI.WebKitLegacy.CrossPartitionFileSchemeAccess
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm (272325 => 272326)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm 2021-02-03 18:26:19 UTC (rev 272325)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitCocoa/iOSMouseSupport.mm 2021-02-03 18:34:36 UTC (rev 272326)
@@ -306,7 +306,7 @@
@interface WKMouseDeviceObserver
+ (WKMouseDeviceObserver *)sharedInstance;
-- (void)start;
+- (void)startWithCompletionHandler:(void (^)(void))completionHandler;
- (void)_setHasMouseDeviceForTesting:(BOOL)hasMouseDevice;
@end
@@ -313,7 +313,13 @@
TEST(iOSMouseSupport, MouseInitiallyDisconnected)
{
WKMouseDeviceObserver *mouseDeviceObserver = [NSClassFromString(@"WKMouseDeviceObserver") sharedInstance];
- [mouseDeviceObserver start];
+
+ __block bool didStartMouseDeviceObserver = false;
+ [mouseDeviceObserver startWithCompletionHandler:^{
+ didStartMouseDeviceObserver = true;
+ }];
+ TestWebKitAPI::Util::run(&didStartMouseDeviceObserver);
+
[mouseDeviceObserver _setHasMouseDeviceForTesting:NO];
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
@@ -342,7 +348,13 @@
TEST(iOSMouseSupport, MouseInitiallyConnected)
{
WKMouseDeviceObserver *mouseDeviceObserver = [NSClassFromString(@"WKMouseDeviceObserver") sharedInstance];
- [mouseDeviceObserver start];
+
+ __block bool didStartMouseDeviceObserver = false;
+ [mouseDeviceObserver startWithCompletionHandler:^{
+ didStartMouseDeviceObserver = true;
+ }];
+ TestWebKitAPI::Util::run(&didStartMouseDeviceObserver);
+
[mouseDeviceObserver _setHasMouseDeviceForTesting:YES];
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
@@ -371,7 +383,13 @@
TEST(iOSMouseSupport, MouseLaterDisconnected)
{
WKMouseDeviceObserver *mouseDeviceObserver = [NSClassFromString(@"WKMouseDeviceObserver") sharedInstance];
- [mouseDeviceObserver start];
+
+ __block bool didStartMouseDeviceObserver = false;
+ [mouseDeviceObserver startWithCompletionHandler:^{
+ didStartMouseDeviceObserver = true;
+ }];
+ TestWebKitAPI::Util::run(&didStartMouseDeviceObserver);
+
[mouseDeviceObserver _setHasMouseDeviceForTesting:YES];
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
@@ -402,7 +420,13 @@
TEST(iOSMouseSupport, MouseLaterConnected)
{
WKMouseDeviceObserver *mouseDeviceObserver = [NSClassFromString(@"WKMouseDeviceObserver") sharedInstance];
- [mouseDeviceObserver start];
+
+ __block bool didStartMouseDeviceObserver = false;
+ [mouseDeviceObserver startWithCompletionHandler:^{
+ didStartMouseDeviceObserver = true;
+ }];
+ TestWebKitAPI::Util::run(&didStartMouseDeviceObserver);
+
[mouseDeviceObserver _setHasMouseDeviceForTesting:NO];
auto webView = adoptNS([[TestWKWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);