summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorfischman@webrtc.org <fischman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-04-30 00:17:47 +0000
committerfischman@webrtc.org <fischman@webrtc.org@4adac7df-926f-26a2-2b94-8c16560cd09d>2014-04-30 00:17:47 +0000
commitfcdeef1f21b96f1f852a43f0aa555db5c4855be6 (patch)
treeeb6e47624e41b8f4858ed9bd0818a925f0382e92 /examples
parentaa06b85f89c9e3d388b67c7c0b4c5e9347809a5b (diff)
downloadtalk-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.m40
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]];