Edit

kc3-lang/angle/util/ios/ios_main.mm

Branch :

  • Show log

    Commit

  • Author : James Darpinian
    Date : 2020-12-08 12:24:35
    Hash : 0dbe7cdd
    Message : iOS testing support angle_white_box_tests build and runs and passes on the iOS simulator with this change. angle_end2end_tests builds and runs but crashes. Bug: angleproject:4256 Bug: angleproject:5417 Change-Id: I8817e46415c4598cbfae49804727a2e9b21baff1 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2600361 Commit-Queue: James Darpinian <jdarpinian@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Kenneth Russell <kbr@chromium.org>

  • util/ios/ios_main.mm
  • //
    // Copyright 2020 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    
    // ios_main.mm: Alternative entry point for iOS executables that initializes UIKit before calling
    // the default entry point.
    
    #import <UIKit/UIKit.h>
    
    #include <stdio.h>
    
    static int original_argc;
    static char **original_argv;
    
    extern "C" int main(int argc, char **argv);
    
    @interface AngleUtilAppDelegate : UIResponder <UIApplicationDelegate>
    
    @property(nullable, nonatomic, strong) UIWindow *window;
    
    @end
    
    @implementation AngleUtilAppDelegate
    
    @synthesize window;
    
    - (void)runMain
    {
        exit(main(original_argc, original_argv));
    }
    
    - (BOOL)application:(UIApplication *)application
        didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window                    = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
        self.window.rootViewController = [[UIViewController alloc] initWithNibName:nil bundle:nil];
        [self.window makeKeyAndVisible];
        // We need to return from this function before the app finishes launching, so call main in a
        // timer callback afterward.
        [NSTimer scheduledTimerWithTimeInterval:0
                                         target:self
                                       selector:@selector(runMain)
                                       userInfo:nil
                                        repeats:NO];
        return YES;
    }
    
    @end
    
    extern "C" int ios_main(int argc, char **argv)
    {
        original_argc = argc;
        original_argv = argv;
        return UIApplicationMain(argc, argv, nullptr, NSStringFromClass([AngleUtilAppDelegate class]));
    }