diff --git a/Libraries/Devtools/setupDevtools.js b/Libraries/Devtools/setupDevtools.js index 4f75be24f..e55810d8c 100644 --- a/Libraries/Devtools/setupDevtools.js +++ b/Libraries/Devtools/setupDevtools.js @@ -40,7 +40,7 @@ function setupDevtools() { function handleClose() { if (!hasClosed) { hasClosed = true; - setTimeout(setupDevtools, 200); + setTimeout(setupDevtools, 2000); closeListeners.forEach(fn => fn()); } } diff --git a/Libraries/WebSocket/RCTSRWebSocket.m b/Libraries/WebSocket/RCTSRWebSocket.m index fe02d0697..54ebbc552 100644 --- a/Libraries/WebSocket/RCTSRWebSocket.m +++ b/Libraries/WebSocket/RCTSRWebSocket.m @@ -48,8 +48,27 @@ typedef struct { static NSString *const RCTSRWebSocketAppendToSecKeyString = @"258EAFA5-E914-47DA-95CA-C5AB0DC85B11"; -static inline int32_t validate_dispatch_data_partial_string(NSData *data); -static inline void RCTSRFastLog(NSString *format, ...); +//#define RCTSR_ENABLE_LOG +#ifdef RCTSR_ENABLE_LOG +#define RCTSRLog(format...) RCTLogInfo(format) +#else +#define RCTSRLog(...) do { } while (0) +#endif + +// This is a hack, and probably not optimal +static inline int32_t validate_dispatch_data_partial_string(NSData *data) +{ + static const int maxCodepointSize = 3; + + for (int i = 0; i < maxCodepointSize; i++) { + NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes length:data.length - i encoding:NSUTF8StringEncoding freeWhenDone:NO]; + if (str) { + return (int32_t)data.length - i; + } + } + + return -1; +} @interface NSData (RCTSRWebSocket) @@ -306,7 +325,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) _consumerStopped = YES; _webSocketVersion = 13; - _workQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL); + _workQueue = dispatch_queue_create("com.facebook.react.SRWebSocket", DISPATCH_QUEUE_SERIAL); // Going to set a specific on the queue so we can validate we're on the work queue dispatch_queue_set_specific(_workQueue, (__bridge void *)self, (__bridge void *)_workQueue, NULL); @@ -411,7 +430,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) NSInteger responseCode = CFHTTPMessageGetResponseStatusCode(_receivedHTTPHeaders); if (responseCode >= 400) { - RCTSRFastLog(@"Request failed with response code %d", responseCode); + RCTSRLog(@"Request failed with response code %ld", responseCode); [self _failWithError:[NSError errorWithDomain:RCTSRWebSocketErrorDomain code:2132 userInfo:@{NSLocalizedDescriptionKey:[NSString stringWithFormat:@"received bad response code from server %ld", (long)responseCode], RCTSRHTTPResponseErrorKey:@(responseCode)}]]; return; } @@ -455,7 +474,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) CFHTTPMessageAppendBytes(_receivedHTTPHeaders, (const UInt8 *)data.bytes, data.length); if (CFHTTPMessageIsHeaderComplete(_receivedHTTPHeaders)) { - RCTSRFastLog(@"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(_receivedHTTPHeaders))); + RCTSRLog(@"Finished reading headers %@", CFBridgingRelease(CFHTTPMessageCopyAllHeaderFields(_receivedHTTPHeaders))); [socket _HTTPHeadersDidFinish]; } else { [socket _readHTTPHeader]; @@ -465,7 +484,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) - (void)didConnect { - RCTSRFastLog(@"Connected"); + RCTSRLog(@"Connected"); CFHTTPMessageRef request = CFHTTPMessageCreateRequest(NULL, CFSTR("GET"), (__bridge CFURLRef)_url, kCFHTTPVersion1_1); // Set host first so it defaults @@ -587,7 +606,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) self.readyState = RCTSR_CLOSING; - RCTSRFastLog(@"Closing with code %d reason %@", code, reason); + RCTSRLog(@"Closing with code %ld reason %@", code, reason); if (wasConnecting) { [self _disconnect]; @@ -644,7 +663,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) self.readyState = RCTSR_CLOSED; _selfRetain = nil; - RCTSRFastLog(@"Failing with error %@", error.localizedDescription); + RCTSRLog(@"Failing with error %@", error.localizedDescription); [self _disconnect]; } @@ -702,7 +721,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) - (void)handlePong:(NSData *)pongData; { - RCTSRFastLog(@"Received pong"); + RCTSRLog(@"Received pong"); [self _performDelegateBlock:^{ if ([self.delegate respondsToSelector:@selector(webSocket:didReceivePong:)]) { [self.delegate webSocket:self didReceivePong:pongData]; @@ -712,7 +731,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init) - (void)_handleMessage:(id)message { - RCTSRFastLog(@"Received message"); + RCTSRLog(@"Received message"); [self _performDelegateBlock:^{ [self.delegate webSocket:self didReceiveMessage:message]; }]; @@ -758,7 +777,7 @@ static inline BOOL closeCodeIsValid(int closeCode) size_t dataSize = data.length; __block uint16_t closeCode = 0; - RCTSRFastLog(@"Received close frame"); + RCTSRLog(@"Received close frame"); if (dataSize == 1) { // TODO: handle error @@ -795,7 +814,7 @@ static inline BOOL closeCodeIsValid(int closeCode) - (void)_disconnect; { [self assertOnWorkQueue]; - RCTSRFastLog(@"Trying to disconnect"); + RCTSRLog(@"Trying to disconnect"); _closeWhenFinishedWriting = YES; [self _pumpWriting]; } @@ -1241,9 +1260,7 @@ static const char CRLFCRLFBytes[] = {'\r', '\n', '\r', '\n'}; return; } - while ([self _innerPumpScanner]) { - - } + while ([self _innerPumpScanner]) {} _isPumping = NO; } @@ -1333,7 +1350,6 @@ static const size_t RCTSRFrameHeaderOverhead = 32; - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode; { if (_secure && !_pinnedCertFound && (eventCode == NSStreamEventHasBytesAvailable || eventCode == NSStreamEventHasSpaceAvailable)) { - NSArray *sslCerts = _urlRequest.RCTSR_SSLPinnedCertificates; if (sslCerts) { SecTrustRef secTrust = (__bridge SecTrustRef)[aStream propertyForKey:(__bridge id)kCFStreamPropertySSLPeerTrust]; @@ -1364,10 +1380,11 @@ static const size_t RCTSRFrameHeaderOverhead = 32; } } + assert(_workQueue != NULL); dispatch_async(_workQueue, ^{ switch (eventCode) { case NSStreamEventOpenCompleted: { - RCTSRFastLog(@"NSStreamEventOpenCompleted %@", aStream); + RCTSRLog(@"NSStreamEventOpenCompleted %@", aStream); if (self.readyState >= RCTSR_CLOSING) { return; } @@ -1382,7 +1399,7 @@ static const size_t RCTSRFrameHeaderOverhead = 32; } case NSStreamEventErrorOccurred: { - RCTSRFastLog(@"NSStreamEventErrorOccurred %@ %@", aStream, [aStream.streamError copy]); + RCTSRLog(@"NSStreamEventErrorOccurred %@ %@", aStream, [aStream.streamError copy]); // TODO: specify error better! [self _failWithError:aStream.streamError]; _readBufferOffset = 0; @@ -1393,7 +1410,7 @@ static const size_t RCTSRFrameHeaderOverhead = 32; case NSStreamEventEndEncountered: { [self _pumpScanner]; - RCTSRFastLog(@"NSStreamEventEndEncountered %@", aStream); + RCTSRLog(@"NSStreamEventEndEncountered %@", aStream); if (aStream.streamError) { [self _failWithError:aStream.streamError]; } else { @@ -1419,7 +1436,7 @@ static const size_t RCTSRFrameHeaderOverhead = 32; } case NSStreamEventHasBytesAvailable: { - RCTSRFastLog(@"NSStreamEventHasBytesAvailable %@", aStream); + RCTSRLog(@"NSStreamEventHasBytesAvailable %@", aStream); const int bufferSize = 2048; uint8_t buffer[bufferSize]; @@ -1441,13 +1458,13 @@ static const size_t RCTSRFrameHeaderOverhead = 32; } case NSStreamEventHasSpaceAvailable: { - RCTSRFastLog(@"NSStreamEventHasSpaceAvailable %@", aStream); + RCTSRLog(@"NSStreamEventHasSpaceAvailable %@", aStream); [self _pumpWriting]; break; } default: - RCTSRFastLog(@"(default) %@", aStream); + RCTSRLog(@"(default) %@", aStream); break; } }); @@ -1557,37 +1574,6 @@ static const size_t RCTSRFrameHeaderOverhead = 32; @end -//#define RCTSR_ENABLE_LOG - -static inline void RCTSRFastLog(NSString *format, ...) -{ -#ifdef RCTSR_ENABLE_LOG - __block va_list arg_list; - va_start (arg_list, format); - - NSString *formattedString = [[NSString alloc] initWithFormat:format arguments:arg_list]; - - va_end(arg_list); - - RCTLogInfo(@"[RCTSR] %@", formattedString); -#endif -} - -// This is a hack, and probably not optimal -static inline int32_t validate_dispatch_data_partial_string(NSData *data) -{ - static const int maxCodepointSize = 3; - - for (int i = 0; i < maxCodepointSize; i++) { - NSString *str = [[NSString alloc] initWithBytesNoCopy:(char *)data.bytes length:data.length - i encoding:NSUTF8StringEncoding freeWhenDone:NO]; - if (str) { - return (int32_t)data.length - i; - } - } - - return -1; -} - static _RCTSRRunLoopThread *networkThread = nil; static NSRunLoop *networkRunLoop = nil; diff --git a/Libraries/WebSocket/RCTWebSocketExecutor.m b/Libraries/WebSocket/RCTWebSocketExecutor.m index de26e8a91..7b78d2942 100644 --- a/Libraries/WebSocket/RCTWebSocketExecutor.m +++ b/Libraries/WebSocket/RCTWebSocketExecutor.m @@ -55,7 +55,7 @@ RCT_EXPORT_MODULE() _url = [RCTConvert NSURL:URLString]; } - _jsQueue = dispatch_queue_create("com.facebook.React.WebSocketExecutor", DISPATCH_QUEUE_SERIAL); + _jsQueue = dispatch_queue_create("com.facebook.react.WebSocketExecutor", DISPATCH_QUEUE_SERIAL); _socket = [[RCTSRWebSocket alloc] initWithURL:_url]; _socket.delegate = self; _callbacks = [NSMutableDictionary new]; diff --git a/Libraries/WebSocket/RCTWebSocketManager.m b/Libraries/WebSocket/RCTWebSocketManager.m index 7288dda09..eaf67d78e 100644 --- a/Libraries/WebSocket/RCTWebSocketManager.m +++ b/Libraries/WebSocket/RCTWebSocketManager.m @@ -133,7 +133,7 @@ { if ((self = [super init])) { _sockets = [NSMutableDictionary new]; - _queue = dispatch_queue_create("com.facebook.React.WebSocketManager", DISPATCH_QUEUE_SERIAL); + _queue = dispatch_queue_create("com.facebook.react.WebSocketManager", DISPATCH_QUEUE_SERIAL); } return self; } diff --git a/React/Base/RCTBatchedBridge.m b/React/Base/RCTBatchedBridge.m index 86326ee7b..2f8610e34 100644 --- a/React/Base/RCTBatchedBridge.m +++ b/React/Base/RCTBatchedBridge.m @@ -26,7 +26,7 @@ #define RCTAssertJSThread() \ RCTAssert(![NSStringFromClass([_javaScriptExecutor class]) isEqualToString:@"RCTJSCExecutor"] || \ - [[[NSThread currentThread] name] isEqualToString:@"com.facebook.React.JavaScript"], \ + [[[NSThread currentThread] name] isEqualToString:RCTJSCThreadName], \ @"This method must be called on JS thread") /** diff --git a/React/Base/RCTModuleData.m b/React/Base/RCTModuleData.m index d29441b40..8daaba591 100644 --- a/React/Base/RCTModuleData.m +++ b/React/Base/RCTModuleData.m @@ -157,7 +157,7 @@ RCT_NOT_IMPLEMENTED(- (instancetype)init); if (!_methodQueue && _bridge.valid) { // Create new queue (store queueName, as it isn't retained by dispatch_queue) - _queueName = [NSString stringWithFormat:@"com.facebook.React.%@Queue", self.name]; + _queueName = [NSString stringWithFormat:@"com.facebook.react.%@Queue", self.name]; _methodQueue = dispatch_queue_create(_queueName.UTF8String, DISPATCH_QUEUE_SERIAL); // assign it to the module diff --git a/React/Executors/RCTJSCExecutor.m b/React/Executors/RCTJSCExecutor.m index 4fa6b60a2..d5c173088 100644 --- a/React/Executors/RCTJSCExecutor.m +++ b/React/Executors/RCTJSCExecutor.m @@ -27,7 +27,7 @@ #import "RCTRedBox.h" #import "RCTSourceCode.h" -NSString *const RCTJSCThreadName = @"com.facebook.React.JavaScript"; +NSString *const RCTJSCThreadName = @"com.facebook.react.JavaScript"; NSString *const RCTJavaScriptContextCreatedNotification = @"RCTJavaScriptContextCreatedNotification"; @@ -193,7 +193,7 @@ static void RCTInstallJSCProfiler(RCTBridge *bridge, JSContextRef context) _javaScriptThread = [[NSThread alloc] initWithTarget:[self class] selector:@selector(runRunLoopThread) object:nil]; - _javaScriptThread.name = @"com.facebook.React.JavaScript"; + _javaScriptThread.name = RCTJSCThreadName; if ([_javaScriptThread respondsToSelector:@selector(setQualityOfService:)]) { [_javaScriptThread setQualityOfService:NSOperationQualityOfServiceUserInteractive]; diff --git a/React/Modules/RCTAsyncLocalStorage.m b/React/Modules/RCTAsyncLocalStorage.m index 46d062224..f3f6a208a 100644 --- a/React/Modules/RCTAsyncLocalStorage.m +++ b/React/Modules/RCTAsyncLocalStorage.m @@ -117,7 +117,7 @@ static dispatch_queue_t RCTGetMethodQueue() static dispatch_queue_t queue; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - queue = dispatch_queue_create("com.facebook.React.AsyncLocalStorageQueue", DISPATCH_QUEUE_SERIAL); + queue = dispatch_queue_create("com.facebook.react.AsyncLocalStorageQueue", DISPATCH_QUEUE_SERIAL); }); return queue; } diff --git a/React/Modules/RCTUIManager.m b/React/Modules/RCTUIManager.m index 1b6b988df..8c0a927a0 100644 --- a/React/Modules/RCTUIManager.m +++ b/React/Modules/RCTUIManager.m @@ -323,7 +323,7 @@ RCT_EXPORT_MODULE() - (dispatch_queue_t)methodQueue { if (!_shadowQueue) { - const char *queueName = "com.facebook.React.ShadowQueue"; + const char *queueName = "com.facebook.react.ShadowQueue"; if ([NSOperation instancesRespondToSelector:@selector(qualityOfService)]) { dispatch_queue_attr_t attr = dispatch_queue_attr_make_with_qos_class(DISPATCH_QUEUE_SERIAL, QOS_CLASS_USER_INTERACTIVE, 0);