From c097710cce7b90ff590f98faeb553d59695a0b17 Mon Sep 17 00:00:00 2001 From: kthelgason Date: Mon, 24 Apr 2017 00:57:16 -0700 Subject: [PATCH] Reland of GN: Enable ARC for Mac and iOS in rtc_* templates (patchset #1 id:1 of https://codereview.webrtc.org/2827223003/ ) Reason for revert: Relanding after fixing ARC issue. Original issue's description: > Revert of GN: Enable ARC for Mac and iOS in rtc_* templates (patchset #3 id:40001 of https://codereview.webrtc.org/2781713004/ ) > > Reason for revert: > Breaks mac build > > Original issue's description: > > GN: Enable ARC for Mac and iOS in rtc_* templates > > > > Remove all uses of retain/release and NSAutoreleasePool. > > > > This makes transformation to Bazel easier. > > > > This CL subsumes https://codereview.webrtc.org/2778163002 and depends on https://codereview.webrtc.org/2784483002/ > > > > BUG=webrtc:6412 > > > > Review-Url: https://codereview.webrtc.org/2781713004 > > Cr-Commit-Position: refs/heads/master@{#17780} > > Committed: https://chromium.googlesource.com/external/webrtc/+/6bda02b51dc00401d2a0d04be996ed10e5acac47 > > TBR=kjellander@webrtc.org,magjed@webrtc.org,stefan@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:6412 > > Review-Url: https://codereview.webrtc.org/2827223003 > Cr-Commit-Position: refs/heads/master@{#17784} > Committed: https://chromium.googlesource.com/external/webrtc/+/7c8786ae8f2d8481f74b0ab16eb91a8101fe51dc TBR=kjellander@webrtc.org,magjed@webrtc.org,stefan@webrtc.org # Not skipping CQ checks because original CL landed more than 1 days ago. BUG=webrtc:6412 Review-Url: https://codereview.webrtc.org/2834273002 Cr-Commit-Position: refs/heads/master@{#17836} --- webrtc/examples/BUILD.gn | 14 +------ webrtc/modules/audio_device/BUILD.gn | 3 -- .../mouse_cursor_monitor_mac.mm | 2 +- webrtc/sdk/BUILD.gn | 35 ++++++----------- .../UnitTests/RTCPeerConnectionTest.mm | 10 +++-- .../UnitTests/avformatmappertests.mm | 1 - webrtc/test/BUILD.gn | 1 - webrtc/test/mac/run_test.mm | 38 +++++++++---------- webrtc/test/mac/video_renderer_mac.mm | 9 +---- webrtc/webrtc.gni | 4 ++ 10 files changed, 44 insertions(+), 73 deletions(-) diff --git a/webrtc/examples/BUILD.gn b/webrtc/examples/BUILD.gn index 10deaf27c4..d8e2545816 100644 --- a/webrtc/examples/BUILD.gn +++ b/webrtc/examples/BUILD.gn @@ -160,7 +160,6 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "objc/AppRTCMobile/common/ARDUtilities.h", "objc/AppRTCMobile/common/ARDUtilities.m", ] - configs += [ "//build/config/compiler:enable_arc" ] public_configs = [ ":apprtc_common_config" ] deps = [ @@ -227,7 +226,6 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "objc/AppRTCMobile/RTCSessionDescription+JSON.h", "objc/AppRTCMobile/RTCSessionDescription+JSON.m", ] - configs += [ "//build/config/compiler:enable_arc" ] public_configs = [ ":apprtc_signaling_config" ] deps = [ ":apprtc_common", @@ -260,7 +258,6 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "objc/AppRTCMobile/ios/UIImage+ARDUtilities.h", "objc/AppRTCMobile/ios/UIImage+ARDUtilities.m", ] - configs += [ "//build/config/compiler:enable_arc" ] deps = [ ":apprtc_common", @@ -337,10 +334,7 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "objc/AppRTCMobile/mac/APPRTCViewController.h", "objc/AppRTCMobile/mac/APPRTCViewController.m", ] - configs += [ - "//webrtc:common_objc", - "//build/config/compiler:enable_arc", - ] + configs += [ "//webrtc:common_objc" ] deps = [ ":apprtc_common", ":apprtc_signaling", @@ -394,10 +388,7 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.h", "objc/AppRTCMobile/third_party/SocketRocket/SRWebSocket.m", ] - configs += [ - "//build/config/compiler:enable_arc", - ":socketrocket_warning_config", - ] + configs += [ ":socketrocket_warning_config" ] public_configs = [ ":socketrocket_include_config" ] libs = [ @@ -430,7 +421,6 @@ if (is_ios || (is_mac && target_cpu != "x86")) { "//build/config/ios:xctest", "//third_party/ocmock", ] - configs += [ "//build/config/compiler:enable_arc" ] } rtc_ios_xctest_test("apprtcmobile_tests") { diff --git a/webrtc/modules/audio_device/BUILD.gn b/webrtc/modules/audio_device/BUILD.gn index 46f02821a2..da05f5f11f 100644 --- a/webrtc/modules/audio_device/BUILD.gn +++ b/webrtc/modules/audio_device/BUILD.gn @@ -192,8 +192,6 @@ rtc_static_library("audio_device") { "ios/voice_processing_audio_unit.h", "ios/voice_processing_audio_unit.mm", ] - configs += [ "//build/config/compiler:enable_arc" ] - libs = [ "AudioToolbox.framework", "AVFoundation.framework", @@ -291,7 +289,6 @@ if (rtc_include_tests) { } if (is_ios) { sources += [ "ios/objc/RTCAudioSessionTest.mm" ] - configs += [ "//build/config/compiler:enable_arc" ] if (target_cpu != "x64") { sources += [ "ios/audio_device_unittest_ios.cc" ] } diff --git a/webrtc/modules/desktop_capture/mouse_cursor_monitor_mac.mm b/webrtc/modules/desktop_capture/mouse_cursor_monitor_mac.mm index 213071952b..73d5e02857 100644 --- a/webrtc/modules/desktop_capture/mouse_cursor_monitor_mac.mm +++ b/webrtc/modules/desktop_capture/mouse_cursor_monitor_mac.mm @@ -36,7 +36,7 @@ namespace { // setting. NSImage* PaintInCurrentContext(NSImage* source) { NSSize size = [source size]; - NSImage* new_image = [[[NSImage alloc] initWithSize:size] autorelease]; + NSImage* new_image = [[NSImage alloc] initWithSize:size]; [new_image lockFocus]; NSRect frame = NSMakeRect(0, 0, size.width, size.height); [source drawInRect:frame diff --git a/webrtc/sdk/BUILD.gn b/webrtc/sdk/BUILD.gn index 77a9f552a7..721580d872 100644 --- a/webrtc/sdk/BUILD.gn +++ b/webrtc/sdk/BUILD.gn @@ -50,14 +50,12 @@ if (is_ios || is_mac) { "objc/Framework/Headers/WebRTC/RTCSSLAdapter.h", "objc/Framework/Headers/WebRTC/RTCTracing.h", ] - configs += [ - "..:common_objc", - "//build/config/compiler:enable_arc", - ] - public_configs = [ ":rtc_sdk_common_objc_config" ] deps = [ "../base:rtc_base", ] + configs += [ "..:common_objc" ] + + public_configs = [ ":rtc_sdk_common_objc_config" ] if (is_ios) { sources += [ "objc/Framework/Classes/RTCCameraPreviewView.m", @@ -195,13 +193,6 @@ if (is_ios || is_mac) { "objc/Framework/Headers/WebRTC/RTCVideoTrack.h", ] - configs += [ - "..:common_objc", - "//build/config/compiler:enable_arc", - ] - - public_configs = [ ":rtc_sdk_common_objc_config" ] - deps = [ ":webrtc_h264_video_toolbox", "../api:video_frame_api", @@ -245,6 +236,10 @@ if (is_ios || is_mac) { ] } + configs += [ "..:common_objc" ] + + public_configs = [ ":rtc_sdk_common_objc_config" ] + if (!build_with_chromium && is_clang) { # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] @@ -368,13 +363,6 @@ if (is_ios || is_mac) { "@rpath/$output_name.framework/$output_name", ] - configs += [ - "..:common_objc", - "//build/config/compiler:enable_arc", - ] - - public_configs = [ ":rtc_sdk_common_objc_config" ] - deps = [ ":rtc_sdk_peerconnection_objc", "../system_wrappers:field_trial_default", @@ -390,6 +378,10 @@ if (is_ios || is_mac) { "VideoToolbox.framework", ] + configs += [ "..:common_objc" ] + + public_configs = [ ":rtc_sdk_common_objc_config" ] + if (!build_with_chromium && is_clang) { # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163) configs -= [ "//build/config/clang:find_bad_constructs" ] @@ -416,10 +408,7 @@ if (is_ios || is_mac) { "objc/Framework/Classes/h264_video_toolbox_nalu.h", ] - configs += [ - "//webrtc:common_objc", - "//build/config/compiler:enable_arc", - ] + configs += [ "//webrtc:common_objc" ] deps = [ ":rtc_sdk_common_objc", diff --git a/webrtc/sdk/objc/Framework/UnitTests/RTCPeerConnectionTest.mm b/webrtc/sdk/objc/Framework/UnitTests/RTCPeerConnectionTest.mm index bd2db305da..1797feabce 100644 --- a/webrtc/sdk/objc/Framework/UnitTests/RTCPeerConnectionTest.mm +++ b/webrtc/sdk/objc/Framework/UnitTests/RTCPeerConnectionTest.mm @@ -53,11 +53,13 @@ RTCMediaConstraints *contraints = [[RTCMediaConstraints alloc] initWithMandatoryConstraints:@{} optionalConstraints:nil]; RTCPeerConnectionFactory *factory = [[RTCPeerConnectionFactory alloc] init]; - RTCPeerConnection *peerConnection = [factory peerConnectionWithConfiguration:config - constraints:contraints delegate:nil]; - - RTCConfiguration *newConfig = peerConnection.configuration; + RTCConfiguration *newConfig; + @autoreleasepool { + RTCPeerConnection *peerConnection = + [factory peerConnectionWithConfiguration:config constraints:contraints delegate:nil]; + newConfig = peerConnection.configuration; + } EXPECT_EQ([config.iceServers count], [newConfig.iceServers count]); RTCIceServer *newServer = newConfig.iceServers[0]; RTCIceServer *origServer = config.iceServers[0]; diff --git a/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm b/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm index 624eec3d6c..cbc2e50df5 100644 --- a/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm +++ b/webrtc/sdk/objc/Framework/UnitTests/avformatmappertests.mm @@ -97,7 +97,6 @@ static cricket::VideoFormat expectedFormat = CFRelease(_format); _format = nil; } - [super dealloc]; } // Redefinition of AVCaptureDevice methods we want to mock. diff --git a/webrtc/test/BUILD.gn b/webrtc/test/BUILD.gn index 64b6e03919..e76ff03b6c 100644 --- a/webrtc/test/BUILD.gn +++ b/webrtc/test/BUILD.gn @@ -128,7 +128,6 @@ rtc_source_set("fileutils") { ] if (is_ios) { sources += [ "testsupport/iosfileutils.mm" ] - configs += [ "//build/config/compiler:enable_arc" ] } visibility = [ ":*" ] deps = [ diff --git a/webrtc/test/mac/run_test.mm b/webrtc/test/mac/run_test.mm index 4e0093a9b6..7576b55763 100644 --- a/webrtc/test/mac/run_test.mm +++ b/webrtc/test/mac/run_test.mm @@ -36,10 +36,10 @@ TestBlock functionToBlock(void(*function)()) { } - (void)runAllTests:(TestBlock)testBlock { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - testBlock(); - running_ = NO; - [pool release]; + @autoreleasepool { + testBlock(); + running_ = NO; + } } - (BOOL)running { @@ -51,24 +51,22 @@ namespace webrtc { namespace test { void RunTest(void(*test)()) { - NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; - [NSApplication sharedApplication]; + @autoreleasepool { + [NSApplication sharedApplication]; - // Convert the function pointer to an Objective-C block and call on a - // separate thread, to avoid blocking the main thread. - TestRunner *testRunner = [[TestRunner alloc] init]; - TestBlock testBlock = functionToBlock(test); - [NSThread detachNewThreadSelector:@selector(runAllTests:) - toTarget:testRunner - withObject:testBlock]; + // Convert the function pointer to an Objective-C block and call on a + // separate thread, to avoid blocking the main thread. + TestRunner *testRunner = [[TestRunner alloc] init]; + TestBlock testBlock = functionToBlock(test); + [NSThread detachNewThreadSelector:@selector(runAllTests:) + toTarget:testRunner + withObject:testBlock]; - NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; - while ([testRunner running] && - [runLoop runMode:NSDefaultRunLoopMode - beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]); - - [testRunner release]; - [pool release]; + NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; + while ([testRunner running] && [runLoop runMode:NSDefaultRunLoopMode + beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]) + ; + } } } // namespace test diff --git a/webrtc/test/mac/video_renderer_mac.mm b/webrtc/test/mac/video_renderer_mac.mm index f79aecf916..411a7d0614 100644 --- a/webrtc/test/mac/video_renderer_mac.mm +++ b/webrtc/test/mac/video_renderer_mac.mm @@ -43,11 +43,6 @@ return self; } -- (void)dealloc { - [window_ release]; - [super dealloc]; -} - - (void)createWindow:(NSObject *)ignored { NSInteger xOrigin = nextXOrigin_; NSRect screenFrame = [[NSScreen mainScreen] frame]; @@ -71,8 +66,7 @@ defer:NO]; NSRect viewFrame = NSMakeRect(0, 0, width_, height_); - NSOpenGLView *view = [[[NSOpenGLView alloc] initWithFrame:viewFrame - pixelFormat:nil] autorelease]; + NSOpenGLView *view = [[NSOpenGLView alloc] initWithFrame:viewFrame pixelFormat:nil]; context_ = [view openGLContext]; [[window_ contentView] addSubview:view]; @@ -105,7 +99,6 @@ MacRenderer::MacRenderer() MacRenderer::~MacRenderer() { GlRenderer::Destroy(); - [window_ release]; } bool MacRenderer::Init(const char* window_title, int width, int height) { diff --git a/webrtc/webrtc.gni b/webrtc/webrtc.gni index 6f902c97bf..e47ac08afc 100644 --- a/webrtc/webrtc.gni +++ b/webrtc/webrtc.gni @@ -211,6 +211,10 @@ webrtc_root = get_path_info(".", "abspath") # native code is built as part of Chromium. rtc_common_configs = [ webrtc_root + ":common_config" ] +if (is_mac || is_ios) { + rtc_common_configs += [ "//build/config/compiler:enable_arc" ] +} + # Global public configuration that should be applied to all WebRTC targets. You # normally shouldn't need to include this in your target as it's automatically # included when using the rtc_* templates. It set the defines, include paths and