diff options
author | fischman@webrtc.org <fischman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-04-30 00:17:47 +0000 |
---|---|---|
committer | fischman@webrtc.org <fischman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d> | 2014-04-30 00:17:47 +0000 |
commit | fcdeef1f21b96f1f852a43f0aa555db5c4855be6 (patch) | |
tree | eb6e47624e41b8f4858ed9bd0818a925f0382e92 /examples | |
parent | aa06b85f89c9e3d388b67c7c0b4c5e9347809a5b (diff) | |
download | talk-fcdeef1f21b96f1f852a43f0aa555db5c4855be6.tar.gz |
AppRTCDemo was blocking the main thread for network requests. This fixes it by making the background queue serial instead of using @synchronize to make the background operations serial.
R=fischman@webrtc.org
Review URL: https://webrtc-codereview.appspot.com/16379004
Patch from Bridger Maxwell <bridgeyman@gmail.com>.
git-svn-id: http://webrtc.googlecode.com/svn/trunk/talk@6028 4adac7df-926f-26a2-2b94-8c16560cd09d
Diffstat (limited to 'examples')
-rw-r--r-- | examples/ios/AppRTCDemo/APPRTCAppClient.m | 40 |
1 files changed, 17 insertions, 23 deletions
diff --git a/examples/ios/AppRTCDemo/APPRTCAppClient.m b/examples/ios/AppRTCDemo/APPRTCAppClient.m index 9ac83ff..9ef0a7a 100644 --- a/examples/ios/AppRTCDemo/APPRTCAppClient.m +++ b/examples/ios/AppRTCDemo/APPRTCAppClient.m @@ -56,7 +56,8 @@ if (self = [super init]) { _ICEServerDelegate = delegate; _messageHandler = handler; - _backgroundQueue = dispatch_queue_create("RTCBackgroundQueue", NULL); + _backgroundQueue = dispatch_queue_create("RTCBackgroundQueue", + DISPATCH_QUEUE_SERIAL); _sendQueue = [NSMutableArray array]; // Uncomment to see Request/Response logging. // _verboseLogging = YES; @@ -72,11 +73,22 @@ } - (void)sendData:(NSData*)data { - @synchronized(self) { - [self maybeLogMessage:@"Send message"]; + [self maybeLogMessage:@"Send message"]; + + dispatch_async(self.backgroundQueue, ^{ [self.sendQueue addObject:[data copy]]; - } - [self requestQueueDrainInBackground]; + + if ([self.postMessageUrl length] < 1) { + return; + } + for (NSData* data in self.sendQueue) { + NSString* url = + [NSString stringWithFormat:@"%@/%@", + self.baseURL, self.postMessageUrl]; + [self sendData:data withUrl:url]; + } + [self.sendQueue removeAllObjects]; + }); } #pragma mark - Internal methods @@ -133,24 +145,6 @@ } } -- (void)requestQueueDrainInBackground { - dispatch_async(self.backgroundQueue, ^(void) { - // TODO(hughv): This can block the UI thread. Fix. - @synchronized(self) { - if ([self.postMessageUrl length] < 1) { - return; - } - for (NSData* data in self.sendQueue) { - NSString* url = - [NSString stringWithFormat:@"%@/%@", - self.baseURL, self.postMessageUrl]; - [self sendData:data withUrl:url]; - } - [self.sendQueue removeAllObjects]; - } - }); -} - - (void)sendData:(NSData*)data withUrl:(NSString*)url { NSMutableURLRequest* request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]]; |